All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Vegard Nossum <vegard.nossum@gmail.com>,
	Thomas Graf <tgraf@suug.ch>,
	"David S. Miller" <davem@davemloft.net>
Subject: [patch 25/28] netlink: fix overrun in attribute iteration
Date: Mon, 6 Oct 2008 16:17:55 -0700	[thread overview]
Message-ID: <20081006231755.GZ20567@suse.de> (raw)
In-Reply-To: <20081006231639.GA20567@suse.de>

[-- Attachment #1: 0003-netlink-fix-overrun-in-attribute-iteration.patch --]
[-- Type: text/plain, Size: 3110 bytes --]

2.6.25-stable review patch.  If anyone has any objections, please let us
know.

------------------
From: Vegard Nossum <vegard.nossum@gmail.com>

[ Upstream commit 1045b03e07d85f3545118510a587035536030c1c ]

kmemcheck reported this:

  kmemcheck: Caught 16-bit read from uninitialized memory (f6c1ba30)
  0500110001508abf050010000500000002017300140000006f72672e66726565
   i i i i i i i i i i i i i u u u u u u u u u u u u u u u u u u u
                                   ^

  Pid: 3462, comm: wpa_supplicant Not tainted (2.6.27-rc3-00054-g6397ab9-dirty #13)
  EIP: 0060:[<c05de64a>] EFLAGS: 00010296 CPU: 0
  EIP is at nla_parse+0x5a/0xf0
  EAX: 00000008 EBX: fffffffd ECX: c06f16c0 EDX: 00000005
  ESI: 00000010 EDI: f6c1ba30 EBP: f6367c6c ESP: c0a11e88
   DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
  CR0: 8005003b CR2: f781cc84 CR3: 3632f000 CR4: 000006d0
  DR0: c0ead9bc DR1: 00000000 DR2: 00000000 DR3: 00000000
  DR6: ffff4ff0 DR7: 00000400
   [<c05d4b23>] rtnl_setlink+0x63/0x130
   [<c05d5f75>] rtnetlink_rcv_msg+0x165/0x200
   [<c05ddf66>] netlink_rcv_skb+0x76/0xa0
   [<c05d5dfe>] rtnetlink_rcv+0x1e/0x30
   [<c05dda21>] netlink_unicast+0x281/0x290
   [<c05ddbe9>] netlink_sendmsg+0x1b9/0x2b0
   [<c05beef2>] sock_sendmsg+0xd2/0x100
   [<c05bf945>] sys_sendto+0xa5/0xd0
   [<c05bf9a6>] sys_send+0x36/0x40
   [<c05c03d6>] sys_socketcall+0x1e6/0x2c0
   [<c020353b>] sysenter_do_call+0x12/0x3f
   [<ffffffff>] 0xffffffff

This is the line in nla_ok():

  /**
   * nla_ok - check if the netlink attribute fits into the remaining bytes
   * @nla: netlink attribute
   * @remaining: number of bytes remaining in attribute stream
   */
  static inline int nla_ok(const struct nlattr *nla, int remaining)
  {
          return remaining >= sizeof(*nla) &&
                 nla->nla_len >= sizeof(*nla) &&
                 nla->nla_len <= remaining;
  }

It turns out that remaining can become negative due to alignment in
nla_next(). But GCC promotes "remaining" to unsigned in the test
against sizeof(*nla) above. Therefore the test succeeds, and the
nla_for_each_attr() may access memory outside the received buffer.

A short example illustrating this point is here:

  #include <stdio.h>

  main(void)
  {
          printf("%d\n", -1 >= sizeof(int));
  }

...which prints "1".

This patch adds a cast in front of the sizeof so that GCC will make
a signed comparison and fix the illegal memory dereference. With the
patch applied, there is no kmemcheck report.

Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 include/net/netlink.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -704,7 +704,7 @@ static inline int nla_len(const struct n
  */
 static inline int nla_ok(const struct nlattr *nla, int remaining)
 {
-	return remaining >= sizeof(*nla) &&
+	return remaining >= (int) sizeof(*nla) &&
 	       nla->nla_len >= sizeof(*nla) &&
 	       nla->nla_len <= remaining;
 }

-- 

  parent reply	other threads:[~2008-10-06 23:30 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081006225949.357365087@mini.kroah.org>
2008-10-06 23:16 ` [patch 00/28] 2.6.25-stable review Greg KH
2008-10-06 23:16   ` [patch 01/28] USB: fix hcd interrupt disabling Greg KH
2008-10-06 23:17   ` [patch 02/28] pxa2xx_spi: dma bugfixes Greg KH
2008-10-07  0:15     ` Ned Forrester
2008-10-06 23:17   ` [patch 03/28] pxa2xx_spi: chipselect bugfixes Greg KH
2008-10-06 23:17   ` [patch 04/28] drivers/mmc/card/block.c: fix refcount leak in mmc_block_open() Greg KH
2008-10-06 23:17   ` [patch 05/28] ALSA: hda - Fix model for Dell Inspiron 1525 Greg KH
2008-10-07  5:55     ` Takashi Iwai
2008-10-09  2:38       ` Greg KH
2008-10-06 23:17   ` [patch 06/28] i2c-dev: Return correct error code on class_create() failure Greg KH
2008-10-06 23:17   ` [patch 07/28] ACPI: Fix thermal shutdowns Greg KH
2008-10-06 23:17   ` [patch 08/28] x86: add io delay quirk for Presario F700 Greg KH
2008-10-06 23:17   ` [patch 09/28] rtc: fix deadlock Greg KH
2008-10-06 23:17   ` [patch 10/28] ACPI: Avoid bogus EC timeout when EC is in Polling mode Greg KH
2008-10-06 23:17   ` [patch 11/28] clockevents: prevent clockevent event_handler ending up handler_noop Greg KH
2008-10-06 23:17   ` [patch 12/28] clockevents: prevent endless loop in periodic broadcast handler Greg KH
2008-10-06 23:17   ` [patch 13/28] clockevents: enforce reprogram in oneshot setup Greg KH
2008-10-06 23:17   ` [patch 14/28] clockevents: prevent multiple init/shutdown Greg KH
2008-10-06 23:17   ` [patch 15/28] clockevents: prevent endless loop lockup Greg KH
2008-10-06 23:17   ` [patch 16/28] HPET: make minimum reprogramming delta useful Greg KH
2008-10-06 23:17   ` [patch 17/28] clockevents: broadcast fixup possible waiters Greg KH
2008-10-06 23:17   ` [patch 18/28] x86: HPET fix moronic 32/64bit thinko Greg KH
2008-10-06 23:17   ` [patch 19/28] x86: HPET: read back compare register before reading counter Greg KH
2008-10-06 23:17   ` [patch 20/28] ntp: fix calculation of the next jiffie to trigger RTC sync Greg KH
2008-10-06 23:17   ` [patch 21/28] clockevents: remove WARN_ON which was used to gather information Greg KH
2008-10-06 23:17   ` [patch 22/28] x86: Fix broken LDT access in VMI Greg KH
2008-10-06 23:17   ` [patch 23/28] ipv6: Fix OOPS in ip6_dst_lookup_tail() Greg KH
2008-10-06 23:51     ` Neil Horman
2008-10-06 23:17   ` [patch 24/28] niu: panic on reset Greg KH
2008-10-06 23:17   ` Greg KH [this message]
2008-10-06 23:17   ` [patch 26/28] sctp: do not enable peer features if we cant do them Greg KH
2008-10-06 23:17   ` [patch 27/28] sctp: Fix oops when INIT-ACK indicates that peer doesnt support AUTH Greg KH
2008-10-06 23:18   ` [patch 28/28] udp: Fix rcv socket locking Greg KH

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=20081006231755.GZ20567@suse.de \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=davem@davemloft.net \
    --cc=eteo@redhat.com \
    --cc=jake@lwn.net \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=tgraf@suug.ch \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=vegard.nossum@gmail.com \
    --cc=w@1wt.eu \
    --cc=zwane@arm.linux.org.uk \
    /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.