summaryrefslogtreecommitdiffstats
path: root/net/batman-adv/routing.c
diff options
context:
space:
mode:
authorSimon Wunderlich2012-10-18 13:47:42 +0200
committerAntonio Quartulli2012-11-21 12:35:45 +0100
commit004e86fc585f617f07bff38480eeee335be9b017 (patch)
tree6155b18b4f9b14105dbde5330c53f30adac7e6bf /net/batman-adv/routing.c
parentbatman-adv: Add function to calculate crc32c for the skb payload (diff)
downloadkernel-qcow2-linux-004e86fc585f617f07bff38480eeee335be9b017.tar.gz
kernel-qcow2-linux-004e86fc585f617f07bff38480eeee335be9b017.tar.xz
kernel-qcow2-linux-004e86fc585f617f07bff38480eeee335be9b017.zip
batman-adv: Fix broadcast duplist for fragmentation
If the skb is fragmented, the checksum must be computed on the individual fragments, just using skb->data may fail on fragmented data. Instead of doing linearizing the packet, use the new batadv_crc32 to do that more efficiently- it should not hurt replacing the old crc16 by the new crc32. Reported-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Diffstat (limited to 'net/batman-adv/routing.c')
-rw-r--r--net/batman-adv/routing.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 8d64348e3cc0..1aa1722d0187 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -1196,14 +1196,8 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
spin_unlock_bh(&orig_node->bcast_seqno_lock);
- /* keep skb linear for crc calculation */
- if (skb_linearize(skb) < 0)
- goto out;
-
- bcast_packet = (struct batadv_bcast_packet *)skb->data;
-
/* check whether this has been sent by another originator before */
- if (batadv_bla_check_bcast_duplist(bat_priv, bcast_packet, skb->len))
+ if (batadv_bla_check_bcast_duplist(bat_priv, skb))
goto out;
/* rebroadcast packet */