(Please respond via reply-to-all, not via the bugzilla web interface) On Fri, 26 Jan 2007 14:40:09 -0800 [EMAIL PROTECTED] wrote:
> http://bugzilla.kernel.org/show_bug.cgi?id=7891 > > Summary: vdso page is no longer mapped for a.out binaries in > kernel 2.6.18 > Kernel Version: 2.6.18 and later > Status: NEW > Severity: normal > Owner: [EMAIL PROTECTED] > Submitter: [EMAIL PROTECTED] > > > Most recent kernel where this bug did *NOT* occur: 2.6.17.14 > Distribution: vanilla kernel > Hardware Environment: x86-32 > Software Environment: gentoo > Problem Description: this is a 2.6.18 regression bug. > > In kernel 2.6.18 the vdso page is no longer mapped for a.out binaries. > For instance a program using sleep will sigsegv on delivery of SIGALRM (to be > precise: on return from signal handling). I tested this using a static a.out > binary. This program does work in 2.6.17 . > > cat /proc/pid/smaps does show that vdso is not mapped in 2.6.18 for an a.out > binary. I had a look at fs/binfmt_elf.c and found that the vdso pages is > mapped > using arch_setup_additional_pages from arch/i386/kernel/sysenter.c for elf. > > I did a test calling arch_setup_additional_pages from fs/binfmt_aout.c with > positive result. > > As arch_setup_additional_pages is defined in arch/i368-asm/elf.h only, I see > no > clean way to provide a patch for fs/binfmt_aout.c. > > Steps to reproduce: > Compile a simple program using sleep() to a.out binary and execute it. It will > sigsegv on delivery of SIGALRM. > OK, who was it this time? Andi? If a.out indeed needs to call arch_setup_additional_pages() then the correct way to fix this is to rip the festering dungpile which we have now and: - Give i386, x86_64, powerpc and sh a new CONFIG_ARCH_HAS_SETUP_ADDITIONAL_PAGES - Create a new include/linux/interp.h which has: struct linux_binprm; #ifdef CONFIG_ARCH_HAS_SETUP_ADDITIONAL_PAGES extern int arch_setup_additional_pages(struct linux_binprm *bprm, int executable_stack); #else static inline int arch_setup_additional_pages(struct linux_binprm *bprm, int executable_stack) { return 0; } #endif - include <linux/interp.h> from binfmt_elf.c and binfmt_aout.c and from all the files which implement arch_setup_additional_pages(). - Remove the #ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES from binfmt_elf.c - Add the call to arch_setup_additional_pages() in binfmt_aout.h. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/