From: Andrew Jeffery <andrew@codeconstruct.com.au>
To: Patrick Venture <venture@google.com>,
peter.maydell@linaro.org, clg@kaod.org,
steven_lee@aspeedtech.com, leetroy@gmail.com,
jamin_lin@aspeedtech.com, joel@jms.id.au
Cc: jasowang@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [PATCH] hw/net: ftgmac100: copy eth_hdr for alignment
Date: Fri, 28 Feb 2025 16:24:38 +1030 [thread overview]
Message-ID: <b300117fa0fc207eadccb663cdb043663ca79025.camel@codeconstruct.com.au> (raw)
In-Reply-To: <20250227154253.1653236-1-venture@google.com>
Hi Patrick,
On Thu, 2025-02-27 at 15:42 +0000, Patrick Venture wrote:
> eth_hdr requires 2 byte alignment
>
> Signed-off-by: Patrick Venture <venture@google.com>
> ---
> hw/net/ftgmac100.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c
> index 1f524d7a01..a33aaa01ee 100644
> --- a/hw/net/ftgmac100.c
> +++ b/hw/net/ftgmac100.c
> @@ -989,12 +989,16 @@ static void ftgmac100_high_write(void *opaque, hwaddr addr,
> static int ftgmac100_filter(FTGMAC100State *s, const uint8_t *buf, size_t len)
> {
> unsigned mcast_idx;
> + struct eth_header eth_hdr = {};
>
> if (s->maccr & FTGMAC100_MACCR_RX_ALL) {
> return 1;
> }
>
> - switch (get_eth_packet_type(PKT_GET_ETH_HDR(buf))) {
> + memcpy(ð_hdr, PKT_GET_ETH_HDR(buf),
> + (sizeof(eth_hdr) > len) ? len : sizeof(eth_hdr));
I don't think truncating the memcpy() in this way is what we want? The
switched value may not be meaningful for small values of len.
Perhaps return an error?
> +
> + switch (get_eth_packet_type(ð_hdr)) {
> case ETH_PKT_BCAST:
> if (!(s->maccr & FTGMAC100_MACCR_RX_BROADPKT)) {
> return 0;
> @@ -1028,6 +1032,7 @@ static ssize_t ftgmac100_receive(NetClientState *nc, const uint8_t *buf,
> {
> FTGMAC100State *s = FTGMAC100(qemu_get_nic_opaque(nc));
> FTGMAC100Desc bd;
> + struct eth_header eth_hdr = {};
> uint32_t flags = 0;
> uint64_t addr;
> uint32_t crc;
> @@ -1036,7 +1041,11 @@ static ssize_t ftgmac100_receive(NetClientState *nc, const uint8_t *buf,
> uint32_t buf_len;
> size_t size = len;
> uint32_t first = FTGMAC100_RXDES0_FRS;
> - uint16_t proto = be16_to_cpu(PKT_GET_ETH_HDR(buf)->h_proto);
> + uint16_t proto;
> +
> + memcpy(ð_hdr, PKT_GET_ETH_HDR(buf),
> + (sizeof(eth_hdr) > len) ? len : sizeof(eth_hdr));
Again here.
> + proto = be16_to_cpu(eth_hdr.h_proto);
> int max_frame_size = ftgmac100_max_frame_size(s, proto);
>
> if ((s->maccr & (FTGMAC100_MACCR_RXDMA_EN | FTGMAC100_MACCR_RXMAC_EN))
> @@ -1061,7 +1070,7 @@ static ssize_t ftgmac100_receive(NetClientState *nc, const uint8_t *buf,
> flags |= FTGMAC100_RXDES0_FTL;
> }
>
> - switch (get_eth_packet_type(PKT_GET_ETH_HDR(buf))) {
> + switch (get_eth_packet_type(ð_hdr)) {
> case ETH_PKT_BCAST:
> flags |= FTGMAC100_RXDES0_BROADCAST;
> break;
next prev parent reply other threads:[~2025-02-28 5:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-27 15:42 [PATCH] hw/net: ftgmac100: copy eth_hdr for alignment Patrick Venture
2025-02-28 5:54 ` Andrew Jeffery [this message]
2025-02-28 18:18 ` Patrick Venture
2025-03-03 11:17 ` Philippe Mathieu-Daudé
2025-03-03 11:46 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b300117fa0fc207eadccb663cdb043663ca79025.camel@codeconstruct.com.au \
--to=andrew@codeconstruct.com.au \
--cc=clg@kaod.org \
--cc=jamin_lin@aspeedtech.com \
--cc=jasowang@redhat.com \
--cc=joel@jms.id.au \
--cc=leetroy@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=steven_lee@aspeedtech.com \
--cc=venture@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.