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 30 Dec 2015 02:27, Dmitry V. Levin wrote:
> On Tue, Dec 29, 2015 at 04:42:18PM -0500, Mike Frysinger wrote:
> > 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 ?
> 
> While some architectures (including x86/x86_64) use negated errno semantics,
> others (e.g. mips, nios2, powerpc, and sparc) use dedicated registers to return
> an error condition.  In the latter case, the kernel syscall exit code negates
> the value returned by sys_personality and returns it to userspace as an
> "errno".  It has to be negated again to recover the value returned by
> sys_personality.

i'm aware of some arches doing split error paths, but doesn't the kernel
already handle this ?  i'm not seeing this sort of logic for ptrace or
mmap calls where any value is valid.

i guess the commit could use clarification here.
-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]