After applying the same patch as RHEL5.1 BZ #222826: --- linux-2.6.9/mm/memory.c.orig +++ linux-2.6.9/mm/memory.c @@ -2037,8 +2037,8 @@ static int __init gate_vma_init(void) gate_vma.vm_mm = NULL; gate_vma.vm_start = FIXADDR_USER_START; gate_vma.vm_end = FIXADDR_USER_END; - gate_vma.vm_page_prot = PAGE_READONLY; - gate_vma.vm_flags = 0; + gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC; + gate_vma.vm_page_prot = __P101; return 0; } __initcall(gate_vma_init); The gcore program still shows that strange (misspelled) message: # gcore 3917 warning: The current VSYSCALL page code requires an existing execuitable. Use "add-symbol-file-from-memory" to load the VSYSCALL page by hand # But things work as expected. The /proc/<pid>/maps gate page looks like this: # cat /proc/3917/maps | grep a000000000000000 a000000000000000-a000000000020000 r-xp 00000000 00:00 0 # The gcore-generated core file contains the segment: # readelf -a core.3917 ... LOAD 0x00000000002d9140 0xa000000000000000 0x0000000000000000 0x0000000000020000 0x0000000000020000 R E 1 ... # And gdb works OK: # gdb doit core.3917 GNU gdb Red Hat Linux (6.3.0.0-1.132.EL4rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "ia64-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xa000000000000000 Core was generated by `/var/tmp/doit'. warning: svr4_current_sos: Can't read pathname for load map: Input/output error Reading symbols from /lib/tls/libc.so.6.1...done. Loaded symbols for /lib/tls/libc.so.6.1 Reading symbols from /lib/ld-linux-ia64.so.2...done. Loaded symbols for /lib/ld-linux-ia64.so.2 #0 0xa000000000010641 in __kernel_syscall_via_break () (gdb) bt #0 0xa000000000010641 in __kernel_syscall_via_break () #1 0x20000000001c1b20 in read () from /lib/tls/libc.so.6.1 #2 0x2000000000105910 in _IO_file_read_internal () from /lib/tls/libc.so.6.1 #3 0x20000000001034f0 in _IO_new_file_underflow () from /lib/tls/libc.so.6.1 #4 0x2000000000108820 in _IO_default_uflow_internal () from /lib/tls/libc.so.6.1 #5 0x2000000000108440 in __uflow () from /lib/tls/libc.so.6.1 #6 0x20000000000d81c0 in _IO_vfscanf_internal () from /lib/tls/libc.so.6.1 #7 0x20000000000e3e10 in scanf () from /lib/tls/libc.so.6.1 #8 0x4000000000000830 in main () at doit.c:7 (gdb)
Patch posted to RHKL: http://post-office.corp.redhat.com/archives/rhkernel-list/2007-February/msg00477.html
This request was evaluated by Red Hat Kernel Team for inclusion in a Red Hat Enterprise Linux maintenance release, and has moved to bugzilla status POST.
committed in stream U6 build 55.4. A test kernel with this patch is available from http://people.redhat.com/~jbaron/rhel4/
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2007-0791.html