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] |
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. > > + 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 ? Like this? errno = 0xdefaced; if (personality (test_persona) != saved_persona || personality (0xffffffff) == -1 || personality (PER_LINUX) == -1 || personality (0xffffffff) != PER_LINUX || 0xdefaced != errno) rc = 1; > > + (void) personality (saved_persona); > > we don't have __wur on this func, so the (void) is kind of pointless This is my way to show that in this case, unlike others, the return code is irrelevant. If you or somebody else don't like this style, I have no problem removing the (void). -- ldv
Attachment:
pgpDmXqLIuZiC.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |