This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] [BZ #19408] Fix linux personality syscall wrapper


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

Attachment: signature.asc
Description: Digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]