[PATCH] Fixup 32 bit sys_recvmsg corruption patch
Linux Kernel Mailing List <[email protected]> Wed, 23 Feb 2005 06:13:02 +0000
| Newsgroups | gmane.linux.kernel.commits.2-4 |
|---|---|
| Message-ID | <[email protected]> |
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))) +