← Back to team overview

registry team mailing list archive

[Bug 72814] Re: Crash at login

 

Launchpad has imported 13 comments from the remote bug at
http://bugs.freedesktop.org/show_bug.cgi?id=10247.

If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.

------------------------------------------------------------------------
On 2007-03-10T13:06:31+00:00 didier wrote:

from setjmp manual:
POSIX  does  not  specify whether setjmp() will save the signal context.

Example of strace output on a G3 running linux Ubuntu 2.6.20

strace -f gnome-sound-properties without a ~/.gstreamer-0.10
directory.
...
32021 open("/usr/lib/liboil-0.3.so.0", O_RDONLY) = 5
32021 rt_sigaction(SIGILL, {0xe0a3120, [], 0}, {SIG_DFL}, 8) = 0
...
32021 --- SIGILL (Illegal instruction) @ 0 (0) ---
           no altivec
32021 rt_sigaction(SIGILL, {SIG_DFL}, NULL, 8) = 0
32021 rt_sigaction(SIGILL, {0xe0a3120, [], 0}, {SIG_DFL}, 8) = 0
32021 rt_sigaction(SIGILL, {SIG_DFL}, NULL, 8) = 0
32021 rt_sigaction(SIGSEGV, {SIG_DFL}, NULL, 8) = 0
...
32021 open("/usr/lib/libvisual-0.4.so.0", O_RDONLY) = 5
....
32021 rt_sigaction(SIGILL, {0xe03b884, [ILL], SA_RESTART}, {SIG_DFL}, 8) = 0
                     SIGILL is now blocked...
32021 rt_sigprocmask(SIG_BLOCK, NULL, [ILL], 8) = 0
32021 --- SIGILL (Illegal instruction) @ 0 (0) ---
                undefined behaviour...
32020 <... read resumed> "", 1)         = 0
32020 --- SIGCHLD (Child exited) @ 0 (0) ---
32020 close(3)                          = 0

Sure it's also a bug in libvisual but IMO a library should change signal
set if it doesn't need it.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/12

------------------------------------------------------------------------
On 2007-03-10T13:40:22+00:00 didier wrote:

Can't create an attachment but the patch is obvious

diff -Nru /tmp/f3RzZU4qya/liboil-0.3.10/liboil/liboilcpu.c /tmp/6RumtZJFBp/liboil-0.3.10/liboil/liboilcpu.c
--- /tmp/f3RzZU4qya/liboil-0.3.10/liboil/liboilcpu.c	2007-03-09 12:38:34.000000000 +0100
+++ /tmp/6RumtZJFBp/liboil-0.3.10/liboil/liboilcpu.c	2007-03-09 12:38:37.000000000 +0100
@@ -142,7 +142,7 @@
 illegal_instruction_handler (int num)
 {
   if (in_try_block) {
-    longjmp (jump_env, 1);
+    siglongjmp (jump_env, 1);
   } else {
     abort ();
   }
@@ -196,7 +196,7 @@
   int ret;
 
   in_try_block = 1;
-  ret = setjmp (jump_env);
+  ret = sigsetjmp (jump_env,1);
   if (!ret) {
     func (priv);
   }

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/13

------------------------------------------------------------------------
On 2007-03-16T14:46:34+00:00 David Schleef wrote:

What does this fix?  Liboil code doesn't change any signal masks, so
it's not really important to save them or not.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/15

------------------------------------------------------------------------
On 2007-03-17T02:47:43+00:00 didier wrote:

(In reply to comment #2)
> What does this fix?  Liboil code doesn't change any signal masks, so it's not
> really important to save them or not.
> 

Yes it does, SIGILL is blocked in the signal handler, and the longjmp
doesn't unblock it. In the strace output there's no call to sigset.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/16

------------------------------------------------------------------------
On 2007-03-17T11:54:15+00:00 David Schleef wrote:

That's not in liboil, it's in libvisual.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/17

------------------------------------------------------------------------
On 2007-03-22T10:07:10+00:00 didier wrote:

(In reply to comment #4)
> That's not in liboil, it's in libvisual.
> 
If you compile the following code oil_cpu_test.c:

#include <stdio.h>
main()
{
_oil_cpu_init();
_oil_cpu_init();
printf("done\n");
}

gcc oil_cpu_test.c -o oil_cpu /usr/lib/liboil-0.3.a -lm

On a G3 for some systems (kernel/libc) it will dump core in the second
_oil_cpu_init

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/18

------------------------------------------------------------------------
On 2007-03-22T14:07:12+00:00 David Schleef wrote:

Ok, I see what the problem is now.  Both the kernel and liboil have
changed subtlely since this was tested heavily.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/19

------------------------------------------------------------------------
On 2007-08-14T08:43:18+00:00 Bastien Nocera wrote:

*** Bug 11997 has been marked as a duplicate of this bug. ***

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/28

------------------------------------------------------------------------
On 2007-08-14T10:54:35+00:00 David Schleef wrote:

*** Bug 11997 has been marked as a duplicate of this bug. ***

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/29

------------------------------------------------------------------------
On 2007-08-14T10:57:11+00:00 David Schleef wrote:

Checked in, finally.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/30

------------------------------------------------------------------------
On 2007-08-15T01:28:29+00:00 Bastien Nocera wrote:

Doesn't compile:
liboilcpu.c:207:28: error: macro "sigsetjmp" requires 2 arguments, but only 1 given
liboilcpu.c: In function 'oil_cpu_fault_check_try':
liboilcpu.c:207: error: 'sigsetjmp' undeclared (first use in this function)
liboilcpu.c:207: error: (Each undeclared identifier is reported only once
liboilcpu.c:207: error: for each function it appears in.)
make[4]: *** [liboil_0.3_la-liboilcpu.lo] Error 1

That's on i686 with glibc-2.6.90-8 (Fedora Rawhide)

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/31

------------------------------------------------------------------------
On 2007-08-15T01:31:48+00:00 Bastien Nocera wrote:

-  ret = sigsetjmp (jump_env);
+  ret = sigsetjmp (jump_env, 1);

That should do.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/32

------------------------------------------------------------------------
On 2007-08-15T14:22:16+00:00 David Schleef wrote:

Er, I'm an idiot.

First of all, for checking in code that trivially doesn't compile.

Second, because I fixed the problem without using sigsetjmp/siglongjmp()
by restoring the signal mask by hand.  Restoring the mask by hand has
the advantage of being slightly more thread-friendly, since it's an
atomic unmasking of SIGILL.  I think.  Also, I think I was worried that
siglongjmp() isn't supported on ${some_platform}.

Anyway, I'm leaving it as sigsetjmp/siglongjmp() because these function
calls are designed to do exactly what we're doing.

Reply at: https://bugs.launchpad.net/liboil/+bug/72814/comments/33


** Changed in: liboil
   Importance: Unknown => Medium

-- 
Crash at login
https://bugs.launchpad.net/bugs/72814
You received this bug notification because you are a member of Registry
Administrators, which is the registrant for Debian.