diff options
author | Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de> | 2012-10-18 07:47:42 -0400 |
---|---|---|
committer | Antonio Quartulli <ordex@autistici.org> | 2012-11-21 06:35:45 -0500 |
commit | 004e86fc585f617f07bff38480eeee335be9b017 (patch) | |
tree | 6155b18b4f9b14105dbde5330c53f30adac7e6bf /net/batman-adv/routing.c | |
parent | 95a066d82c422c812c10bfd4de01225b1714fa45 (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.c | 8 |
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 */ |