diff options
author | David S. Miller <davem@davemloft.net> | 2013-05-12 01:23:44 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-05-12 01:23:44 +0200 |
commit | fb863b8beaf8121199c3dc32ab0126e8ce9cb34a (patch) | |
tree | 6ce4b8a34c53d7261d6ef3aa85e7198ecb1f8da5 /net/batman-adv/network-coding.c | |
parent | ipv4: ip_output: remove inline marking of EXPORT_SYMBOL functions (diff) | |
parent | batman-adv: reorder clean up routine in order to avoid race conditions (diff) | |
download | linux-fb863b8beaf8121199c3dc32ab0126e8ce9cb34a.tar.xz linux-fb863b8beaf8121199c3dc32ab0126e8ce9cb34a.zip |
Merge tag 'batman-adv-fix-for-davem' of git://git.open-mesh.org/linux-merge
Included changes:
- fix parsing of user typed protocol string to avoid random memory access in
some cases
- check pskb_trim_rcsum() return value
- prevent DAT from sending ARP replies when not needed
- reorder the main clean up routine to prevent race conditions
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/batman-adv/network-coding.c')
-rw-r--r-- | net/batman-adv/network-coding.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c index f7c54305a918..e84629ece9b7 100644 --- a/net/batman-adv/network-coding.c +++ b/net/batman-adv/network-coding.c @@ -1514,6 +1514,7 @@ batadv_nc_skb_decode_packet(struct batadv_priv *bat_priv, struct sk_buff *skb, struct ethhdr *ethhdr, ethhdr_tmp; uint8_t *orig_dest, ttl, ttvn; unsigned int coding_len; + int err; /* Save headers temporarily */ memcpy(&coded_packet_tmp, skb->data, sizeof(coded_packet_tmp)); @@ -1568,8 +1569,11 @@ batadv_nc_skb_decode_packet(struct batadv_priv *bat_priv, struct sk_buff *skb, coding_len); /* Resize decoded skb if decoded with larger packet */ - if (nc_packet->skb->len > coding_len + h_size) - pskb_trim_rcsum(skb, coding_len + h_size); + if (nc_packet->skb->len > coding_len + h_size) { + err = pskb_trim_rcsum(skb, coding_len + h_size); + if (err) + return NULL; + } /* Create decoded unicast packet */ unicast_packet = (struct batadv_unicast_packet *)skb->data; |