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>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, warmcat <andy@warmcat.com>,
	"John W. Linville" <linville@tuxdriver.com>
Subject: [patch 02/23] mac80211: Improve sanity checks on injected packets
Date: Wed, 14 Nov 2007 22:20:08 -0800	[thread overview]
Message-ID: <20071115062008.GC8282@kroah.com> (raw)
In-Reply-To: <20071115061806.GA8282@kroah.com>

[-- Attachment #1: mac80211-improve-sanity-checks-on-injected-packets.patch --]
[-- Type: text/plain, Size: 3190 bytes --]

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

------------------

From: Andy Green <andy@warmcat.com>

patch 9b8a74e3482f9fc077a88c13fa0ceca8feb0b772 in mainline.

Michael Wu noticed that the skb length checking is not taken care of enough when
a packet is presented on the Monitor interface for injection.

This patch improves the sanity checking and removes fake offsets placed
into the skb network and transport header.

Signed-off-by: Andy Green <andy@warmcat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 net/mac80211/ieee80211.c |   48 +++++++++++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 20 deletions(-)

--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -1680,46 +1680,54 @@ int ieee80211_monitor_start_xmit(struct 
 	struct ieee80211_tx_packet_data *pkt_data;
 	struct ieee80211_radiotap_header *prthdr =
 		(struct ieee80211_radiotap_header *)skb->data;
-	u16 len;
+	u16 len_rthdr;
 
-	/*
-	 * there must be a radiotap header at the
-	 * start in this case
-	 */
-	if (unlikely(prthdr->it_version)) {
-		/* only version 0 is supported */
-		dev_kfree_skb(skb);
-		return NETDEV_TX_OK;
-	}
+	/* check for not even having the fixed radiotap header part */
+	if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
+		goto fail; /* too short to be possibly valid */
+
+	/* is it a header version we can trust to find length from? */
+	if (unlikely(prthdr->it_version))
+		goto fail; /* only version 0 is supported */
+
+	/* then there must be a radiotap header with a length we can use */
+	len_rthdr = ieee80211_get_radiotap_len(skb);
+
+	/* does the skb contain enough to deliver on the alleged length? */
+	if (unlikely(skb->len < len_rthdr))
+		goto fail; /* skb too short for claimed rt header extent */
 
 	skb->dev = local->mdev;
 
 	pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
 	memset(pkt_data, 0, sizeof(*pkt_data));
+	/* needed because we set skb device to master */
 	pkt_data->ifindex = dev->ifindex;
+
 	pkt_data->mgmt_iface = 0;
 	pkt_data->do_not_encrypt = 1;
 
-	/* above needed because we set skb device to master */
-
 	/*
 	 * fix up the pointers accounting for the radiotap
 	 * header still being in there.  We are being given
 	 * a precooked IEEE80211 header so no need for
 	 * normal processing
 	 */
-	len = le16_to_cpu(get_unaligned(&prthdr->it_len));
-	skb_set_mac_header(skb, len);
-	skb_set_network_header(skb, len + sizeof(struct ieee80211_hdr));
-	skb_set_transport_header(skb, len + sizeof(struct ieee80211_hdr));
-
+	skb_set_mac_header(skb, len_rthdr);
 	/*
-	 * pass the radiotap header up to
-	 * the next stage intact
+	 * these are just fixed to the end of the rt area since we
+	 * don't have any better information and at this point, nobody cares
 	 */
-	dev_queue_xmit(skb);
+	skb_set_network_header(skb, len_rthdr);
+	skb_set_transport_header(skb, len_rthdr);
 
+	/* pass the radiotap header up to the next stage intact */
+	dev_queue_xmit(skb);
 	return NETDEV_TX_OK;
+
+fail:
+	dev_kfree_skb(skb);
+	return NETDEV_TX_OK; /* meaning, we dealt with the skb */
 }
 
 

-- 

  parent reply	other threads:[~2007-11-15  6:24 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20071115055238.692814352@mini.kroah.org>
2007-11-15  6:18 ` [patch 00/23] 2.6.23-stable review, network changes Greg KH
2007-11-15  6:20   ` [patch 01/23] mac80211: filter locally-originated multicast frames Greg KH
2007-11-15  6:20   ` Greg KH [this message]
2007-11-15  6:20   ` [patch 03/23] Add get_unaligned to ieee80211_get_radiotap_len Greg KH
2007-11-15  6:20   ` [patch 04/23] Fix advertised packet scheduler timer resolution Greg KH
2007-11-15  6:20   ` [patch 05/23] Fix 9P protocol build Greg KH
2007-11-15  6:20   ` [patch 06/23] Fix SKB_WITH_OVERHEAD calculations Greg KH
2007-11-15  6:29     ` Herbert Xu
2007-11-15  7:00       ` David Miller
2007-11-15  7:31         ` Herbert Xu
2007-11-16  0:31           ` [stable] " Greg KH
2007-11-16  2:42             ` David Miller
2007-11-15  6:20   ` [patch 07/23] Fix kernel_accept() return handling Greg KH
2007-11-15  6:20   ` [patch 08/23] softmac: fix wext MLME request reason code endianness Greg KH
2007-11-15  6:20     ` Greg KH
2007-11-15  6:20   ` [patch 09/23] Fix error returns in sys_socketpair() Greg KH
2007-11-15  6:20   ` [patch 10/23] Fix TEQL oops Greg KH
2007-11-15  6:20   ` [patch 11/23] Fix endianness bug in U32 classifier Greg KH
2007-11-15  6:20   ` [patch 12/23] Fix VLAN address syncing Greg KH
2007-11-15  6:20   ` [patch 13/23] Fix SET_VLAN_INGRESS_PRIORITY_CMD error return Greg KH
2007-11-15  6:20   ` [patch 14/23] Fix crypto_alloc_comp() error checking Greg KH
2007-11-15  6:20   ` [patch 15/23] Fix netlink timeouts Greg KH
2007-11-15  6:20   ` [patch 16/23] NETFILTER: nf_conntrack_tcp: fix connection reopening Greg KH
2007-11-15  6:20   ` [patch 17/23] ieee80211: fix TKIP QoS bug Greg KH
2007-11-15  6:20     ` Greg KH
2007-11-15  6:21   ` [patch 18/23] mac80211: reorder association debug output Greg KH
2007-11-15  6:21     ` Greg KH
2007-11-15  6:21   ` [patch 19/23] mac80211: store channel info in sta_bss_list Greg KH
2007-11-15  6:21     ` Greg KH
2007-11-15  6:21   ` [patch 20/23] mac80211: store SSID " Greg KH
2007-11-15  6:21     ` Greg KH
2007-11-15  6:21   ` [patch 21/23] mac80211: honor IW_SCAN_THIS_ESSID in siwscan ioctl Greg KH
2007-11-15  6:21     ` Greg KH
2007-11-15  6:21   ` [patch 22/23] mac80211: only honor IW_SCAN_THIS_ESSID in STA, IBSS, and AP modes Greg KH
2007-11-15  6:21     ` Greg KH
2007-11-15  6:21   ` [patch 23/23] mac80211: make ieee802_11_parse_elems return void Greg KH
2007-11-15  6:21     ` 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=20071115062008.GC8282@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=andy@warmcat.com \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=mkrufky@linuxtv.org \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --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.