Re: rtld dropping core on recent -current
On Thu, Aug 02, 2012 at 09:55:36PM -0400, Alexander Kabaev wrote: It is weird that program tries to dlopen what appears to be the binary (itself?), but that did uncover the issue. Please try attached patch, I only very lightly tested it here. Also available here: http://people.freebsd.org/~kan/rtld-digest-notes.diff -- Alexander Kabaev diff --git a/libexec/rtld-elf/map_object.c b/libexec/rtld-elf/map_object.c index 509a64f..350d437 100644 --- a/libexec/rtld-elf/map_object.c +++ b/libexec/rtld-elf/map_object.c @@ -153,7 +153,6 @@ map_object(int fd, const char *path, const struct stat *sb) break; note_start = (Elf_Addr)(char *)hdr + phdr-p_offset; note_end = note_start + phdr-p_filesz; - digest_notes(obj, note_start, note_end); break; } @@ -292,6 +291,11 @@ map_object(int fd, const char *path, const struct stat *sb) obj-relro_page = obj-relocbase + trunc_page(relro_page); obj-relro_size = round_page(relro_size); +if (note_start note_end) +{ + digest_notes(obj, note_start, note_end); +} + munmap(hdr, PAGE_SIZE); return (obj); This is the right fix. Why do you need the '{}' there ? pgpAEVwMe9uIw.pgp Description: PGP signature
Re: rtld dropping core on recent -current
On Fri, 3 Aug 2012 11:59:37 +0300 Konstantin Belousov kostik...@gmail.com wrote: On Thu, Aug 02, 2012 at 09:55:36PM -0400, Alexander Kabaev wrote: It is weird that program tries to dlopen what appears to be the binary (itself?), but that did uncover the issue. Please try attached patch, I only very lightly tested it here. Also available here: http://people.freebsd.org/~kan/rtld-digest-notes.diff -- Alexander Kabaev diff --git a/libexec/rtld-elf/map_object.c b/libexec/rtld-elf/map_object.c index 509a64f..350d437 100644 --- a/libexec/rtld-elf/map_object.c +++ b/libexec/rtld-elf/map_object.c @@ -153,7 +153,6 @@ map_object(int fd, const char *path, const struct stat *sb) break; note_start = (Elf_Addr)(char *)hdr + phdr-p_offset; note_end = note_start + phdr-p_filesz; - digest_notes(obj, note_start, note_end); break; } @@ -292,6 +291,11 @@ map_object(int fd, const char *path, const struct stat *sb) obj-relro_page = obj-relocbase + trunc_page(relro_page); obj-relro_size = round_page(relro_size); +if (note_start note_end) +{ + digest_notes(obj, note_start, note_end); +} + munmap(hdr, PAGE_SIZE); return (obj); This is the right fix. Why do you need the '{}' there ? I do not. I just automatically followed style used at work. I'll FreeBSD-fy this before commit. -- Alexander Kabaev signature.asc Description: PGP signature
rtld dropping core on recent -current
% file /usr/local/bin/ppdpo /usr/local/bin/ppdpo: ELF 32-bit LSB shared object, Intel 80386, \ version 1 (FreeBSD), dynamically linked (uses shared libs), FreeBSD-style,\ for FreeBSD 10.0 (115), stripped % ldd /usr/local/bin/ppdpo /usr/local/bin/ppdpo: /usr/local/bin/ppdpo: signal 11 % gdb741 /usr/obj/usr/src/usr.bin/ldd/ldd ldd.core GNU gdb (GDB) 7.4.1 [GDB v7.4.1 for FreeBSD] Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type show copying and show warranty for details. This GDB was configured as i386-portbld-freebsd10.0. For bug reporting instructions, please see: http://www.gnu.org/software/gdb/bugs/... Reading symbols from /usr/obj/usr/src/usr.bin/ldd/ldd...done. [New process 100147] Core was generated by `ldd'. Program terminated with signal 11, Segmentation fault. (gdb) bt #0 0x4804fa4e in digest_notes (obj=0x4806b000, note_start=1208398156,\ note_end=1208398204) at /usr/src/libexec/rtld-elf/rtld.c:1326 #1 0x480566dc in map_object (fd=3, path=0x48065320 /usr/local/bin/ppdpo,\ sb=0xbfbfd4dc) at /usr/src/libexec/rtld-elf/map_object.c:156 #2 0x48051627 in do_load_object (flags=optimized out, sbp=optimized out,\ path=optimized out, name=optimized out, fd=optimized out) at /usr/src/libexec/rtld-elf/rtld.c:2100 #3 load_object (name=0xbfbfd8d0 /usr/local/bin/ppdpo, fd_u=-1,\ refobj=0x48067000, flags=optimized out) at /usr/src/libexec/rtld-elf/rtld.c:2070 #4 0x48052303 in dlopen_object (name=0xbfbfd8d0 /usr/local/bin/ppdpo,\ fd=-1, refobj=0x48067000, lo_flags=6, mode=0, lockstate=0xbfbfd590) at /usr/src/libexec/rtld-elf/rtld.c:2799 #5 0x48052fea in rtld_dlopen (name=0xbfbfd8d0 /usr/local/bin/ppdpo,\ fd=-1, mode=512) at /usr/src/libexec/rtld-elf/rtld.c:2761 #6 0x0804935b in main (argc=1, argv=0xbfbfd760) at /usr/src/usr.bin/ldd\ /ldd.c:251 (gdb) list 1321obj-osrel = *(const int32_t *)(p); 1322dbg(note osrel %d, obj-osrel); 1323break; 1324case CRT_NOINIT_NOTETYPE: 1325/* FreeBSD 'crt does not call init' note */ 1326obj-crt_no_init = true; 1327dbg(note crt_no_init); 1328break; 1329} 1330} (gdb) print *obj-crt_no_init Cannot access memory at address 0x0 % pkg_info -W /usr/local/bin/ppdpo /usr/local/bin/ppdpo was installed by package cups-base-1.5.2_2 % portmaster cups-base % pkg_info -W /usr/local/bin/ppdpo /usr/local/bin/ppdpo was installed by package cups-base-1.5.2_2 % ldd /usr/local/bin/ppdpo /usr/local/bin/ppdpo: /usr/local/bin/ppdpo: signal 11 -- Steve ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org
Re: rtld dropping core on recent -current
On Thu, 2 Aug 2012 14:39:54 -0700 Steve Kargl s...@troutmask.apl.washington.edu wrote: % file /usr/local/bin/ppdpo /usr/local/bin/ppdpo: ELF 32-bit LSB shared object, Intel 80386, \ version 1 (FreeBSD), dynamically linked (uses shared libs), FreeBSD-style,\ for FreeBSD 10.0 (115), stripped % ldd /usr/local/bin/ppdpo /usr/local/bin/ppdpo: /usr/local/bin/ppdpo: signal 11 It is weird that program tries to dlopen what appears to be the binary (itself?), but that did uncover the issue. Please try attached patch, I only very lightly tested it here. Also available here: http://people.freebsd.org/~kan/rtld-digest-notes.diff -- Alexander Kabaev diff --git a/libexec/rtld-elf/map_object.c b/libexec/rtld-elf/map_object.c index 509a64f..350d437 100644 --- a/libexec/rtld-elf/map_object.c +++ b/libexec/rtld-elf/map_object.c @@ -153,7 +153,6 @@ map_object(int fd, const char *path, const struct stat *sb) break; note_start = (Elf_Addr)(char *)hdr + phdr-p_offset; note_end = note_start + phdr-p_filesz; - digest_notes(obj, note_start, note_end); break; } @@ -292,6 +291,11 @@ map_object(int fd, const char *path, const struct stat *sb) obj-relro_page = obj-relocbase + trunc_page(relro_page); obj-relro_size = round_page(relro_size); +if (note_start note_end) +{ + digest_notes(obj, note_start, note_end); +} + munmap(hdr, PAGE_SIZE); return (obj); signature.asc Description: PGP signature
Re: rtld dropping core on recent -current
On Thu, Aug 02, 2012 at 09:55:36PM -0400, Alexander Kabaev wrote: On Thu, 2 Aug 2012 14:39:54 -0700 Steve Kargl s...@troutmask.apl.washington.edu wrote: % file /usr/local/bin/ppdpo /usr/local/bin/ppdpo: ELF 32-bit LSB shared object, Intel 80386, \ version 1 (FreeBSD), dynamically linked (uses shared libs), FreeBSD-style,\ for FreeBSD 10.0 (115), stripped % ldd /usr/local/bin/ppdpo /usr/local/bin/ppdpo: /usr/local/bin/ppdpo: signal 11 It is weird that program tries to dlopen what appears to be the binary (itself?), but that did uncover the issue. Please try attached patch, I only very lightly tested it here. Also available here: http://people.freebsd.org/~kan/rtld-digest-notes.diff The patch appears to fix the problem. Before the patch % find /usr/local/bin -type f | xargs -n1 file -F ' ' | grep ELF \ | grep ELF | cut -f1 -d' ' | xargs ldd -f '%A %o\n' | grep libpng.so.6 /usr/local/bin/ppdc: signal 11 /usr/local/bin/ppdhtml: signal 11 /usr/local/bin/ipptool: signal 11 /usr/local/bin/cupstestdsc: signal 11 /usr/local/bin/cupstestppd: signal 11 /usr/local/bin/lpstat: signal 11 /usr/local/bin/lpq: signal 11 /usr/local/bin/lpr: signal 11 /usr/local/bin/ppdpo: signal 11 /usr/local/bin/cancel: signal 11 /usr/local/bin/lpoptions: signal 11 /usr/local/bin/lppasswd: signal 11 /usr/local/bin/ppdi: signal 11 /usr/local/bin/ppdmerge: signal 11 /usr/local/bin/inkscape libpng.so.6 /usr/local/bin/inkview libpng.so.6 /usr/local/bin/lp: signal 11 /usr/local/bin/lprm: signal 11 After applying the patch and rebuilding % find /usr/local/bin -type f | xargs -n1 file -F ' ' | grep ELF \ | cut -f1 -d' ' | xargs ldd -f '%A %o\n' | grep libpng.so.6 /usr/local/bin/inkscape libpng.so.6 /usr/local/bin/inkview libpng.so.6 Thanks for the quick response. -- Steve ___ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org