Included changes:

- fix Ethernet header access by jumping the correct batman-adv header
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.19 (GNU/Linux)
 
 iQIcBAABCAAGBQJRdO2PAAoJEADl0hg6qKeOLTMP/2m8535KXBbcGA7y9/p4m9pX
 OnB1YgJ21CdSfL4UYsmqyrmxT9wzYl96DNXEFAebEbLsECqAkt+89DN2f8qeuH/l
 q2UezLLudK/Ji0DFUBM+NvjX0mWB0bGIm8cLYLLgGULucjmvMY0mjCSG3RbrObSe
 vkxQCzQ3a/46LLrvMX+IkJ/HmbfzAKQE/egdGxJXvIADayVki+HuMNv0caI/o8CU
 NwrA3pAR1cGYFOEKeb8CkPQ31+YZyGH35WKbjhMSGC0IaMw65n1SvqT/rfcxzRip
 ilDjl8OK8d1qbJxyIw4ooJUj3TaDGbOWvZlYmGvjaY9NUlBojd+/Nbdl7C0+IVfP
 MHfeYzg63F0VGP1cHO2nUHPpvdkDh145/TJSLF2Uraa7bD9I8gIA21o+OGj/S3z/
 F9kVLcYzMtZ08J8SRMGHzoCdTvFAc4BBnGtjzh7AnfmJR3OXYp2PUQZJHpSgTF7E
 pPYCInRr1kDrMq6Dn8/wtAbBqA+dnjesDEftKYb25H6s8BpseiFbLT4DyFuHU4Rb
 25tHZJ8v1GzchVf023144n+wIUW/48XpG43E4VTzwlVuO01rHrUnrw3prhv7P1Ub
 0334CGxu152O9LEyP5F5y8kUdnuP6TTQRqMp6eUztsQliqRDo5iLpFCFUZJeyS0c
 z6RHPDtH2lfEUnuhBFwi
 =+9vN
 -----END PGP SIGNATURE-----

Merge tag 'batman-adv-fix-for-davem' of git://git.open-mesh.org/linux-merge

Included changes:
- fix Ethernet header access by jumping the correct batman-adv header

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2013-04-25 01:33:04 -04:00
commit c510273a6c
1 changed files with 5 additions and 6 deletions

View File

@ -924,7 +924,7 @@ out:
}
static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
struct sk_buff *skb) {
struct sk_buff *skb, int hdr_len) {
uint8_t curr_ttvn, old_ttvn;
struct batadv_orig_node *orig_node;
struct ethhdr *ethhdr;
@ -933,7 +933,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
int is_old_ttvn;
/* check if there is enough data before accessing it */
if (pskb_may_pull(skb, sizeof(*unicast_packet) + ETH_HLEN) < 0)
if (pskb_may_pull(skb, hdr_len + ETH_HLEN) < 0)
return 0;
/* create a copy of the skb (in case of for re-routing) to modify it. */
@ -941,7 +941,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv,
return 0;
unicast_packet = (struct batadv_unicast_packet *)skb->data;
ethhdr = (struct ethhdr *)(skb->data + sizeof(*unicast_packet));
ethhdr = (struct ethhdr *)(skb->data + hdr_len);
/* check if the destination client was served by this node and it is now
* roaming. In this case, it means that the node has got a ROAM_ADV
@ -1048,8 +1048,7 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
if (batadv_check_unicast_packet(bat_priv, skb, hdr_size) < 0)
return NET_RX_DROP;
if (!batadv_check_unicast_ttvn(bat_priv, skb))
if (!batadv_check_unicast_ttvn(bat_priv, skb, hdr_size))
return NET_RX_DROP;
/* packet for me */
@ -1093,7 +1092,7 @@ int batadv_recv_ucast_frag_packet(struct sk_buff *skb,
if (batadv_check_unicast_packet(bat_priv, skb, hdr_size) < 0)
return NET_RX_DROP;
if (!batadv_check_unicast_ttvn(bat_priv, skb))
if (!batadv_check_unicast_ttvn(bat_priv, skb, hdr_size))
return NET_RX_DROP;
unicast_packet = (struct batadv_unicast_frag_packet *)skb->data;