batman-adv: Reserve extra bytes in skb for better alignment
The ethernet header is 14 bytes long. Therefore, the data after it is not 4 byte aligned and may cause problems on systems without unaligned data access. Reserving NET_IP_ALIGN more byes can fix the misalignment of the ethernet header. Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
This commit is contained in:

committed by
Antonio Quartulli

parent
6f0a0986e3
commit
5b24657443
@@ -396,12 +396,12 @@ batadv_add_packet(struct batadv_priv *bat_priv,
|
||||
return NULL;
|
||||
|
||||
len = sizeof(*packet) + vis_info_len;
|
||||
info->skb_packet = dev_alloc_skb(len + ETH_HLEN);
|
||||
info->skb_packet = dev_alloc_skb(len + ETH_HLEN + NET_IP_ALIGN);
|
||||
if (!info->skb_packet) {
|
||||
kfree(info);
|
||||
return NULL;
|
||||
}
|
||||
skb_reserve(info->skb_packet, ETH_HLEN);
|
||||
skb_reserve(info->skb_packet, ETH_HLEN + NET_IP_ALIGN);
|
||||
packet = (struct batadv_vis_packet *)skb_put(info->skb_packet, len);
|
||||
|
||||
kref_init(&info->refcount);
|
||||
@@ -873,12 +873,13 @@ int batadv_vis_init(struct batadv_priv *bat_priv)
|
||||
if (!bat_priv->vis.my_info)
|
||||
goto err;
|
||||
|
||||
len = sizeof(*packet) + BATADV_MAX_VIS_PACKET_SIZE + ETH_HLEN;
|
||||
len = sizeof(*packet) + BATADV_MAX_VIS_PACKET_SIZE;
|
||||
len += ETH_HLEN + NET_IP_ALIGN;
|
||||
bat_priv->vis.my_info->skb_packet = dev_alloc_skb(len);
|
||||
if (!bat_priv->vis.my_info->skb_packet)
|
||||
goto free_info;
|
||||
|
||||
skb_reserve(bat_priv->vis.my_info->skb_packet, ETH_HLEN);
|
||||
skb_reserve(bat_priv->vis.my_info->skb_packet, ETH_HLEN + NET_IP_ALIGN);
|
||||
tmp_skb = bat_priv->vis.my_info->skb_packet;
|
||||
packet = (struct batadv_vis_packet *)skb_put(tmp_skb, sizeof(*packet));
|
||||
|
||||
|
Reference in New Issue
Block a user