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

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

Kernel v2.4.11 /ipc/sem.c

Filename:/ipc/sem.c
Lines Added:15
Lines Deleted:2
Also changed in: (Previous) 2.4.11-pre6  2.4.11-pre5  2.4.11-pre4  2.4.11-pre3  2.4.11-pre2  2.4.10-ac10 
(Following) 2.4.19-pre9-ac3  2.4.19-pre10  2.4.19-rc1  2.4.19-rc2  2.4.19-rc3  2.4.19-rc4 

Location
[  2.4.11
  [  ipc
     o  sem.c

Patch

diff -u --recursive --new-file v2.4.10/linux/ipc/sem.c linux/ipc/sem.c
--- v2.4.10/linux/ipc/sem.c   Mon Feb 19 10:18:18 2001
+++ linux/ipc/sem.c   Sun Sep 30 12:26:42 2001
@@ -53,6 +53,8 @@
  *
  * SMP-threaded, sysctl's added
  * (c) 1999 Manfred Spraul <manfreds@colorfullife.com>
+ * Enforced range limit on SEM_UNDO
+ * (c) 2001 Red Hat Inc <alan@redhat.com>
  */
 
 #include <linux/config.h>
@@ -256,8 +258,19 @@
       curr->sempid = (curr->sempid << 16) | pid;
       curr->semval += sem_op;
       if (sop->sem_flg & SEM_UNDO)
-         un->semadj[sop->sem_num] -= sem_op;
-
+      {
+         int undo = un->semadj[sop->sem_num] - sem_op;
+         /*
+           *   Exceeding the undo range is an error.
+          */
+         if (undo < (-SEMAEM - 1) || undo > SEMAEM)
+         {
+            /* Don't undo the undo */
+            sop->sem_flg &= ~SEM_UNDO;
+            goto out_of_range;
+         }
+         un->semadj[sop->sem_num] = undo;
+      }
       if (curr->semval < 0)
          goto would_block;
       if (curr->semval > SEMVMX)


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