Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: gso_test: release each segment individually

consume_skb() doesn't walk the segment list, so segments other than
the first are leaked.

Move this skb_consume call into the loop.

Cc: Willem de Bruijn <willemb@google.com>
Fixes: b3098d32ed6e ("net: add skb_segment kunit test")
Signed-off-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Florian Westphal and committed by
David S. Miller
1b2d3b45 a3c2dd96

+9 -5
+9 -5
net/core/gso_test.c
··· 144 144 static void gso_test_func(struct kunit *test) 145 145 { 146 146 const int shinfo_size = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 147 + struct sk_buff *skb, *segs, *cur, *next, *last; 147 148 const struct gso_test_case *tcase; 148 - struct sk_buff *skb, *segs, *cur; 149 149 netdev_features_t features; 150 150 struct page *page; 151 151 int i; ··· 236 236 goto free_gso_skb; 237 237 } 238 238 239 - for (cur = segs, i = 0; cur; cur = cur->next, i++) { 239 + last = segs->prev; 240 + for (cur = segs, i = 0; cur; cur = next, i++) { 241 + next = cur->next; 242 + 240 243 KUNIT_ASSERT_EQ(test, cur->len, sizeof(hdr) + tcase->segs[i]); 241 244 242 245 /* segs have skb->data pointing to the mac header */ ··· 250 247 KUNIT_ASSERT_EQ(test, memcmp(skb_mac_header(cur), hdr, sizeof(hdr)), 0); 251 248 252 249 /* last seg can be found through segs->prev pointer */ 253 - if (!cur->next) 254 - KUNIT_ASSERT_PTR_EQ(test, cur, segs->prev); 250 + if (!next) 251 + KUNIT_ASSERT_PTR_EQ(test, cur, last); 252 + 253 + consume_skb(cur); 255 254 } 256 255 257 256 KUNIT_ASSERT_EQ(test, i, tcase->nr_segs); 258 257 259 - consume_skb(segs); 260 258 free_gso_skb: 261 259 consume_skb(skb); 262 260 }