Re: rtld dropping core on recent -current

2012-08-03 Thread Konstantin Belousov
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

2012-08-03 Thread Alexander Kabaev
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

2012-08-02 Thread Steve Kargl
% 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

2012-08-02 Thread Alexander Kabaev
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

2012-08-02 Thread Steve Kargl
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