mirror of git://sourceware.org/git/glibc.git
Fix hurd __access_noerrno implementation.
This patch fixes some hurd bits from commit afcf3cd8eb that added the
__access_noerrno internal symbol. It basically removes the nonrequired
__hurd_fail_noerrno (since the 'err' argument is ignored) and fixes
a typo for EACCES.
However, as stated on maillist [1] this __access_noerrno may still be
unsafe to run during initialization of tunables on the Hurd. The
access_common calls __hurd_file_name_lookup, which calls
__hurd_file_name_lookup_retry, which can set errno.
[1] https://sourceware.org/ml/libc-alpha/2016-11/msg00646.html
This commit is contained in:
parent
c73c7fc07c
commit
e92bd6e362
|
|
@ -1,3 +1,11 @@
|
||||||
|
2016-11-18 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
|
||||||
|
* hurd/hurd.h (__hurd_fail_noerrno): Remove function.
|
||||||
|
* include/unistd.h: Extend comment about __access_noerrno return
|
||||||
|
semantics.
|
||||||
|
* sysdeps/match/hurd/access.c (__hurd_fail_noerrno): Return -1.
|
||||||
|
(access_common): Correct typo for EACCES.
|
||||||
|
|
||||||
2016-11-18 Chris Metcalf <cmetcalf@mellanox.com>
|
2016-11-18 Chris Metcalf <cmetcalf@mellanox.com>
|
||||||
|
|
||||||
* sysdeps/tile/math-tests.h: New file.
|
* sysdeps/tile/math-tests.h: New file.
|
||||||
|
|
|
||||||
29
hurd/hurd.h
29
hurd/hurd.h
|
|
@ -75,35 +75,6 @@ __hurd_fail (error_t err)
|
||||||
errno = err;
|
errno = err;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
_HURD_H_EXTERN_INLINE int
|
|
||||||
__hurd_fail_noerrno (error_t err)
|
|
||||||
{
|
|
||||||
switch (err)
|
|
||||||
{
|
|
||||||
case EMACH_SEND_INVALID_DEST:
|
|
||||||
case EMIG_SERVER_DIED:
|
|
||||||
/* The server has disappeared! */
|
|
||||||
err = EIEIO;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KERN_NO_SPACE:
|
|
||||||
err = ENOMEM;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KERN_INVALID_ARGUMENT:
|
|
||||||
err = EINVAL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Basic ports and info, initialized by startup. */
|
/* Basic ports and info, initialized by startup. */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,8 @@ extern int __getlogin_r_loginuid (char *name, size_t namesize)
|
||||||
|
|
||||||
# if IS_IN (rtld) || !defined SHARED
|
# if IS_IN (rtld) || !defined SHARED
|
||||||
/* __access variant that does not set errno. Used in very early initialization
|
/* __access variant that does not set errno. Used in very early initialization
|
||||||
code in libc.a and ld.so. */
|
code in libc.a and ld.so. It follows access return semantics (zero for
|
||||||
|
sucess otherwise a value different than 0). */
|
||||||
extern __typeof (__access) __access_noerrno attribute_hidden;
|
extern __typeof (__access) __access_noerrno attribute_hidden;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ hurd_fail_seterrno (error_t err)
|
||||||
static int
|
static int
|
||||||
hurd_fail_noerrno (error_t err)
|
hurd_fail_noerrno (error_t err)
|
||||||
{
|
{
|
||||||
return __hurd_fail_noerrno (err);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -149,13 +149,15 @@ access_common (const char *file, int type, int (*errfunc) (error_t))
|
||||||
|
|
||||||
if (flags & ~allowed)
|
if (flags & ~allowed)
|
||||||
/* We are not allowed all the requested types of access. */
|
/* We are not allowed all the requested types of access. */
|
||||||
return errfunc (EACESS);
|
return errfunc (EACCES);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test for access to FILE by our real user and group IDs without setting
|
/* Test for access to FILE by our real user and group IDs without setting
|
||||||
errno. */
|
errno. This may be unsafe to run during initialization of tunables
|
||||||
|
since access_common calls __hurd_file_name_lookup, which calls
|
||||||
|
__hurd_file_name_lookup_retry, which can set errno. */
|
||||||
int
|
int
|
||||||
__access_noerrno (const char *file, int type)
|
__access_noerrno (const char *file, int type)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue