lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <18fdbaeacba349a0a8bf7568f709e991@AcuMS.aculab.com>
Date:   Thu, 10 Sep 2020 15:31:53 +0000
From:   David Laight <David.Laight@...LAB.COM>
To:     'Segher Boessenkool' <segher@...nel.crashing.org>
CC:     'Christophe Leroy' <christophe.leroy@...roup.eu>,
        'Linus Torvalds' <torvalds@...ux-foundation.org>,
        linux-arch <linux-arch@...r.kernel.org>,
        Kees Cook <keescook@...omium.org>,
        the arch/x86 maintainers <x86@...nel.org>,
        Nick Desaulniers <ndesaulniers@...gle.com>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        Alexey Dobriyan <adobriyan@...il.com>,
        "Luis Chamberlain" <mcgrof@...nel.org>,
        Al Viro <viro@...iv.linux.org.uk>,
        linux-fsdevel <linux-fsdevel@...r.kernel.org>,
        linuxppc-dev <linuxppc-dev@...ts.ozlabs.org>,
        Christoph Hellwig <hch@....de>
Subject: RE: remove the last set_fs() in common code, and remove it for x86
 and powerpc v3



> -----Original Message-----
> From: Segher Boessenkool <segher@...nel.crashing.org>
> Sent: 10 September 2020 16:21
> To: David Laight <David.Laight@...LAB.COM>
> Cc: 'Christophe Leroy' <christophe.leroy@...roup.eu>; 'Linus Torvalds' <torvalds@...ux-
> foundation.org>; linux-arch <linux-arch@...r.kernel.org>; Kees Cook <keescook@...omium.org>; the
> arch/x86 maintainers <x86@...nel.org>; Nick Desaulniers <ndesaulniers@...gle.com>; Linux Kernel
> Mailing List <linux-kernel@...r.kernel.org>; Alexey Dobriyan <adobriyan@...il.com>; Luis Chamberlain
> <mcgrof@...nel.org>; Al Viro <viro@...iv.linux.org.uk>; linux-fsdevel <linux-fsdevel@...r.kernel.org>;
> linuxppc-dev <linuxppc-dev@...ts.ozlabs.org>; Christoph Hellwig <hch@....de>
> Subject: Re: remove the last set_fs() in common code, and remove it for x86 and powerpc v3
> 
> On Thu, Sep 10, 2020 at 12:26:53PM +0000, David Laight wrote:
> > Actually this is pretty sound:
> > 	__label__ label;
> > 	register int eax asm ("eax");
> > 	// Ensure eax can't be reloaded from anywhere
> > 	// In particular it can't be reloaded after the asm goto line
> > 	asm volatile ("" : "=r" (eax));
> 
> This asm is fine.  It says it writes the "eax" variable, which lives in
> the eax register *in that asm* (so *not* guaranteed after it!).
> 
> > 	// Provided gcc doesn't save eax here...
> > 	asm volatile goto ("xxxxx" ::: "eax" : label);
> 
> So this is incorrect.

>From the other email:

> It is neither input nor output operand here!  Only *then* is a local
> register asm guaranteed to be in the given reg: as input or output to an
> inline asm.

Ok, so adding '"r" (eax)' to the input section helps a bit.

> > 	// ... and reload the saved value here.
> > 	// The input value here will be that modified by the 'asm goto'.
> > 	// Since this modifies eax it can't be moved before the 'asm goto'.
> > 	asm volatile ("" : "+r" (eax));
> > 	// So here eax must contain the value set by the "xxxxx" instructions.
> 
> No, the register eax will contain the value of the eax variable.  In the
> asm; it might well be there before or after the asm as well, but none of
> that is guaranteed.

Perhaps not 'guaranteed', but very unlikely to be wrong.
It doesn't give gcc much scope for not generating the desired code.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ