mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 12:14:01 +08:00
ppc: switch to {get,put}_compat_sigset()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d74f0f47e2
commit
a5ae754a3d
@ -94,40 +94,13 @@
|
||||
*/
|
||||
static inline int put_sigset_t(compat_sigset_t __user *uset, sigset_t *set)
|
||||
{
|
||||
compat_sigset_t cset;
|
||||
|
||||
switch (_NSIG_WORDS) {
|
||||
case 4: cset.sig[6] = set->sig[3] & 0xffffffffull;
|
||||
cset.sig[7] = set->sig[3] >> 32;
|
||||
case 3: cset.sig[4] = set->sig[2] & 0xffffffffull;
|
||||
cset.sig[5] = set->sig[2] >> 32;
|
||||
case 2: cset.sig[2] = set->sig[1] & 0xffffffffull;
|
||||
cset.sig[3] = set->sig[1] >> 32;
|
||||
case 1: cset.sig[0] = set->sig[0] & 0xffffffffull;
|
||||
cset.sig[1] = set->sig[0] >> 32;
|
||||
}
|
||||
return copy_to_user(uset, &cset, sizeof(*uset));
|
||||
return put_compat_sigset(uset, set, sizeof(*uset));
|
||||
}
|
||||
|
||||
static inline int get_sigset_t(sigset_t *set,
|
||||
const compat_sigset_t __user *uset)
|
||||
{
|
||||
compat_sigset_t s32;
|
||||
|
||||
if (copy_from_user(&s32, uset, sizeof(*uset)))
|
||||
return -EFAULT;
|
||||
|
||||
/*
|
||||
* Swap the 2 words of the 64-bit sigset_t (they are stored
|
||||
* in the "wrong" endian in 32-bit user storage).
|
||||
*/
|
||||
switch (_NSIG_WORDS) {
|
||||
case 4: set->sig[3] = s32.sig[6] | (((long)s32.sig[7]) << 32);
|
||||
case 3: set->sig[2] = s32.sig[4] | (((long)s32.sig[5]) << 32);
|
||||
case 2: set->sig[1] = s32.sig[2] | (((long)s32.sig[3]) << 32);
|
||||
case 1: set->sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32);
|
||||
}
|
||||
return 0;
|
||||
return get_compat_sigset(set, uset);
|
||||
}
|
||||
|
||||
#define to_user_ptr(p) ptr_to_compat(p)
|
||||
|
Loading…
Reference in New Issue
Block a user