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: <alpine.LFD.0.999.0707111410430.20061@woody.linux-foundation.org>
Date:	Wed, 11 Jul 2007 14:29:58 -0700 (PDT)
From:	Linus Torvalds <torvalds@...ux-foundation.org>
To:	Martin Orr <martin@...tinorr.name>
cc:	Andi Kleen <andi@...stfloor.org>, Stefano Rivoir <s.rivoir@....it>,
	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: Linux 2.6.22 released



On Wed, 11 Jul 2007, Martin Orr wrote:

> On 11/07/07 19:01, Linus Torvalds wrote:
> > Can you do
> > 
> > 	make arch/x86_64/kernel/signal.s
> > 
> > with both compilers, and post the results somewhere? It's probably going 
> 
> OK, they are at:
> http://www.srcf.ucam.org/~mpo25/2007/linux-signal/

Ok, do_notify_resume() which inlines the "setup_frame()" code has has been 
totally buggered by the new compiler.

The code is the

        err |= __put_user(0, &frame->uc.uc_flags);
        err |= __put_user(0, &frame->uc.uc_link);
        err |= __put_user(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
        err |= __put_user(sas_ss_flags(regs->rsp),
                          &frame->uc.uc_stack.ss_flags);
        err |= __put_user(me->sas_ss_size, &frame->uc.uc_stack.ss_size);
        err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0], me);
        err |= __put_user(fp, &frame->uc.uc_mcontext.fpstate);

and both compilers do a pretty bad job at this, but at least the old 
compiler generated the errors properly:

-       orl     100(%rsp), %esi # __pu_err, __pu_err
-       orl     96(%rsp), %esi  # __pu_err, __pu_err
-       orl     16(%rsp), %esi  # __pu_err, __pu_err
-       orl     20(%rsp), %esi  # __pu_err, __pu_err
-       orl     24(%rsp), %esi  # __pu_err, __pu_err
-       orl     28(%rsp), %esi  # __pu_err, __pu_err
-       orl     32(%rsp), %esi  # __pu_err, __pu_err
-       orl     36(%rsp), %esi  # __pu_err, __pu_err
-       orl     40(%rsp), %esi  # __pu_err, __pu_err
-       orl     44(%rsp), %esi  # __pu_err, __pu_err
-       orl     48(%rsp), %esi  # __pu_err, __pu_err
-       orl     52(%rsp), %esi  # __pu_err, __pu_err
-       orl     56(%rsp), %esi  # __pu_err, __pu_err
-       orl     60(%rsp), %esi  # __pu_err, __pu_err
-       orl     64(%rsp), %esi  # __pu_err, __pu_err
-       orl     68(%rsp), %esi  # __pu_err, __pu_err
-       orl     72(%rsp), %esi  # __pu_err, __pu_err
-       orl     76(%rsp), %esi  # __pu_err, __pu_err
-       orl     80(%rsp), %esi  # __pu_err, __pu_err
-       orl     84(%rsp), %esi  # __pu_err, __pu_err
-       orl     88(%rsp), %esi  # __pu_err, __pu_err
-       orl     92(%rsp), %esi  # __pu_err, __pu_err

and the new compiler is just incredibly broken:

+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %eax, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err
+       orl     %ecx, %esi      # __pu_err, __pu_err

I don't think this is worth even trying to fix. This is terminal compiler 
breakage. Make a bug-report to the gcc people, the inline asm stuff has 
been totally buggered by that compiler version.

If it mis-compiled that part, it probably miscompiled a lot of other 
things too.

		Linus
-
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