Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / sandbox / linux / suid / common / suid_unsafe_environment_variables.h
blob33ba4b6ab723535563f91af2dcacc60e0848c541
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This is a list of environment variables which the ELF loader unsets when
6 // loading a SUID binary. Because they are unset rather than just ignored, they
7 // aren't passed to child processes of SUID processes either.
8 //
9 // We need to save these environment variables before running a SUID sandbox
10 // and restore them before running child processes (but after dropping root).
12 // List gathered from glibc sources (00ebd7ed58df389a78e41dece058048725cb585e):
13 // sysdeps/unix/sysv/linux/i386/dl-librecon.h
14 // sysdeps/generic/unsecvars.h
16 #ifndef SANDBOX_LINUX_SUID_SUID_UNSAFE_ENVIRONMENT_VARIABLES_H_
17 #define SANDBOX_LINUX_SUID_SUID_UNSAFE_ENVIRONMENT_VARIABLES_H_
19 #include <stdint.h>
20 #include <stdlib.h> // malloc
21 #include <string.h> // memcpy
23 static const char* kSUIDUnsafeEnvironmentVariables[] = {
24 "LD_AOUT_LIBRARY_PATH",
25 "LD_AOUT_PRELOAD",
26 "GCONV_PATH",
27 "GETCONF_DIR",
28 "HOSTALIASES",
29 "LD_AUDIT",
30 "LD_DEBUG",
31 "LD_DEBUG_OUTPUT",
32 "LD_DYNAMIC_WEAK",
33 "LD_LIBRARY_PATH",
34 "LD_ORIGIN_PATH",
35 "LD_PRELOAD",
36 "LD_PROFILE",
37 "LD_SHOW_AUXV",
38 "LD_USE_LOAD_BIAS",
39 "LOCALDOMAIN",
40 "LOCPATH",
41 "MALLOC_TRACE",
42 "NIS_PATH",
43 "NLSPATH",
44 "RESOLV_HOST_CONF",
45 "RES_OPTIONS",
46 "TMPDIR",
47 "TZDIR",
48 NULL,
51 // Return a malloc allocated string containing the 'saved' environment variable
52 // name for a given environment variable.
53 static inline char* SandboxSavedEnvironmentVariable(const char* envvar) {
54 const size_t envvar_len = strlen(envvar);
55 const size_t kMaxSizeT = (size_t) -1;
57 if (envvar_len > kMaxSizeT - 1 - 8)
58 return NULL;
60 const size_t saved_envvarlen = envvar_len + 1 /* NUL terminator */ +
61 8 /* strlen("SANDBOX_") */;
62 char* const saved_envvar = (char*) malloc(saved_envvarlen);
63 if (!saved_envvar)
64 return NULL;
66 memcpy(saved_envvar, "SANDBOX_", 8);
67 memcpy(saved_envvar + 8, envvar, envvar_len);
68 saved_envvar[8 + envvar_len] = 0;
70 return saved_envvar;
73 #endif // SANDBOX_LINUX_SUID_SUID_UNSAFE_ENVIRONMENT_VARIABLES_H_