[PATCH] net: Make skb_seq_read unmap the last fragment

STALE7009d

2 messages, 2 authors, 2007-06-24 · open the first message on its own page

[PATCH] net: Make skb_seq_read unmap the last fragment

From: Olaf Kirch <hidden>
Date: 2007-06-19 07:56:53

From: Olaf Kirch <redacted>

Make skb_seq_read unmap the last fragment

Having walked through the entire skbuff, skb_seq_read would leave the
last fragment mapped.  As a consequence, the unwary caller would leak
kmaps, and proceed with preempt_count off by one. The only (kind of
non-intuitive) workaround is to use skb_seq_read_abort.

This patch makes sure skb_seq_read always unmaps frag_data after having
cycled through the skb's paged part.

Signed-off-by: olaf.kirch@oracle.com
---
 net/core/skbuff.c |    5 +++++
 1 file changed, 5 insertions(+)

Index: build-2.6/net/core/skbuff.c
===================================================================
--- build-2.6.orig/net/core/skbuff.c
+++ build-2.6/net/core/skbuff.c
@@ -1706,6 +1706,11 @@ next_skb:
 		st->stepped_offset += frag->size;
 	}
 
+	if (st->frag_data) {
+		kunmap_skb_frag(st->frag_data);
+		st->frag_data = NULL;
+	}
+
 	if (st->cur_skb->next) {
 		st->cur_skb = st->cur_skb->next;
 		st->frag_idx = 0;
-- 
Olaf Kirch  |  --- o --- Nous sommes du soleil we love when we play
okir@lst.de |    / | \   sol.dhoop.naytheet.ah kin.ir.samse.qurax

Re: [PATCH] net: Make skb_seq_read unmap the last fragment

From: David Miller <davem@davemloft.net>
Date: 2007-06-24 06:11:59

From: Olaf Kirch <redacted>
Date: Tue, 19 Jun 2007 09:56:24 +0200
From: Olaf Kirch <redacted>

Make skb_seq_read unmap the last fragment

Having walked through the entire skbuff, skb_seq_read would leave the
last fragment mapped.  As a consequence, the unwary caller would leak
kmaps, and proceed with preempt_count off by one. The only (kind of
non-intuitive) workaround is to use skb_seq_read_abort.

This patch makes sure skb_seq_read always unmaps frag_data after having
cycled through the skb's paged part.

Signed-off-by: olaf.kirch@oracle.com
Thanks for finding and fixing this bug.

Patch applied, thanks again Olaf.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help