linker: changes to init work arounds
Change three things regarding the work around to the fact that init is
special:
1) Only first stage init is special, so we change the check to include
accessing /proc/self/exe, which if is available, means that we're
not first stage init and do not need any work arounds.
2) Fix the fact that /init may be a symlink and may need readlink()
3) Suppress errors from realpath_fd() since these are expected to fail
due to /proc not being mounted.
Bug: 80395578
Test: sailfish boots without the audit generated from calling stat()
on /init and without the errors from realpath_fd()
Change-Id: I266f1486b142cb9a41ec791eba74122bdf38cf12
diff --git a/linker/linker_soinfo.cpp b/linker/linker_soinfo.cpp
index 795b01d..e630297 100644
--- a/linker/linker_soinfo.cpp
+++ b/linker/linker_soinfo.cpp
@@ -748,7 +748,7 @@
// Make sure the handle is unique and does not collide
// with special values which are RTLD_DEFAULT and RTLD_NEXT.
do {
- if (!is_init()) {
+ if (!is_first_stage_init()) {
arc4random_buf(&handle_, sizeof(handle_));
} else {
// arc4random* is not available in init because /dev/urandom hasn't yet been