diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/futex_compat.c | 9 | 
1 files changed, 5 insertions, 4 deletions
diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c index 338a9b489fb..27478948b31 100644 --- a/kernel/futex_compat.c +++ b/kernel/futex_compat.c @@ -144,20 +144,21 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,  	struct timespec ts;  	ktime_t t, *tp = NULL;  	int val2 = 0; +	int cmd = op & FUTEX_CMD_MASK; -	if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) { +	if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI)) {  		if (get_compat_timespec(&ts, utime))  			return -EFAULT;  		if (!timespec_valid(&ts))  			return -EINVAL;  		t = timespec_to_ktime(ts); -		if (op == FUTEX_WAIT) +		if (cmd == FUTEX_WAIT)  			t = ktime_add(ktime_get(), t);  		tp = &t;  	} -	if (op == FUTEX_REQUEUE || op == FUTEX_CMP_REQUEUE -	    || op == FUTEX_CMP_REQUEUE_PI) +	if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE +	    || cmd == FUTEX_CMP_REQUEUE_PI)  		val2 = (int) (unsigned long) utime;  	return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);  |