Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /kernel/futex_compat.c

Filename:/kernel/futex_compat.c
Lines Added:12
Lines Deleted:2
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2-git8  2.6.25-rc2 
(Following) 2.6.25-rc7-git6  2.6.25-rc8  2.6.25-rc9  2.6.25 

Location
[  2.6.25-rc7
  [  kernel
     o  futex_compat.c

Patch

diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c
index 0a43def..ff90f04 100644
--- a/kernel/futex_compat.c
+++ b/kernel/futex_compat.c
@@ -54,6 +54,9 @@ void compat_exit_robust_list(struct task_struct *curr)
    compat_long_t futex_offset;
    int rc;
 
+   if (!futex_cmpxchg_enabled)
+      return;
+
    /*
     * Fetch the list head (which was registered earlier, via
     * sys_set_robust_list()):
@@ -115,6 +118,9 @@ asmlinkage long
 compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
             compat_size_t len)
 {
+   if (!futex_cmpxchg_enabled)
+      return -ENOSYS;
+
    if (unlikely(len != sizeof(*head)))
       return -EINVAL;
 
@@ -130,6 +136,9 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
    struct compat_robust_list_head __user *head;
    unsigned long ret;
 
+   if (!futex_cmpxchg_enabled)
+      return -ENOSYS;
+
    if (!pid)
       head = current->compat_robust_list;
    else {
@@ -167,7 +176,8 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,
    int val2 = 0;
    int cmd = op & FUTEX_CMD_MASK;
 
-   if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI)) {
+   if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
+            cmd == FUTEX_WAIT_BITSET)) {
       if (get_compat_timespec(&ts, utime))
          return -EFAULT;
       if (!timespec_valid(&ts))
@@ -175,7 +185,7 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,
 
       t = timespec_to_ktime(ts);
       if (cmd == FUTEX_WAIT)
-         t = ktime_add(ktime_get(), t);
+         t = ktime_add_safe(ktime_get(), t);
       tp = &t;
    }
    if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE)


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.