projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] pcmcia: convert pcmcia_cs to kthread
[powerpc.git]
/
kernel
/
futex_compat.c
diff --git
a/kernel/futex_compat.c
b/kernel/futex_compat.c
index
9c077cf
..
d1d92b4
100644
(file)
--- a/
kernel/futex_compat.c
+++ b/
kernel/futex_compat.c
@@
-129,12
+129,19
@@
asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,
unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
int val2 = 0;
unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
int val2 = 0;
- if (
(op == FUTEX_WAIT) && utime
) {
+ if (
utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)
) {
if (get_compat_timespec(&t, utime))
return -EFAULT;
if (get_compat_timespec(&t, utime))
return -EFAULT;
- timeout = timespec_to_jiffies(&t) + 1;
+ if (!timespec_valid(&t))
+ return -EINVAL;
+ if (op == FUTEX_WAIT)
+ timeout = timespec_to_jiffies(&t) + 1;
+ else {
+ timeout = t.tv_sec;
+ val2 = t.tv_nsec;
+ }
}
}
- if (op
>= FUTEX
_REQUEUE)
+ if (op
== FUTEX_REQUEUE || op == FUTEX_CMP
_REQUEUE)
val2 = (int) (unsigned long) utime;
return do_futex(uaddr, op, val, timeout, uaddr2, val2, val3);
val2 = (int) (unsigned long) utime;
return do_futex(uaddr, op, val, timeout, uaddr2, val2, val3);