From: BlaisorBlade <bla...@ya...> - 2004-10-26 15:56:03
|
Finally, with my new broadband connection, I downloaded the Debian root_fs and finally identified the patch (it's part of 2.4.24-2) containing the bug. However, sadly, the patch causing it is the fix for the "I'm tracing myself and can't get out" bug. It is attached in two parts. I've split the patch in two part, but however without part-2 the patch does not work *at all*: when starting /sbin/init glibc throws out some messages and IIRC hangs; probably there is an unfixed SIGSEGV, because it can't read the mmap()'ed memory. The idea for splitting out the 2nd part is that it allows UML to get an infinite number of segfaults, in a loop, which can actually happen. Sadly, I've not yet been able to debug it (I've never debugged UML in TT mode). In fact, with this patch applied, a compiler bug showed up: the gcc-3.3.2 (hammer branch) included in Mandrake miscompiles UML. In TT mode it still works, but only if this patch is excluded. Also, this patch is also applied on 2.6 kernels, so it's quite important to fix it. I've also seen this comment, which does not make sense to me: + /* This is done because to allow SIGSEGV to be delivered inside a SEGV + * handler. This can happen in copy_user, and if SEGV is disabled, + * the process will die. + */ + if(sig == SIGSEGV) + change_sig(SIGSEGV, 1); + If SIGSEGV is blocked, it will just be queued and/or ignored (no more than one signal can stay in the queue); in the 2nd case, the process will get it again. Could you take a look at this issue, Jeff? -- Paolo Giarrusso, aka Blaisorblade Linux registered user n. 292729 |