RE: [PATCH net-next] net: enetc: use get/put_unaligned() for mac address handling

From: Claudiu Manoil
Date: Fri Jun 04 2021 - 09:35:00 EST



> -----Original Message-----
> From: Heiner Kallweit <hkallweit1@xxxxxxxxx>
> Sent: Friday, June 4, 2021 3:44 PM
[...]
>
> On 04.06.2021 14:30, Michael Walle wrote:
> > The supplied buffer for the MAC address might not be aligned. Thus
> > doing a 32bit (or 16bit) access could be on an unaligned address. For
> > now, enetc is only used on aarch64 which can do unaligned accesses, thus
> > there is no error. In any case, be correct and use the get/put_unaligned()
> > helpers.
> >
> > Signed-off-by: Michael Walle <michael@xxxxxxxx>
> > ---
> > drivers/net/ethernet/freescale/enetc/enetc_pf.c | 9 +++++----
> > 1 file changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> > index 31274325159a..a96d2acb5e11 100644
> > --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> > +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> > @@ -1,6 +1,7 @@
> > // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> > /* Copyright 2017-2019 NXP */
> >
> > +#include <asm/unaligned.h>
> > #include <linux/mdio.h>
> > #include <linux/module.h>
> > #include <linux/fsl/enetc_mdio.h>
> > @@ -17,15 +18,15 @@ static void enetc_pf_get_primary_mac_addr(struct
> enetc_hw *hw, int si, u8 *addr)
> > u32 upper = __raw_readl(hw->port + ENETC_PSIPMAR0(si));
> > u16 lower = __raw_readw(hw->port + ENETC_PSIPMAR1(si));
> >
> > - *(u32 *)addr = upper;
> > - *(u16 *)(addr + 4) = lower;
> > + put_unaligned(upper, (u32 *)addr);
> > + put_unaligned(lower, (u16 *)(addr + 4));
>
> I think you want to write little endian, therefore on a BE platform
> this code may be wrong. Better use put_unaligned_le32?
> By using these versions of the unaligned helpers you could also
> remove the pointer cast.
>

+1