Re: [PATCH v3 3/3] generic sys_ipc wrapper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 08, 2010 at 11:57:17AM +0100, Arnd Bergmann wrote:
> > Add a generic implementation of the ipc demultiplexer syscall.  Except for
> > s390 and sparc64 all implementations of the sys_ipc are nearly identical.
> 
> I think the s390 version is trivial to add as well, like
> 
> SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second,
>  		unsigned long, third, void __user *, ptr)
> {
> 	if (call == SEMTIMEDOP)
> 		return sys_semtimedop(first, (struct sembuf __user *)ptr,
> 				      (unsigned) second,
> 				      (const struct timespec __user *)third);
> 
> 	return sys_ipc(call & 0xffff, first, second, third, ptr, 0);
> }

Possiblly.  Not sure if it's worth it, though.  If the s390 maintainers
want it I'd say do it as a separate patch.

> But while going over the code again, I noticed that you broke sign extension
> at least on powerpc and s390, possibly on all 64 bit machines:

> > +			return -EINVAL;
> > +		if (get_user(fourth.__pad, (void __user * __user *) ptr))
> > +			return -EFAULT;
> > +		return sys_semctl(first, second, third, fourth);
> 
> 		return sys_semctl(first, (int)second, third, fourth);

What does the explicit case buy us in terms of sign-extension over
the implicit one given that the second argument to sys_semctl already is
types as int?

> This is needed to make sure the upper half of the register is filled with
> zero-extended or sign-extended correctly and does not contain random garbage
> in the native 64 bit case. IIRC, x86_64 does not have this problem and mips64
> may have the wrong code already. Alpha, parisc and ia64 don't have a native
> sys_ipc and the rest are 32 bit, so they don't care.

I can fix it up, but I don't quite understand the need.

--
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux