tcp: tcp_md5_hash_skb_data() frag_list handling
authorEric Dumazet <eric.dumazet@gmail.com>
Mon, 17 May 2010 20:40:51 +0000 (20:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 31 May 2010 07:24:02 +0000 (00:24 -0700)
tcp_md5_hash_skb_data() should handle skb->frag_list, and eventually
recurse.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

net/ipv4/tcp.c

index 6596b4f..49d0d2b 100644 (file)
@@ -2999,6 +2999,7 @@ int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp,
        const unsigned head_data_len = skb_headlen(skb) > header_len ?
                                       skb_headlen(skb) - header_len : 0;
        const struct skb_shared_info *shi = skb_shinfo(skb);
+       struct sk_buff *frag_iter;
 
        sg_init_table(&sg, 1);
 
@@ -3013,6 +3014,10 @@ int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *hp,
                        return 1;
        }
 
+       skb_walk_frags(skb, frag_iter)
+               if (tcp_md5_hash_skb_data(hp, frag_iter, 0))
+                       return 1;
+
        return 0;
 }