lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 12 Oct 2022 14:54:54 +0200
From:   Christian Marangi <ansuelsmth@...il.com>
To:     Andrew Lunn <andrew@...n.ch>
Cc:     Vivien Didelot <vivien.didelot@...il.com>,
        Florian Fainelli <f.fainelli@...il.com>,
        Vladimir Oltean <olteanv@...il.com>,
        "David S. Miller" <davem@...emloft.net>,
        Eric Dumazet <edumazet@...gle.com>,
        Jakub Kicinski <kuba@...nel.org>,
        Paolo Abeni <pabeni@...hat.com>,
        "Russell King (Oracle)" <rmk+kernel@...linux.org.uk>,
        netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
        Pawel Dembicki <paweldembicki@...il.com>,
        Lech Perczak <lech.perczak@...il.com>
Subject: Re: [net PATCH 1/2] net: dsa: qca8k: fix inband mgmt for big-endian
 systems

On Wed, Oct 12, 2022 at 02:42:16PM +0200, Andrew Lunn wrote:
> On Mon, Oct 10, 2022 at 01:14:58PM +0200, Christian Marangi wrote:
> > The header and the data of the skb for the inband mgmt requires
> > to be in little-endian. This is problematic for big-endian system
> > as the mgmt header is written in the cpu byte order.
> > 
> > Fix this by converting each value for the mgmt header and data to
> > little-endian, and convert to cpu byte order the mgmt header and
> > data sent by the switch.
> > 
> > Fixes: 5950c7c0a68c ("net: dsa: qca8k: add support for mgmt read/write in Ethernet packet")
> > Tested-by: Pawel Dembicki <paweldembicki@...il.com>
> > Tested-by: Lech Perczak <lech.perczak@...il.com>
> > Signed-off-by: Christian Marangi <ansuelsmth@...il.com>
> > Reviewed-by: Lech Perczak <lech.perczak@...il.com>
> > ---
> >  drivers/net/dsa/qca/qca8k-8xxx.c | 63 ++++++++++++++++++++++++--------
> >  include/linux/dsa/tag_qca.h      |  6 +--
> >  2 files changed, 50 insertions(+), 19 deletions(-)
> > 
> > diff --git a/drivers/net/dsa/qca/qca8k-8xxx.c b/drivers/net/dsa/qca/qca8k-8xxx.c
> > index 5669c92c93f7..4bb9b7eac68b 100644
> > --- a/drivers/net/dsa/qca/qca8k-8xxx.c
> > +++ b/drivers/net/dsa/qca/qca8k-8xxx.c
> > @@ -137,27 +137,42 @@ static void qca8k_rw_reg_ack_handler(struct dsa_switch *ds, struct sk_buff *skb)
> >  	struct qca8k_mgmt_eth_data *mgmt_eth_data;
> >  	struct qca8k_priv *priv = ds->priv;
> >  	struct qca_mgmt_ethhdr *mgmt_ethhdr;
> > +	u32 command;
> >  	u8 len, cmd;
> > +	int i;
> >  
> >  	mgmt_ethhdr = (struct qca_mgmt_ethhdr *)skb_mac_header(skb);
> >  	mgmt_eth_data = &priv->mgmt_eth_data;
> >  
> > -	cmd = FIELD_GET(QCA_HDR_MGMT_CMD, mgmt_ethhdr->command);
> > -	len = FIELD_GET(QCA_HDR_MGMT_LENGTH, mgmt_ethhdr->command);
> > +	command = le32_to_cpu(mgmt_ethhdr->command);
> > +	cmd = FIELD_GET(QCA_HDR_MGMT_CMD, command);
> > +	len = FIELD_GET(QCA_HDR_MGMT_LENGTH, command);
> 
> Humm...
> 
> This might have the same alignment issue as the second patch. In fact,
> because the Ethernet header is 14 bytes in size, it is often
> deliberately out of alignment by 2 bytes, so that the IP header is
> aligned. You should probably be using get_unaligned_le32() when
> accessing members of mgmt_ethhdr.
> 
> 	  Andrew

Should I replace everything to get_unaligned_le32? Or this is only
needed for the mgmt_ethhdr as it's 12 bytes?

The skb data is all 32 bit contiguous stuff so it should be safe? Or
should we treat that also as unalligned just to make sure?

Same question for patch 2. the rest of the mib in skb data are all 32 or
64 values contiguous so wonder if we just take extra care of the
mgmt_ethhdr. 

-- 
	Ansuel

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ