ChangeSet 1.1537.10.1, 2005/02/23 03:13:02-03:00, [EMAIL PROTECTED]

        [PATCH] Fixup 32 bit sys_recvmsg corruption patch
        
        > Marcelo already put in an earlier version of your patch with
        > the typo in the conditional which broke compilation on every
        > platform.
        >
        > Please send him a relative patch to fix things up.
        
        Sorry about that.  Here is a relative patch that fixes the mossing || 
and
        removes the printk as requested by Andi.



 ia64/ia32/sys_ia32.c         |   14 ++------------
 mips64/kernel/linux32.c      |   14 ++------------
 parisc/kernel/sys_parisc32.c |   14 ++------------
 ppc64/kernel/sys_ppc32.c     |   14 ++------------
 s390x/kernel/linux32.c       |   14 ++------------
 sparc64/kernel/sys_sparc32.c |   14 ++------------
 x86_64/ia32/socket32.c       |   14 ++------------
 7 files changed, 14 insertions(+), 84 deletions(-)


diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c
--- a/arch/ia64/ia32/sys_ia32.c 2005-02-23 10:06:43 -08:00
+++ b/arch/ia64/ia32/sys_ia32.c 2005-02-23 10:06:43 -08:00
@@ -1684,19 +1684,9 @@
                        goto fail2;
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
diff -Nru a/arch/mips64/kernel/linux32.c b/arch/mips64/kernel/linux32.c
--- a/arch/mips64/kernel/linux32.c      2005-02-23 10:06:44 -08:00
+++ b/arch/mips64/kernel/linux32.c      2005-02-23 10:06:44 -08:00
@@ -2822,19 +2822,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
diff -Nru a/arch/parisc/kernel/sys_parisc32.c 
b/arch/parisc/kernel/sys_parisc32.c
--- a/arch/parisc/kernel/sys_parisc32.c 2005-02-23 10:06:43 -08:00
+++ b/arch/parisc/kernel/sys_parisc32.c 2005-02-23 10:06:43 -08:00
@@ -2138,19 +2138,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
diff -Nru a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c
--- a/arch/ppc64/kernel/sys_ppc32.c     2005-02-23 10:06:43 -08:00
+++ b/arch/ppc64/kernel/sys_ppc32.c     2005-02-23 10:06:43 -08:00
@@ -3696,19 +3696,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
diff -Nru a/arch/s390x/kernel/linux32.c b/arch/s390x/kernel/linux32.c
--- a/arch/s390x/kernel/linux32.c       2005-02-23 10:06:44 -08:00
+++ b/arch/s390x/kernel/linux32.c       2005-02-23 10:06:44 -08:00
@@ -2629,19 +2629,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
diff -Nru a/arch/sparc64/kernel/sys_sparc32.c 
b/arch/sparc64/kernel/sys_sparc32.c
--- a/arch/sparc64/kernel/sys_sparc32.c 2005-02-23 10:06:44 -08:00
+++ b/arch/sparc64/kernel/sys_sparc32.c 2005-02-23 10:06:44 -08:00
@@ -2679,19 +2679,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                if (kcmsg32->cmsg_level == SOL_SOCKET &&
                        kcmsg32->cmsg_type == SO_TIMESTAMP) {
                        struct timeval tv;
diff -Nru a/arch/x86_64/ia32/socket32.c b/arch/x86_64/ia32/socket32.c
--- a/arch/x86_64/ia32/socket32.c       2005-02-23 10:06:43 -08:00
+++ b/arch/x86_64/ia32/socket32.c       2005-02-23 10:06:43 -08:00
@@ -334,19 +334,9 @@
                __get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
 
                clen64 = kcmsg32->cmsg_len;
-               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg)))
-                               (clen64 > (orig_cmsg_len + wp - workbuf))) {
-                       static int count;
-
-                       if (count++ < 20)
-                               printk(KERN_WARNING "recvmsg_fixup: "
-                                       "bad data length %d, level %d, "
-                                       "type %d, process %d (%s)\n",
-                                       clen64, kcmsg32->cmsg_level,
-                                       kcmsg32->cmsg_type,
-                                       current->pid, current->comm);
+               if ((clen64 < CMSG_ALIGN(sizeof(*ucmsg))) ||
+                               (clen64 > (orig_cmsg_len + wp - workbuf)))
                        break;
-               }
                copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
                               clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
                clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to