diff options
author | Jiyong Park <jiyong@google.com> | 2018-06-01 19:18:56 +0900 |
---|---|---|
committer | Jiyong Park <jiyong@google.com> | 2018-06-08 14:50:14 +0900 |
commit | 31cd08f9eb857963ce1ab331d0ecf0c6c6b79670 (patch) | |
tree | 38fb9f800a8976a03b047c54e8b138f272f60eec /linker/linker_utils.cpp | |
parent | 8d7866c58f95695e65e8780712cc6c692fb4af72 (diff) |
dynamic linker is running for init
init is now built as a dynamic executable, so the dynamic linker has to
be able to run in the init process. However, since init is launched so
early, even /dev/* and /proc/* file systems are not mounted and thus
some APIs that rely on the paths do not work. The dynamic linker now
goes alternative path when it is running in the init process.
For example, /proc/self/exe is not read for the init since we always now
the path of the init (/init). Also, arc4random* APIs are not used since
the APIs rely on /dev/urandom. Linker now does not randomize library
loading order and addresses when running in the init process.
Bug: 80454183
Test: `adb reboot recovery; adb devices` shows the device ID
Change-Id: I29b6d70e4df5f7f690876126d5fe81258c1d3115
Diffstat (limited to 'linker/linker_utils.cpp')
-rw-r--r-- | linker/linker_utils.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/linker/linker_utils.cpp b/linker/linker_utils.cpp index 661e7cbc1..789d5c1b8 100644 --- a/linker/linker_utils.cpp +++ b/linker/linker_utils.cpp @@ -239,3 +239,8 @@ void resolve_paths(std::vector<std::string>& paths, } } } + +bool is_init() { + static bool ret = (getpid() == 1); + return ret; +} |