batman-adv: fix size of batadv_icmp_header
struct batadv_icmp_header currently has a size of 17, which will be padded to 20 on some architectures. Fix this by unrolling the header into the parent structures. Moreover keep the ICMP parsing functions as generic as they are now by using a stub icmp_header struct during packet parsing. Signed-off-by: Antonio Quartulli <antonio@meshcoding.com> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
This commit is contained in:
@@ -338,9 +338,9 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
|
||||
icmp_packet = (struct batadv_icmp_packet *)skb->data;
|
||||
|
||||
/* send TTL exceeded if packet is an echo request (traceroute) */
|
||||
if (icmp_packet->icmph.msg_type != BATADV_ECHO_REQUEST) {
|
||||
if (icmp_packet->msg_type != BATADV_ECHO_REQUEST) {
|
||||
pr_debug("Warning - can't forward icmp packet from %pM to %pM: ttl exceeded\n",
|
||||
icmp_packet->icmph.orig, icmp_packet->icmph.dst);
|
||||
icmp_packet->orig, icmp_packet->dst);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
|
||||
goto out;
|
||||
|
||||
/* get routing information */
|
||||
orig_node = batadv_orig_hash_find(bat_priv, icmp_packet->icmph.orig);
|
||||
orig_node = batadv_orig_hash_find(bat_priv, icmp_packet->orig);
|
||||
if (!orig_node)
|
||||
goto out;
|
||||
|
||||
@@ -359,11 +359,11 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
|
||||
|
||||
icmp_packet = (struct batadv_icmp_packet *)skb->data;
|
||||
|
||||
memcpy(icmp_packet->icmph.dst, icmp_packet->icmph.orig, ETH_ALEN);
|
||||
memcpy(icmp_packet->icmph.orig, primary_if->net_dev->dev_addr,
|
||||
memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
|
||||
memcpy(icmp_packet->orig, primary_if->net_dev->dev_addr,
|
||||
ETH_ALEN);
|
||||
icmp_packet->icmph.msg_type = BATADV_TTL_EXCEEDED;
|
||||
icmp_packet->icmph.ttl = BATADV_TTL;
|
||||
icmp_packet->msg_type = BATADV_TTL_EXCEEDED;
|
||||
icmp_packet->ttl = BATADV_TTL;
|
||||
|
||||
if (batadv_send_skb_to_orig(skb, orig_node, NULL) != NET_XMIT_DROP)
|
||||
ret = NET_RX_SUCCESS;
|
||||
|
Verwijs in nieuw issue
Block a user