[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