2024-06-05 02:36:36

by Qingfang Deng

[permalink] [raw]
Subject: [PATCH 4.19.y] neighbour: fix unaligned access to pneigh_entry

From: Qingfang Deng <[email protected]>

[ Upstream commit ed779fe4c9b5a20b4ab4fd6f3e19807445bb78c7 ]

After the blamed commit, the member key is longer 4-byte aligned. On
platforms that do not support unaligned access, e.g., MIPS32R2 with
unaligned_action set to 1, this will trigger a crash when accessing
an IPv6 pneigh_entry, as the key is cast to an in6_addr pointer.

Change the type of the key to u32 to make it aligned.

Fixes: 62dd93181aaa ("[IPV6] NDISC: Set per-entry is_router flag in Proxy NA.")
Signed-off-by: Qingfang Deng <[email protected]>
---
include/net/neighbour.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index e58ef9e338de..4c53e51f0799 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -172,7 +172,7 @@ struct pneigh_entry {
possible_net_t net;
struct net_device *dev;
u8 flags;
- u8 key[0];
+ u32 key[0];
};

/*
--
2.34.1



2024-06-12 14:06:50

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH 4.19.y] neighbour: fix unaligned access to pneigh_entry

On Wed, Jun 05, 2024 at 10:29:16AM +0800, Qingfang Deng wrote:
> From: Qingfang Deng <[email protected]>
>
> [ Upstream commit ed779fe4c9b5a20b4ab4fd6f3e19807445bb78c7 ]
>
> After the blamed commit, the member key is longer 4-byte aligned. On
> platforms that do not support unaligned access, e.g., MIPS32R2 with
> unaligned_action set to 1, this will trigger a crash when accessing
> an IPv6 pneigh_entry, as the key is cast to an in6_addr pointer.
>
> Change the type of the key to u32 to make it aligned.
>
> Fixes: 62dd93181aaa ("[IPV6] NDISC: Set per-entry is_router flag in Proxy NA.")
> Signed-off-by: Qingfang Deng <[email protected]>
> ---
> include/net/neighbour.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/net/neighbour.h b/include/net/neighbour.h
> index e58ef9e338de..4c53e51f0799 100644
> --- a/include/net/neighbour.h
> +++ b/include/net/neighbour.h
> @@ -172,7 +172,7 @@ struct pneigh_entry {
> possible_net_t net;
> struct net_device *dev;
> u8 flags;
> - u8 key[0];
> + u32 key[0];
> };
>
> /*
> --
> 2.34.1
>
>

Now queued up, thanks.

greg k-h