Date: Sun, 21 Jan 2018 18:04:37 -0800 From: Linus Torvalds <torvalds@...ux-foundation.org> To: Andy Lutomirski <luto@...nel.org> Cc: Jann Horn <jannh@...gle.com>, Dan Williams <dan.j.williams@...el.com>, Thomas Gleixner <tglx@...utronix.de>, linux-arch <linux-arch@...r.kernel.org>, Kernel Hardening <kernel-hardening@...ts.openwall.com>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, "the arch/x86 maintainers" <x86@...nel.org>, Ingo Molnar <mingo@...hat.com>, "H. Peter Anvin" <hpa@...or.com>, Alan Cox <alan@...ux.intel.com> Subject: Re: Re: [PATCH v4.1 07/10] x86: narrow out of bounds syscalls to sys_read under speculation On Sun, Jan 21, 2018 at 5:38 PM, Andy Lutomirski <luto@...nel.org> wrote: > > 3. What's with sbb; and? I can see two sane ways to do this. One is > cmovaq [something safe], %rax, Heh. I think it's partly about being old-fashioned. sbb has always been around, and is the traditional trick for 0/-1. Also, my original suggested thing did the *access* too, and masked the result with the same mask. But I guess we could use cmov instead. It has very similar performance (ie it was relatively slow on P4, but so was sbb). However, I suspect it actually has a slightly higher register pressure, since you'd need to have that zero register (zero being the "safe" value), and the only good way to get a zero value is the xor thing, which affects flags and thus needs to be before the cmp. In contrast, the sbb trick has no early inputs needed. So on the whole, 'cmov' may be more natural on a conceptual level, but the sbb trick really is a very "traditional x86 thing" to do. Linus
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.