Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Aug 2012 17:15:33 -0400
From:      Dan Plassche <dplassche@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: FreeBSD 1.x Binaries Work Except under Chroot
Message-ID:  <CAOD8YqqkwBVCoDaPMnvCyKqMUJEL-7eUiX8nUSqQEYiDXrnphw@mail.gmail.com>
In-Reply-To: <CAOD8Yqpz89-bxN7vpsyNWisr7eMDjcbvTSfknvG6M_jZFOW-yQ@mail.gmail.com>
References:  <CAOD8YqpVzT0pdBCHaMcu2krpjHcP3eotyDtiBR7OzUK1E9Hi5g@mail.gmail.com> <20120810170715.GI2425@deviant.kiev.zoral.com.ua> <CAOD8Yqpz89-bxN7vpsyNWisr7eMDjcbvTSfknvG6M_jZFOW-yQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Aug 10, 2012 at 1:07 PM, Konstantin Belousov
<kostikbel@gmail.com> wrote:

> Try to ktrace the binaries to see what is going on. I suspect that
> sources for 1.1.5 are not in our cvs/svn, so it is troublesome to
> say anuthing without ktrace dump.

Ok, below is the kdump from running basename as a simple example
that produces the "ld.so: whereis: libc.so.1.1" error under a
chrooted environment.

I probably should have mentioned that I'm running these with
"sysctl security.bsd.map_at_zero=1" set.  The static binaries
in /bin and /sbin also work under the chroot, but the others in
/usr/bin and /usr/sbin fail with the ld.so error.

Here's the kdump:

  1144 ktrace-8.2 RET   ktrace 0
  1144 ktrace-8.2 CALL  execve(0xbfbfee5b,0xbfbfed18,0xbfbfed20)
  1144 ktrace-8.2 NAMI  "/usr/bin/basename"
  1144 basename RET   execve 0
  1144 basename CALL  open(0x10a4,O_RDONLY,<unused>0)
  1144 basename NAMI  "/usr/libexec/ld.so"
  1144 basename RET   open 3
  1144 basename CALL  read(0x3,0xbfbfedd8,0x20)
  1144 basename GIO   fd 3 read 32 bytes
       0x0000 cc00 8680 00d0 0000 0020 0000 8003 0000  |......... ......|
       0x0010 0000 0000 2000 0000 0000 0000 0000 0000  |.... ...........|
  1144 basename RET   read 32/0x20
  1144 basename CALL  compat.mmap(0,0xd000,0x5,0x21,0x3,0)
  1144 basename RET   compat.mmap 536879104/0x20002000
  1144 basename CALL  compat.mmap(0x2000f000,0x2000,0x6,0x121,0x3,0xd000)
  1144 basename RET   compat.mmap 536932352/0x2000f000
  1144 basename CALL  compat.mmap(0x20011000,0x380,0x6,0x122,0xffffffff,0)
  1144 basename RET   compat.mmap 536940544/0x20011000
  1144 basename CALL  getuid
  1144 basename RET   getuid 0
  1144 basename CALL  geteuid
  1144 basename RET   geteuid 0
  1144 basename CALL  getgid
  1144 basename RET   getgid 0
  1144 basename CALL  getegid
  1144 basename RET   getegid 0
  1144 basename CALL  compat.mmap(0,0x8000,0x6,0x22,0xffffffff,0)
  1144 basename RET   compat.mmap 536944640/0x20012000
  1144 basename CALL  open(0x200032b0,O_RDONLY,<unused>0)
  1144 basename NAMI  "/var/run/ld.so.hints"
  1144 basename RET   open 4
  1144 basename CALL  compat.mmap(0,0x1000,0x4,0x21,0x4,0)
  1144 basename RET   compat.mmap 536977408/0x2001a000
  1144 basename CALL  munmap(0x2001a000,0x1000)
  1144 basename RET   munmap 0
  1144 basename CALL  open(0x20014000,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/lib"
  1144 basename RET   open 5
  1144 basename CALL  fcntl(0x5,F_SETFD,FD_CLOEXEC)
  1144 basename RET   fcntl 0
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x200150f4)
  1144 basename RET   compat.getdirentries 1024/0x400
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x200150f4)
  1144 basename RET   compat.getdirentries 512/0x200
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x200150f4)
  1144 basename RET   compat.getdirentries 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL  open(0x20015000,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/X11R6/lib"
  1144 basename RET   open -1 errno 2 No such file or directory
  1144 basename CALL  open(0x20015020,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/X386/lib"
  1144 basename RET   open -1 errno 2 No such file or directory
  1144 basename CALL  open(0x20015060,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/local/lib"
  1144 basename RET   open 5
  1144 basename CALL  fcntl(0x5,F_SETFD,FD_CLOEXEC)
  1144 basename RET   fcntl 0
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x200150f4)
  1144 basename RET   compat.getdirentries 512/0x200
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x200150f4)
  1144 basename RET   compat.getdirentries 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL  open(0x20015100,O_RDONLY,<unused>0)
  1144 basename NAMI  "/usr/lib/libgcc.so.1.1"
  1144 basename RET   open 5
  1144 basename CALL  read(0x5,0xbfbfed40,0x20)
  1144 basename GIO   fd 5 read 32 bytes
       0x0000 cc00 8680 0030 0000 0010 0000 0000 0000  |.....0..........|
       0x0010 600f 0000 2000 0000 0000 0000 0000 0000  |`... ...........|
  1144 basename RET   read 32/0x20
  1144 basename CALL  compat.mmap(0,0x4000,0x5,0x21,0x5,0)
  1144 basename RET   compat.mmap 536977408/0x2001a000
  1144 basename CALL  mprotect(0x2001d000,0x1000,PROT_READ|PROT_WRITE|PROT_EXEC)
  1144 basename RET   mprotect 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL  open(0x20014000,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/lib"
  1144 basename RET   open 5
  1144 basename CALL  fcntl(0x5,F_SETFD,FD_CLOEXEC)
  1144 basename RET   fcntl 0
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x20015154)
  1144 basename RET   compat.getdirentries 1024/0x400
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x20015154)
  1144 basename RET   compat.getdirentries 512/0x200
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x20015154)
  1144 basename RET   compat.getdirentries 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL  open(0x20015000,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/X11R6/lib"
  1144 basename RET   open -1 errno 2 No such file or directory
  1144 basename CALL  open(0x20015020,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/X386/lib"
  1144 basename RET   open -1 errno 2 No such file or directory
  1144 basename CALL  open(0x20015060,O_RDONLY,<unused>0x2000f060)
  1144 basename NAMI  "/usr/local/lib"
  1144 basename RET   open 5
  1144 basename CALL  fcntl(0x5,F_SETFD,FD_CLOEXEC)
  1144 basename RET   fcntl 0
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x20015154)
  1144 basename RET   compat.getdirentries 512/0x200
  1144 basename CALL  compat.getdirentries(0x5,0x20017000,0x400,0x20015154)
  1144 basename RET   compat.getdirentries 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL  open(0x20015160,O_RDONLY,<unused>0)
  1144 basename NAMI  "/usr/lib/libc.so.1.1"
  1144 basename RET   open 5
  1144 basename CALL  read(0x5,0xbfbfed40,0x20)
  1144 basename GIO   fd 5 read 32 bytes
       0x0000 cc00 8680 0070 0400 0060 0000 b86b 0000  |.....p...`...k..|
       0x0010 b4b7 0000 2000 0000 0000 0000 0000 0000  |.... ...........|
  1144 basename RET   read 32/0x20
  1144 basename CALL  compat.mmap(0,0x4d000,0x5,0x21,0x5,0)
  1144 basename RET   compat.mmap 536993792/0x2001e000
  1144 basename CALL  mprotect(0x20065000,0x6000,PROT_READ|PROT_WRITE|PROT_EXEC)
  1144 basename RET   mprotect 0
  1144 basename CALL  close(0x5)
  1144 basename RET   close 0
  1144 basename CALL
compat.mmap(0x2006b000,0x6bb8,0x7,0x122,0xffffffff,0x4d000)
  1144 basename RET   compat.mmap -1 errno 22 Invalid argument
  1144 basename CALL  write(0x2,0xbfbfe5fc,0x7)
  1144 basename GIO   fd 2 wrote 7 bytes
       "ld.so: "
  1144 basename RET   write 7
  1144 basename CALL  write(0x2,0xbfbfe614,0x15)
  1144 basename GIO   fd 2 wrote 21 bytes
       "basename: libc.so.1.1"
  1144 basename RET   write 21/0x15
  1144 basename CALL  write(0x2,0xbfbfe5f4,0x2)
  1144 basename GIO   fd 2 wrote 2 bytes
       ": "
  1144 basename RET   write 2
  1144 basename CALL  write(0x2,0xbfbfe5f8,0x11)
  1144 basename GIO   fd 2 wrote 17 bytes
       "Invalid argument
       "
  1144 basename RET   write 17/0x11
  1144 basename CALL  exit(0x1)

The sources are available from the FreeBSD old releases archive
now that they are under the "Ancient UNIX" license, but yeah
there's no CVS history for change tracking due to the purge
with the switch to 4.4 Lite.

Thanks,

Dan



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOD8YqqkwBVCoDaPMnvCyKqMUJEL-7eUiX8nUSqQEYiDXrnphw>