Date: Sat, 22 Oct 2022 02:32:22 +0100 From: Jessica Clarke <jrtc27@freebsd.org> To: Konstantin Belousov <kostikbel@gmail.com> Cc: Kristof Provost <kp@freebsd.org>, src-committers <src-committers@freebsd.org>, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 9cabef3d146e - main - ldd: use direct exec mode unconditionally Message-ID: <9248FC86-7ACB-4099-978B-4A58CE68743D@freebsd.org> In-Reply-To: <Y1NDzW7i1M2wZkFU@kib.kiev.ua> References: <202210061550.296FoVrm088661@gitrepo.freebsd.org> <7F982005-246F-4607-A17B-08C81CE65E0B@FreeBSD.org> <Y1KVf9V4rhNmXe/R@kib.kiev.ua> <DD8C0FC6-A66D-4652-BE34-5591A9670181@FreeBSD.org> <Y1KZjqEabsXjw0qc@kib.kiev.ua> <6AEBEA3C-24DD-44AA-8B59-8DCADF62CAFF@FreeBSD.org> <Y1NDzW7i1M2wZkFU@kib.kiev.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
On 22 Oct 2022, at 02:13, Konstantin Belousov <kostikbel@gmail.com> = wrote: >=20 > On Fri, Oct 21, 2022 at 03:10:59PM +0200, Kristof Provost wrote: >> On 21 Oct 2022, at 15:07, Konstantin Belousov wrote: >>> On Fri, Oct 21, 2022 at 02:54:59PM +0200, Kristof Provost wrote: >>>> On 21 Oct 2022, at 14:50, Konstantin Belousov wrote: >>>>> On Fri, Oct 21, 2022 at 02:18:04PM +0200, Kristof Provost wrote: >>>>>> On 6 Oct 2022, at 17:50, Konstantin Belousov wrote: >>>>>>> The branch main has been updated by kib: >>>>>>>=20 >>>>>>> URL: = https://cgit.FreeBSD.org/src/commit/?id=3D9cabef3d146e9a844813b6bc8952d6cf= 2e9d45e5 >>>>>>>=20 >>>>>>> commit 9cabef3d146e9a844813b6bc8952d6cf2e9d45e5 >>>>>>> Author: Konstantin Belousov <kib@FreeBSD.org> >>>>>>> AuthorDate: 2022-09-21 13:55:44 +0000 >>>>>>> Commit: Konstantin Belousov <kib@FreeBSD.org> >>>>>>> CommitDate: 2022-10-06 15:50:26 +0000 >>>>>>>=20 >>>>>>> ldd: use direct exec mode unconditionally >>>>>>>=20 >>>>>>> Trying to exec malformed or unusual binary, for instance, a >>>>>>> non-FreeBSD >>>>>>> ABI, or using a non-standard interpreter, might give >>>>>>> unexpected >>>>>>> outcome. >>>>>>>=20 >>>>>>> Reported by: The UK's National Cyber Security Centre (NCSC) >>>>>>> Reviewed by: emaste, markj, philip >>>>>>> Discussed with: jhb >>>>>>> Sponsored by: The FreeBSD Foundation >>>>>>> admbug: 991 >>>>>>> PR: 127276, 175339, 231926 >>>>>>> MFC after: 1 week >>>>>>> Differential revision: https://reviews.freebsd.org/D36650 >>>>>>>=20 >>>>>> This appears to break things for armv7 (running on aarch64). >>>>>>=20 >>>>>> This manifests while building pfsense (for 3100 / armv7), which = we >>>>>> do on an >>>>>> aarch64 vm (to avoid having to deal with qemu, and because it=E2=80= =99s >>>>>> faster). >>>>>>=20 >>>>>> During that build a couple ports fail to build, including >>>>>> databases/sqlite3. >>>>>> It fails running `/usr/bin/ldd -a = "/wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sql= ite3" = "/wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/lib/lib= sqlite3.so=E2=80=9D`, >>>>>> which produces: >>>>>>=20 >>>>>> ld-elf.so.1: = /wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sqli= te3: >>>>>> mmap of entire address space failed: Cannot allocate memory >>>>>> = /wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sqli= te3: >>>>>> exit status 1 >>>>>>=20 >>>>>> That fails doing the `mapbase =3D mmap(base_addr, mapsize, = PROT_NONE, >>>>>> base_flags, -1, 0);` call in rtld-elf=E2=80=99s map_object():217. >>>>>> That call >>>>>> does >>>>>> `mmap(0x10000, 0x1dc000, PROT_NONE, 0x6010, -1, 0) =3D> = 0xffffffff`. >>>>>>=20 >>>>>> With this patch reverted we can build successfully. >>>>>=20 >>>>> Can you manually invoke ldd on the binary under ktrace -i, and >>>>> show me >>>>> the >>>>> kdump output? >>>>>=20 >>>> I might be doing something wrong: >>>>=20 >>>> # ktrace -i /usr/obj/usr/src/arm.armv7/usr.bin/ldd/ldd -a = "/wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sql= ite3" >>>> ld-elf.so.1: = /wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sqli= te3: >>>> mmap of entire address space failed: Cannot allocate memory >>>> = /wrkdirs/usr/ports/databases/sqlite3/work-default/stage/usr/local/bin/sqli= te3: >>>> exit status 1 >>>> # kdump -f ktrace.out >>>> 16 @ UNKNOWN(265) >>>> kdump: data too short >>>> # >>>>=20 >>>> Perhaps because this is running in a jail? >>> You need to run host-native kdump, because your kernel is arm64, I >>> guess. >>>=20 >> That seemed to do the trick: >=20 > Please try something along this lines: >=20 > diff --git a/sys/arm64/include/elf.h b/sys/arm64/include/elf.h > index 3f7c3964d428..22e968c632bf 100644 > --- a/sys/arm64/include/elf.h > +++ b/sys/arm64/include/elf.h > @@ -86,7 +86,7 @@ __ElfType(Auxinfo); > #endif >=20 > #if __ELF_WORD_SIZE =3D=3D 32 > -#define ET_DYN_LOAD_ADDR 0x12000 > +#define ET_DYN_LOAD_ADDR 0x01001000 > #else > #define ET_DYN_LOAD_ADDR 0x100000 > #endif Ouch... sys/arm=E2=80=99s is better at 0x500000 but that=E2=80=99s still = only ~4.9 MiB above LLD=E2=80=99s default image base of 0x10000 so I could see that = being hit a bunch. Then again 0x01001000 only gives ~15.9 MiB, which isn=E2=80=99t = great, but other architectures seem bad too... Jess
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9248FC86-7ACB-4099-978B-4A58CE68743D>