Date: Wed, 15 May 2002 07:25:35 +0900 From: "Akinori MUSHA" <knu@iDaemons.org> To: audit@FreeBSD.org Subject: a tiny bug in ldd(1)'s shlib support Message-ID: <86adr2z7s0.wl@archon.local.idaemons.org>
next in thread | raw e-mail | index | archive | help
I found a tiny bug in ldd(1)'s shlib support. If you do ldd against libc.so, you'll get the following: knu@archon[2]% ldd /usr/lib/libc.so /usr/lib/libc.so: ldd: /usr/lib/libc.so: (null) /usr/lib/libc.so: exit status 1 This is because dlopen("/usr/lib/libc.so", RTLD_TRACE) returns without an error as ldd(1) has already libc.so loaded. The attached patch fixes the proglem by checking the return value of dlopen() and exiting gracefully when no error has occurred: knu@archon[2]% ./ldd /usr/lib/libc.so /usr/lib/libc.so: Can I commit this? (Or someone else please) -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Somewhere out of a memory.. of lighted streets on quiet nights.." Index: ldd.c =================================================================== RCS file: /home/ncvs/src/usr.bin/ldd/ldd.c,v retrieving revision 1.31 diff -u -r1.31 ldd.c --- ldd.c 28 Apr 2002 12:55:35 -0000 1.31 +++ ldd.c 14 May 2002 22:09:58 -0000 @@ -220,12 +220,13 @@ } break; case 0: - if (is_shlib == 0) { + if (is_shlib) { + if (dlopen(*argv, RTLD_TRACE)) + _exit(0); /* libc.so */ + warnx("%s: %s", *argv, dlerror()); + } else { execl(*argv, *argv, (char *)NULL); warn("%s", *argv); - } else { - dlopen(*argv, RTLD_TRACE); - warnx("%s: %s", *argv, dlerror()); } _exit(1); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86adr2z7s0.wl>