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]
Date:	Mon, 25 May 2009 16:10:40 -0500
From:	"Michael S. Zick" <lkml@...ethan.org>
To:	"H. Peter Anvin" <hpa@...or.com>
Cc:	Harald Welte <HaraldWelte@...tech.com>,
	Ingo Molnar <mingo@...e.hu>,
	Thomas Gleixner <tglx@...utronix.de>,
	linux-kernel@...r.kernel.org, Alan Cox <alan@...rguk.ukuu.org.uk>
Subject: Re: [BUG FIX] Make x86_32 uni-processor Atomic ops, Atomic

On Mon May 25 2009, Michael S. Zick wrote:

In actual application, this *should not* make a difference.

Mike
> On Mon May 25 2009, Michael S. Zick wrote:
> > On Mon May 25 2009, Michael S. Zick wrote:
> > > On Sun May 24 2009, H. Peter Anvin wrote:
> > > > Michael S. Zick wrote:
> > > > > 
> > > > > Note: I have seem to recall that newer gcc's optimizer presume 
> > > > > that the flags register is preserved across asm - 
> > > > > It didn't use to do that - but there is now a "cc" to deal with
> > > > > that - Have not yet audited for that, but it is high on my list.
> > > > > 
> > > > 
> > > > I am pretty sure that's false... if it was true we'd have failures all
> > > > over the kernel.
> > > > 
> > > 
> > > No information on the above (yet) - but you gotta love this one: ;)
> > > 
> > > Programmer authors code specifying that the subtraction be done
> > > prior to the addition to avoid over-flow conditions;
> > > 
> > > GCC's optimizer, in its great wisdom, codes in the overflow case:
> > > ( the case of finding the characters used/free in a ring buffer )
> > > 
> > > extern int diff_umask(int mask, int *cnt1, int *cnt2) 
> > > { return (((mask - *cnt1) + *cnt2) & mask); }
> > > 
> > > /**
> > >  * gcc -O2 -S -fomit-frame-pointer difftest.c
> > >  *
> > >          .file   "difftest.c"
> > >         .text
> > >         .p2align 4,,15
> > > .globl diff_umask
> > >         .type   diff_umask, @function
> > > diff_umask:
> > >         movl    12(%esp), %eax
> > >         movl    4(%esp), %ecx
> > >         movl    (%eax), %edx
> > >         leal    (%ecx,%edx), %eax
> > >         movl    8(%esp), %edx
> > >         subl    (%edx), %eax
> > >         andl    %ecx, %eax
> > >         ret
> > >         .size   diff_umask, .-diff_umask
> > >         .ident  "GCC: (Debian 4.3.2-1.1) 4.3.2"
> > >         .section        .note.GNU-stack,"",@progbits
> > > */
> > > 
> > > Note: That is not the compiler version I am building my kernels with.
> > > 
> > 
> > The compiler I am using (Gentoo 4.1.2) gets it correct:
> > 
> >         .file   "difftest.c"
> >         .text
> >         .p2align 4,,15
> > .globl diff_umask
> >         .type   diff_umask, @function
> > diff_umask:
> >         movl    4(%esp), %eax
> >         movl    8(%esp), %edx
> >         movl    %eax, %ecx
> >         subl    (%edx), %ecx
> >         movl    %ecx, %edx
> >         movl    12(%esp), %ecx
> >         addl    (%ecx), %edx
> >         andl    %edx, %eax
> >         ret
> >         .size   diff_umask, .-diff_umask
> >         .ident  "GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.1)"
> >         .section        .note.GNU-stack,"",@progbits
> > 
> 
> Gentoo's current 4.3 gets it wrong also:
> 
>         .file   "difftest.c"
>         .text
>         .p2align 4,,15
> .globl diff_umask
>         .type   diff_umask, @function
> diff_umask:
>         movl    12(%esp), %eax
>         movl    4(%esp), %ecx
>         movl    (%eax), %edx
>         leal    (%ecx,%edx), %eax
>         movl    8(%esp), %edx
>         subl    (%edx), %eax
>         andl    %ecx, %eax
>         ret
>         .size   diff_umask, .-diff_umask
>         .ident  "GCC: (Gentoo 4.3.2-r3 p1.6, pie-10.1.5) 4.3.2"
>         .section        .note.GNU-stack,"",@progbits
> 
> = = = =
> 
> Might be time to put compiler version checking back into the
> build system and/or re-test the sources that do have version
> checking in them (hint: the boss's code).
> 
> Mike
> > Mike
> > > Don't blame me, I didn't write the compiler. ;)
> > > 
> > > Mike
> > > > 	-hpa
> > > > 
> > > 
> > > 
> > > --
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ