diff options
author | Rich Felker <dalias@aerifal.cx> | 2014-07-17 22:01:52 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-07-17 22:01:52 -0400 |
commit | 7bece9c2095ee81f14b1088f6b0ba2f37fecb283 (patch) | |
tree | 2d1b7602c410829163adc83a647f3d656186d9e8 | |
parent | 5cc187215681c2fc1563ad5136c389249aa3f70e (diff) | |
download | musl-7bece9c2095ee81f14b1088f6b0ba2f37fecb283.tar.gz musl-7bece9c2095ee81f14b1088f6b0ba2f37fecb283.tar.bz2 musl-7bece9c2095ee81f14b1088f6b0ba2f37fecb283.tar.xz musl-7bece9c2095ee81f14b1088f6b0ba2f37fecb283.zip |
provide getauxval(AT_SECURE) even if it is missing from the aux vector
this could happen on 2.4-series linux kernels that predate AT_SECURE
and possibly on other kernels that are emulating the linux syscall API
but not providing AT_SECURE in the aux vector at startup.
in principle applications should be checking errno anyway, but this
does not really work. to be secure, the caller would have to treat
ENOENT (indeterminate result) as possibly-suid and thereby disable
functionality in the typical non-suid usage case. and since glibc only
runs on kernels that provide AT_SECURE, applications written to the
glibc getauxval API might simply assume it succeeds.
-rw-r--r-- | src/misc/getauxval.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/misc/getauxval.c b/src/misc/getauxval.c index 5ac8b3d2..b846c80f 100644 --- a/src/misc/getauxval.c +++ b/src/misc/getauxval.c @@ -5,6 +5,7 @@ unsigned long getauxval(unsigned long item) { size_t *auxv = libc.auxv; + if (item == AT_SECURE) return libc.secure; for (; *auxv; auxv+=2) if (*auxv==item) return auxv[1]; errno = ENOENT; |