[PATCH] IPC id checks off-by-one

From: Hugh Dickins (hugh@veritas.com)
Date: Mon Feb 19 2001 - 11:43:44 EST


Five IPC id checks against array size are off-by-one.
Only the last instance, in ipc_lock(), really matters;
but all should be fixed to set the right example.

diff -urN linux-2.4.2-pre4/ipc/msg.c linux/ipc/msg.c
--- linux-2.4.2-pre4/ipc/msg.c Sat Feb 17 11:14:26 2001
+++ linux/ipc/msg.c Sun Feb 18 08:20:25 2001
@@ -473,7 +473,7 @@
                 int success_return;
                 if (!buf)
                         return -EFAULT;
- if(cmd == MSG_STAT && msqid > msg_ids.size)
+ if(cmd == MSG_STAT && msqid >= msg_ids.size)
                         return -EINVAL;
 
                 memset(&tbuf,0,sizeof(tbuf));
diff -urN linux-2.4.2-pre4/ipc/sem.c linux/ipc/sem.c
--- linux-2.4.2-pre4/ipc/sem.c Sat Feb 17 11:14:27 2001
+++ linux/ipc/sem.c Sun Feb 18 08:21:37 2001
@@ -467,7 +467,7 @@
                 struct semid64_ds tbuf;
                 int id;
 
- if(semid > sem_ids.size)
+ if(semid >= sem_ids.size)
                         return -EINVAL;
 
                 memset(&tbuf,0,sizeof(tbuf));
diff -urN linux-2.4.2-pre4/ipc/util.c linux/ipc/util.c
--- linux-2.4.2-pre4/ipc/util.c Sat Feb 17 11:14:27 2001
+++ linux/ipc/util.c Sun Feb 18 08:23:06 2001
@@ -185,7 +185,7 @@
 {
         struct kern_ipc_perm* p;
         int lid = id % SEQ_MULTIPLIER;
- if(lid > ids->size)
+ if(lid >= ids->size)
                 BUG();
         p = ids->entries[lid].p;
         ids->entries[lid].p = NULL;
diff -urN linux-2.4.2-pre4/ipc/util.h linux/ipc/util.h
--- linux-2.4.2-pre4/ipc/util.h Thu Jun 22 15:09:45 2000
+++ linux/ipc/util.h Sun Feb 18 08:25:10 2001
@@ -54,7 +54,7 @@
 {
         struct kern_ipc_perm* out;
         int lid = id % SEQ_MULTIPLIER;
- if(lid > ids->size)
+ if(lid >= ids->size)
                 return NULL;
 
         out = ids->entries[lid].p;
@@ -69,7 +69,7 @@
 {
         struct kern_ipc_perm* out;
         int lid = id % SEQ_MULTIPLIER;
- if(lid > ids->size)
+ if(lid >= ids->size)
                 return NULL;
 
         spin_lock(&ids->ary);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Feb 23 2001 - 21:00:20 EST