From a493e6ebf51910f525dcdfecea8951aa74458bc1 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Tue, 9 Jun 2009 00:22:47 -0700 Subject: [PATCH] --- yaml --- r: 150767 b: refs/heads/master c: d4fd3bc101909802f9ed083093cce688cc3416aa h: refs/heads/master i: 150765: b797fd18679aa6b2f755d2afa3b47328ad497a9e 150763: b3b397e84337fa4b9da37af36ae229bd41c00ce8 150759: 6caa2c97655ec1e8484699bbe220d0df7fe64666 150751: a8b1e25c68fdd73d65215cd51060f1dffa8d6d7d v: v3 --- [refs] | 2 +- trunk/net/xfrm/xfrm_algo.c | 41 ++++++++++++++++++-------------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/[refs] b/[refs] index e9c61240cf3e..8047e291d7b2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1b003be39e91a6cd013c9ea580ccc24d1fac9959 +refs/heads/master: d4fd3bc101909802f9ed083093cce688cc3416aa diff --git a/trunk/net/xfrm/xfrm_algo.c b/trunk/net/xfrm/xfrm_algo.c index 96036cf2216d..d31ccb487730 100644 --- a/trunk/net/xfrm/xfrm_algo.c +++ b/trunk/net/xfrm/xfrm_algo.c @@ -696,8 +696,9 @@ int skb_icv_walk(const struct sk_buff *skb, struct hash_desc *desc, { int start = skb_headlen(skb); int i, copy = start - offset; - int err; + struct sk_buff *frag_iter; struct scatterlist sg; + int err; /* Checksum header. */ if (copy > 0) { @@ -742,28 +743,24 @@ int skb_icv_walk(const struct sk_buff *skb, struct hash_desc *desc, start = end; } - if (skb_shinfo(skb)->frag_list) { - struct sk_buff *list = skb_shinfo(skb)->frag_list; - - for (; list; list = list->next) { - int end; - - WARN_ON(start > offset + len); - - end = start + list->len; - if ((copy = end - offset) > 0) { - if (copy > len) - copy = len; - err = skb_icv_walk(list, desc, offset-start, - copy, icv_update); - if (unlikely(err)) - return err; - if ((len -= copy) == 0) - return 0; - offset += copy; - } - start = end; + skb_walk_frags(skb, frag_iter) { + int end; + + WARN_ON(start > offset + len); + + end = start + frag_iter->len; + if ((copy = end - offset) > 0) { + if (copy > len) + copy = len; + err = skb_icv_walk(frag_iter, desc, offset-start, + copy, icv_update); + if (unlikely(err)) + return err; + if ((len -= copy) == 0) + return 0; + offset += copy; } + start = end; } BUG_ON(len); return 0;