diff options
author | Tom de Vries <tom@codesourcery.com> | 2017-06-27 15:51:37 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2017-06-27 15:51:37 +0000 |
commit | 22f1a03704bbb15cf766af822a17a41ac9f57121 (patch) | |
tree | e0abf5f9fc8bcbed50120155f56b0f77255f8f87 /libgomp/secure_getenv.h | |
parent | 5fee5eca5fe329cfd6c6fc1ae81d4da566a57431 (diff) | |
download | gcc-22f1a03704bbb15cf766af822a17a41ac9f57121.zip gcc-22f1a03704bbb15cf766af822a17a41ac9f57121.tar.gz gcc-22f1a03704bbb15cf766af822a17a41ac9f57121.tar.bz2 |
Use secure_getenv for GOMP_DEBUG
2017-06-27 Tom de Vries <tom@codesourcery.com>
* env.c (parse_unsigned_long_1): Factor out of ...
(parse_unsigned_long): ... here.
(parse_int_1): Factor out of ...
(parse_int): ... here.
(parse_int_secure): New function.
(initialize_env): Use parse_int_secure for GOMP_DEBUG.
* secure_getenv.h: Factor out of ...
* plugin/plugin-hsa.c: ... here.
* testsuite/libgomp.oacc-c-c++-common/gomp-debug-env.c: New test.
From-SVN: r249694
Diffstat (limited to 'libgomp/secure_getenv.h')
-rw-r--r-- | libgomp/secure_getenv.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libgomp/secure_getenv.h b/libgomp/secure_getenv.h new file mode 100644 index 0000000..0d3ec5f --- /dev/null +++ b/libgomp/secure_getenv.h @@ -0,0 +1,61 @@ +/* Copyright (C) 2017 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifndef _SECURE_GETENV_H +#define _SECURE_GETENV_H 1 + +/* Secure getenv() which returns NULL if running as SUID/SGID. */ +#ifndef HAVE_SECURE_GETENV +#if defined (HAVE_UNISTD_H) && defined (HAVE_GETUID) \ + && defined (HAVE_GETEUID) && defined (HAVE_GETGID) \ + && defined (HAVE_GETEGID) + +#include <unistd.h> + +#if SUPPORTS_WEAKREF && defined (HAVE___SECURE_GETENV) +static char* weak_secure_getenv (const char*) + __attribute__((__weakref__("__secure_getenv"))); +#endif + +/* Implementation of secure_getenv() for targets where it is not provided but + we have at least means to test real and effective IDs. */ + +static inline char * +secure_getenv (const char *name) +{ +#if SUPPORTS_WEAKREF && defined (HAVE___SECURE_GETENV) + if (weak_secure_getenv) + return weak_secure_getenv (name); +#endif + + if ((getuid () == geteuid ()) && (getgid () == getegid ())) + return getenv (name); + else + return NULL; +} +#else +#define secure_getenv getenv +#endif +#endif + +#endif /* _SECURE_GETENV_H. */ |