[PATCH] [BZ #19408] Fix linux personality syscall wrapper
Mike Frysinger
vapier@gentoo.org
Tue Dec 29 21:42:00 GMT 2015
On 28 Dec 2015 04:09, Dmitry V. Levin wrote:
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/personality.c
>
> + INTERNAL_SYSCALL_DECL (err);
> + long ret = INTERNAL_SYSCALL (personality, err, 1, persona);
> +
> + /* Starting with kernel commit v2.6.29-6609-g11d06b2, personality syscall
> + never fails to set the personality. However, due to architecture
> + limitations of 32-bit kernels, personality syscall still may return
> + an "error". */
> + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (ret, err)))
> + ret = -INTERNAL_SYSCALL_ERRNO (ret, err);
> + return ret;
> +}
INTERNAL_SYSCALL returns the raw value from the kernel, so why do you
need to test it directly ?
> + if (personality (test_persona) != saved_persona ||
> + personality (0xffffffff) == -1 ||
> + personality (PER_LINUX) == -1 ||
> + personality (0xffffffff) != PER_LINUX)
> + rc = 1;
should this also verify errno is not changed ?
> + (void) personality (saved_persona);
we don't have __wur on this func, so the (void) is kind of pointless
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20151229/81737322/attachment.sig>
More information about the Libc-alpha
mailing list