|
Message-ID: <27df10f8-c044-e960-350a-d0a40b774bed@unboiled.info> Date: Wed, 17 Nov 2021 15:04:15 +0100 From: Alexander Sosedkin <monk@...oiled.info> To: musl@...ts.openwall.com Subject: $ORIGIN rpath expansion without /proc: code looks wrong Hello, I've encountered a case of a binary with an rpath of /some/meaningful/lib:$ORIGIN/../lib not starting up due to not finding /some/meaningful/lib/libxyz.so. ldd'ing said it's there though. And the library was found alright when I patchelf'd rpath to just /some/meaningful/lib I dug into musl code and came across that bit that checks /proc. Sure enough, when I tried mounting /proc, it started working fine. Yet the error handling from accessing /proc puzzles me: ldso/dynlink.c, fixup_rpath(): l = readlink("/proc/self/exe", buf, buf_size); if (l == -1) switch (errno) { case ENOENT: case ENOTDIR: case EACCES: break; default: return -1; } if (l >= buf_size) return 0; buf[l] = 0; origin = buf; hitting that break like I had means zeroing buf[-1], right? Could somebody take a look at this and double-check that this codepath makes sense? My attempts at comprehending it fail irrecoverably at this line. (CC me on replies, please. No nice context to provide, building my own toolchain at https://github.com/t184256/bootstrap-from-tcc)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.