mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
batman-adv: dat: avoid unaligned fault in IP extraction
Independent of the alignment of the ARP packet in the SKB, either the
batadv_arp_ip_src or the batadv_arp_ip_dst will have an unaligned access
(on HW without native unaligned read support).
Use get_unaligned() to handle this properly on all architectures.
Cc: stable@vger.kernel.org
Reported-by: Sashiko <sashiko-bot@kernel.org>
Fixes: 5c3a0e5535 ("batman-adv: Distributed ARP Table - add ARP parsing functions")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
parent
89f3502ff6
commit
0121afa52c
|
|
@ -316,7 +316,10 @@ static u8 *batadv_arp_hw_src(struct sk_buff *skb, int hdr_size)
|
|||
*/
|
||||
static __be32 batadv_arp_ip_src(struct sk_buff *skb, int hdr_size)
|
||||
{
|
||||
return *(__force __be32 *)(batadv_arp_hw_src(skb, hdr_size) + ETH_ALEN);
|
||||
u8 *src = batadv_arp_hw_src(skb, hdr_size) + ETH_ALEN;
|
||||
__be32 *ip = (__force __be32 *)src;
|
||||
|
||||
return get_unaligned(ip);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -341,8 +344,9 @@ static u8 *batadv_arp_hw_dst(struct sk_buff *skb, int hdr_size)
|
|||
static __be32 batadv_arp_ip_dst(struct sk_buff *skb, int hdr_size)
|
||||
{
|
||||
u8 *dst = batadv_arp_hw_src(skb, hdr_size) + ETH_ALEN * 2 + 4;
|
||||
__be32 *ip = (__force __be32 *)dst;
|
||||
|
||||
return *(__force __be32 *)dst;
|
||||
return get_unaligned(ip);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user