From 6caf1b093ab0176b8ded68a53ab1ab72259bb1e0 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 20 Apr 2017 20:08:53 +0200 Subject: src: add linux getauxval(AT_SECURE) in SafeGetenv This commit attempts to fix the following TODO: // TODO(bnoordhuis) Should perhaps also check whether getauxval(AT_SECURE) is non-zero on Linux. This can be manually tested at the moment using the following steps: $ setcap cap_net_raw+ep out/Release/node $ NODE_PENDING_DEPRECATION="1" out/Release/node -p "process.binding('config').pendingDeprecation" true $ useradd test $ su test $ NODE_PENDING_DEPRECATION="1" out/Release/node -p "process.binding('config').pendingDeprecation" undefined PR-URL: https://github.com/nodejs/node/pull/12548 Reviewed-By: Colin Ihrig Reviewed-By: Ben Noordhuis --- src/node_main.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/node_main.cc') diff --git a/src/node_main.cc b/src/node_main.cc index 3194eb78ca..7d6d9b1a01 100644 --- a/src/node_main.cc +++ b/src/node_main.cc @@ -71,7 +71,32 @@ int wmain(int argc, wchar_t *wargv[]) { } #else // UNIX +#ifdef __linux__ +#include +#ifdef __LP64__ +#define Elf_auxv_t Elf64_auxv_t +#else +#define Elf_auxv_t Elf32_auxv_t +#endif // __LP64__ +extern char** environ; +#endif // __linux__ + +namespace node { + extern bool linux_at_secure; +} // namespace node + int main(int argc, char *argv[]) { +#if defined(__linux__) + char** envp = environ; + while (*envp++ != nullptr) {} + Elf_auxv_t* auxv = reinterpret_cast(envp); + for (; auxv->a_type != AT_NULL; auxv++) { + if (auxv->a_type == AT_SECURE) { + node::linux_at_secure = auxv->a_un.a_val; + break; + } + } +#endif // Disable stdio buffering, it interacts poorly with printf() // calls elsewhere in the program (e.g., any logging from V8.) setvbuf(stdout, nullptr, _IONBF, 0); -- cgit v1.2.3