public inbox for linux-kernel@vger.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>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, James Chapman <jchapman@katalix.com>,
	"David S. Miller" <davem@davemloft.net>,
	Chris Wright <chrisw@sous-sol.org>
Subject: [patch 23/47] l2tp: avoid skb truesize bug if headroom is increased
Date: Fri, 13 Jun 2008 17:11:24 -0700	[thread overview]
Message-ID: <20080614001124.GW24698@suse.de> (raw)
In-Reply-To: <20080614000840.GA24659@suse.de>

[-- Attachment #1: l2tp-avoid-skb-truesize-bug-if-headroom-is-increased.patch --]
[-- Type: text/plain, Size: 2488 bytes --]

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

------------------
From: James Chapman <jchapman@katalix.com>

[ upstream commit: 090c48d3dd5ea90b37350334aaed9a93b0c1e0a1 ]

A user reported seeing occasional bugs such as the following when
using the L2TP driver.

  SKB BUG: Invalid truesize (272) len=72, sizeof(sk_buff)=208

When L2TP adds its header in the transmit path, it might need to
increase the headroom of the skb. In some cases, the increased
headroom trips a kernel bug when the skb is freed because the skb has
grown beyond its truesize value. The fix is to increase the truesize
by the amount of headroom added, after orphaning the skb.

While here, fix a misleading comment.

Thanks to Iouri Kharon <bc-info@styx.cabel.net> for the initial
report and testing the fix.

Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/pppol2tp.c |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

--- a/drivers/net/pppol2tp.c
+++ b/drivers/net/pppol2tp.c
@@ -980,6 +980,8 @@ static int pppol2tp_xmit(struct ppp_chan
 	__wsum csum = 0;
 	struct udphdr *uh;
 	unsigned int len;
+	int old_headroom;
+	int new_headroom;
 
 	if (sock_flag(sk, SOCK_DEAD) || !(sk->sk_state & PPPOX_CONNECTED))
 		goto abort;
@@ -1001,16 +1003,18 @@ static int pppol2tp_xmit(struct ppp_chan
 
 	/* Check that there's enough headroom in the skb to insert IP,
 	 * UDP and L2TP and PPP headers. If not enough, expand it to
-	 * make room. Note that a new skb (or a clone) is
-	 * allocated. If we return an error from this point on, make
-	 * sure we free the new skb but do not free the original skb
-	 * since that is done by the caller for the error case.
+	 * make room. Adjust truesize.
 	 */
 	headroom = NET_SKB_PAD + sizeof(struct iphdr) +
 		sizeof(struct udphdr) + hdr_len + sizeof(ppph);
+	old_headroom = skb_headroom(skb);
 	if (skb_cow_head(skb, headroom))
 		goto abort;
 
+	new_headroom = skb_headroom(skb);
+	skb_orphan(skb);
+	skb->truesize += new_headroom - old_headroom;
+
 	/* Setup PPP header */
 	__skb_push(skb, sizeof(ppph));
 	skb->data[0] = ppph[0];
@@ -1065,7 +1069,6 @@ static int pppol2tp_xmit(struct ppp_chan
 	/* Get routing info from the tunnel socket */
 	dst_release(skb->dst);
 	skb->dst = dst_clone(__sk_dst_get(sk_tun));
-	skb_orphan(skb);
 	skb->sk = sk_tun;
 
 	/* Queue the packet to IP for output */

-- 

  parent reply	other threads:[~2008-06-14  0:19 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20080613234753.235721454@mini.kroah.org>
2008-06-14  0:08 ` [patch 00/47] 2.6.25-stable review Greg KH
2008-06-14  0:10   ` [patch 01/47] b43: Fix controller restart crash Greg KH
2008-06-14  0:10   ` [patch 02/47] ipwireless: Fix blocked sending Greg KH
2008-06-14  0:10   ` [patch 03/47] Add rd alias to new brd ramdisk driver Greg KH
2008-06-14  0:10   ` [patch 04/47] ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable Greg KH
2008-06-14  0:10   ` [patch 05/47] double-free of inode on alloc_file() failure exit in create_write_pipe() Greg KH
2008-06-14  0:10   ` [patch 06/47] ALSA: hda - Fix resume of auto-config mode with Realtek codecs Greg KH
2008-06-14  0:10   ` [patch 07/47] sound: emu10k1 - fix system hang with Audigy2 ZS Notebook PCMCIA card Greg KH
2008-06-14  0:10   ` [patch 08/47] ecryptfs: add missing lock around notify_change Greg KH
2008-06-14  0:10   ` [patch 09/47] eCryptfs: protect crypt_stat->flags in ecryptfs_open() Greg KH
2008-06-14  0:10   ` [patch 10/47] ecryptfs: clean up (un)lock_parent Greg KH
2008-06-14  0:10   ` [patch 11/47] ecryptfs: fix missed mutex_unlock Greg KH
2008-06-14  0:10   ` [patch 12/47] fbdev: export symbol fb_mode_option Greg KH
2008-06-14  0:10   ` [patch 13/47] sunhv: Fix locking in non-paged I/O case Greg KH
2008-06-14  0:10   ` [patch 14/47] af_key: Fix selector family initialization Greg KH
2008-06-14  0:10   ` [patch 15/47] ax25: Fix NULL pointer dereference and lockup Greg KH
2008-06-14  0:10   ` [patch 16/47] bluetooth: fix locking bug in the rfcomm socket cleanup handling Greg KH
2008-06-14  2:50     ` Dave Young
2008-06-14  3:46       ` David Miller
2008-06-16 19:40         ` [stable] " Greg KH
2008-06-14 12:26       ` Marcel Holtmann
2008-06-15  3:35         ` Dave Young
2008-06-14  0:11   ` [patch 17/47] can: Fix copy_from_user() results interpretation Greg KH
2008-06-14  0:11   ` [patch 18/47] cassini: Only use chip checksum for ipv4 packets Greg KH
2008-06-14  0:11   ` [patch 19/47] net: Fix call to ->change_rx_flags(dev, IFF_MULTICAST) in dev_change_flags() Greg KH
2008-06-14  0:11   ` [patch 20/47] net_sched: cls_api: fix return value for non-existant classifiers Greg KH
2008-06-14  0:11   ` [patch 21/47] ipsec: Use the correct ip_local_out function Greg KH
2008-06-14  0:11   ` [patch 22/47] netlink: Fix nla_parse_nested_compat() to call nla_parse() directly Greg KH
2008-06-14  0:11   ` Greg KH [this message]
2008-06-14  0:11   ` [patch 24/47] vlan: Correctly handle device notifications for layered VLAN devices Greg KH
2008-06-14  0:11   ` [patch 25/47] tcp: TCP connection times out if ICMP frag needed is delayed Greg KH
2008-06-14  0:11   ` [patch 26/47] tcp: Allow send-limited cwnd to grow up to max_burst when gso disabled Greg KH
2008-06-14  0:11   ` [patch 27/47] tcp: Limit cwnd growth when deferring for GSO Greg KH
2008-06-14  0:11   ` [patch 28/47] l2tp: Fix possible WARN_ON from socket code when UDP socket is closed Greg KH
2008-06-14  0:11   ` [patch 29/47] l2tp: Fix possible oops if transmitting or receiving when tunnel goes down Greg KH
2008-06-14  0:11   ` [patch 30/47] tcp: fix skb vs fack_count out-of-sync condition Greg KH
2008-06-14  0:11   ` [patch 31/47] tcp FRTO: Fix fallback to conventional recovery Greg KH
2008-06-14  0:11   ` [patch 32/47] tcp FRTO: SACK variant is errorneously used with NewReno Greg KH
2008-06-14  0:11   ` [patch 33/47] tcp FRTO: work-around inorder receivers Greg KH
2008-06-14  0:11   ` [patch 34/47] mmc: wbsd: initialize tasklets before requesting interrupt Greg KH
2008-06-14  0:11   ` [patch 35/47] cciss: add new hardware support Greg KH
2008-06-14  0:11   ` [patch 36/47] hgafb: resource management fix Greg KH
2008-06-14  0:11   ` [patch 37/47] forcedeth: msi interrupts Greg KH
2008-06-14  0:12   ` [patch 38/47] tcp: Fix inconsistency source (CA_Open only when !tcp_left_out(tp)) Greg KH
2008-06-14  0:12   ` [patch 39/47] IB/umem: Avoid sign problems when demoting npages to integer Greg KH
2008-06-14  0:12   ` [patch 40/47] m68k: Add ext2_find_{first,next}_bit() for ext4 Greg KH
2008-06-14  0:12   ` [patch 41/47] cifs: fix oops on mount when CONFIG_CIFS_DFS_UPCALL is enabled Greg KH
2008-06-14  0:12   ` [patch 42/47] CPUFREQ: Fix format string bug Greg KH
2008-06-14  0:12   ` [patch 43/47] serial: fix enable_irq_wake/disable_irq_wake imbalance in serial_core.c Greg KH
2008-06-14  0:12   ` [patch 44/47] Kconfig: introduce ARCH_DEFCONFIG to DEFCONFIG_LIST Greg KH
2008-06-14  0:12   ` [patch 45/47] bttv: Fix a deadlock in the bttv driver Greg KH
2008-06-14  0:12   ` [patch 46/47] x86: fix recursive dependencies Greg KH
2008-06-14  0:12   ` [patch 47/47] mac80211: send association event on IBSS create 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=20080614001124.GW24698@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=chrisw@sous-sol.org \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=davem@davemloft.net \
    --cc=jchapman@katalix.com \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox