All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay.com>
To: Greg KH <greg@kroah.com>
Cc: stable@kernel.org, "David S. Miller" <davem@davemloft.net>,
	netdev@vger.kernel.org
Subject: Re: [stable] [BUG] net: fix /proc/net/snmp as memory corruptor
Date: Sat, 15 Nov 2008 09:37:27 +0100	[thread overview]
Message-ID: <491E8A47.1090007@cosmosbay.com> (raw)
In-Reply-To: <20081115060237.GA3910@kroah.com>

[-- Attachment #1: Type: text/plain, Size: 1291 bytes --]

Greg KH a écrit :
> On Sat, Nov 15, 2008 at 06:25:33AM +0100, Eric Dumazet wrote:
>> Greg KH a écrit :
>>> On Fri, Nov 14, 2008 at 06:08:48AM +0100, Eric Dumazet wrote:
>>>> Hello Greg
>>>>
>>>> A patch was submited about /proc/net/snmp being a memory corruptor and 
>>>> not SMP safe
>>>>
>>>> (commit b971e7ac834e9f4bda96d5a96ae9abccd01c1dd8)
>>>>
>>>> These bugs are present on 2.6.26 & 2.6.27.
>>> I looking at this, it doesn't seem to apply at all to the .27 tree.  If
>>> David doesn't object, care to backport it there and send it to
>>> stable@kernel.org?
>> Strange... I just tried to apply patch on top of a fresh linux-2.6.27.6 
>> tree and got no error
>>
>> # patch -p1 < /tmp/icmp_snmp.patch
>> patching file net/ipv4/proc.c
>> #
> 
> I've attached the patch I tried to apply below.  It fails with:
> 	$ patch -p1 --dry-run < ../net-fix-proc-net-snmp-as-memory-corruptor.patch 
> 	patching file net/ipv4/proc.c
> 	Hunk #1 FAILED at 237.
> 	1 out of 1 hunk FAILED -- saving rejects to file net/ipv4/proc.c.rej
> 
> 
> Any thoughts?
> 
> thanks,
> 
> greg k-h
> 

Yes, you lost all the '\' character in "\n" sequences... 
Also one missing ":" at the end of one line

I dont know how you did it :)

Here is the (manually) corrected file 

[-- Attachment #2: p.patch --]
[-- Type: text/plain, Size: 2574 bytes --]

From: Eric Dumazet <dada1@cosmosbay.com>
Date: Mon, 10 Nov 2008 21:43:08 -0800
Subject: net: fix /proc/net/snmp as memory corruptor

From: Eric Dumazet <dada1@cosmosbay.com>

commit b971e7ac834e9f4bda96d5a96ae9abccd01c1dd8 upstream.

icmpmsg_put() can happily corrupt kernel memory, using a static
table and forgetting to reset an array index in a loop.

Remove the static array since its not safe without proper locking.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -237,43 +237,45 @@ static const struct snmp_mib snmp4_net_list[] = {
 	SNMP_MIB_SENTINEL
 };
 
+static void icmpmsg_put_line(struct seq_file *seq, unsigned long *vals,
+			     unsigned short *type, int count)
+{
+	int j;
+
+	if (count) {
+		seq_printf(seq, "\nIcmpMsg:");
+		for (j = 0; j < count; ++j)
+			seq_printf(seq, " %sType%u",
+				type[j] & 0x100 ? "Out" : "In",
+				type[j] & 0xff);
+		seq_printf(seq, "\nIcmpMsg:");
+		for (j = 0; j < count; ++j)
+			seq_printf(seq, " %lu", vals[j]);
+	}
+}
+
 static void icmpmsg_put(struct seq_file *seq)
 {
 #define PERLINE	16
 
-	int j, i, count;
-	static int out[PERLINE];
+	int i, count;
+	unsigned short type[PERLINE];
+	unsigned long vals[PERLINE], val;
 	struct net *net = seq->private;
 
 	count = 0;
 	for (i = 0; i < ICMPMSG_MIB_MAX; i++) {
-
-		if (snmp_fold_field((void **) net->mib.icmpmsg_statistics, i))
-			out[count++] = i;
-		if (count < PERLINE)
-			continue;
-
-		seq_printf(seq, "\nIcmpMsg:");
-		for (j = 0; j < PERLINE; ++j)
-			seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In",
-					i & 0xff);
-		seq_printf(seq, "\nIcmpMsg: ");
-		for (j = 0; j < PERLINE; ++j)
-			seq_printf(seq, " %lu",
-				snmp_fold_field((void **) net->mib.icmpmsg_statistics,
-				out[j]));
-		seq_putc(seq, '\n');
-	}
-	if (count) {
-		seq_printf(seq, "\nIcmpMsg:");
-		for (j = 0; j < count; ++j)
-			seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" :
-				"In", out[j] & 0xff);
-		seq_printf(seq, "\nIcmpMsg:");
-		for (j = 0; j < count; ++j)
-			seq_printf(seq, " %lu", snmp_fold_field((void **)
-				net->mib.icmpmsg_statistics, out[j]));
+		val = snmp_fold_field((void **) net->mib.icmpmsg_statistics, i);
+		if (val) {
+			type[count] = i;
+			vals[count++] = val;
+		}
+		if (count == PERLINE) {
+			icmpmsg_put_line(seq, vals, type, count);
+			count = 0;
+		}
 	}
+	icmpmsg_put_line(seq, vals, type, count);
 
 #undef PERLINE
 }

  reply	other threads:[~2008-11-15  8:37 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <491D07E0.9010903@cosmosbay.com>
2008-11-15  5:10 ` [stable] [BUG] net: fix /proc/net/snmp as memory corruptor Greg KH
2008-11-15  5:25   ` Eric Dumazet
2008-11-15  6:02     ` Greg KH
2008-11-15  8:37       ` Eric Dumazet [this message]
2008-11-15 18:43         ` Greg KH
2008-11-17  4:51           ` Greg KH
2008-11-17  6:04             ` Eric Dumazet
2008-11-15  6:23   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=491E8A47.1090007@cosmosbay.com \
    --to=dada1@cosmosbay.com \
    --cc=davem@davemloft.net \
    --cc=greg@kroah.com \
    --cc=netdev@vger.kernel.org \
    --cc=stable@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.