NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: bin/60472 (ld.elf_so(1) changes cause a segmentation fault in dlopen(3))
The following reply was made to PR bin/60472; it has been noted by GNATS.
From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
To: Matthias Scheler <tron%zhadum.org.uk@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, gnats-bugs%NetBSD.org@localhost
Subject: Re: bin/60472 (ld.elf_so(1) changes cause a segmentation fault in
dlopen(3))
Date: Mon, 20 Jul 2026 20:40:49 +0000
> Date: Mon, 20 Jul 2026 21:02:16 +0100
> From: Matthias Scheler <tron%zhadum.org.uk@localhost>
>
> On Mon, Jul 20, 2026 at 07:17:28PM +0000, Taylor R Campbell wrote:
> > If you still have the core dump and
> > /usr/libdata/debug/usr/lib/ld.elf_so.debug, that should be enough to
> > get a stack trace. (If all you have is the core dump, you can just
> > rebuild ld.elf_so from the same source date as before and the
> > ld.elf_so.debug should work.)
>
> The core dump was in the work directory of the "textproc/libxslt" package
> which got cleaned in the meantime unfortunately.
OK, no worries.
> Is there a way e.g. by setting an environment variable to use an
> alternative "ld.elf_so" to execute a binary?
No, unfortunately not: it is rigidly fixed to execute the path it
finds in the PT_INTERP program header.
As an alternative (which I've sometimes done in the past while hacking
ld.elf_so), you could:
1. ^Z in any terminals where you're running builds
2. install the new ld.elf_so into /libexec/ld.elf_so.new
3. /rescue/ln /libexec/ld.elf_so /libexec/ld.elf_so.old
4. /rescue/ln /libexec/ld.elf_so.new /libexec/ld.elf_so.tmp
5. /rescue/mv -f /libexec/ld.elf_so.tmp /libexec/ld.elf_so
6. [test the reproducer]
7. /rescue/ln /libexec/ld.elf_so.old /libexec/ld.elf_so.tmp
8. /rescue/mv -f /libexec/ld.elf_so.tmp /libexec/ld.elf_so
9. fg in the terminals where you're running builds
(In this case, the use of /rescue may not be necessary, if the bug is
what I'm guessing it is and doesn't actually affect /bin/ln or /bin/mv
or anything like that, but /rescue has saved me in the past when doing
shenanigans like this.)
You could also take a snapshot of / just before messing with it and
mount it so you can recover with /rescue/pax or /rescue/tar if
anything goes wrong. If you're using ffs:
1. ^Z builds
2. mkdir /.snap /.snap/20260720
3. fssconfig fss0 / /.snap/20260720.snap
4. mount /dev/fss0 /.snap/20260720
5. [screw up /libexec and test the reproducer]
6. cd /.snap/20260720/libexec && /rescue/pax -rw -pe . /libexec/.
7. umount /.snap/20260720
8. fssconfig -u fss0
9. rm /.snap/20260720.snap
10. fg builds
If you're using zfs, probably something like `zfs snap -r
rpool/ROOT@20260720' and then either `zfs rollback' or fish it out of
/.zfs/snapshot/20260720 instead.
Home |
Main Index |
Thread Index |
Old Index