aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/routing.c
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2012-10-18 07:47:42 -0400
committerAntonio Quartulli <ordex@autistici.org>2012-11-21 06:35:45 -0500
commit004e86fc585f617f07bff38480eeee335be9b017 (patch)
tree6155b18b4f9b14105dbde5330c53f30adac7e6bf /net/batman-adv/routing.c
parent95a066d82c422c812c10bfd4de01225b1714fa45 (diff)
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,
1196 1196
1197 spin_unlock_bh(&orig_node->bcast_seqno_lock); 1197 spin_unlock_bh(&orig_node->bcast_seqno_lock);
1198 1198
1199 /* keep skb linear for crc calculation */
1200 if (skb_linearize(skb) < 0)
1201 goto out;
1202
1203 bcast_packet = (struct batadv_bcast_packet *)skb->data;
1204
1205 /* check whether this has been sent by another originator before */ 1199 /* check whether this has been sent by another originator before */
1206 if (batadv_bla_check_bcast_duplist(bat_priv, bcast_packet, skb->len)) 1200 if (batadv_bla_check_bcast_duplist(bat_priv, skb))
1207 goto out; 1201 goto out;
1208 1202
1209 /* rebroadcast packet */ 1203 /* rebroadcast packet */