From: Chris Leech <cleech@redhat.com>
To: Manish Chopra <manishc@marvell.com>
Cc: kuba@kernel.org, netdev@vger.kernel.org, aelior@marvell.com,
palok@marvell.com, njavali@marvell.com, skashyap@marvell.com,
jmeneghi@redhat.com, pabeni@redhat.com, edumazet@google.com,
horms@kernel.org, Yuval.Mintz@caviumnetworks.com,
Ram.Amrani@caviumnetworks.com,
"David S . Miller" <davem@davemloft.net>
Subject: Re: [PATCH net] qed: fix LL2 RX buffer allocation
Date: Mon, 16 Oct 2023 09:17:13 -0700 [thread overview]
Message-ID: <ZS1iCRGbxERNbfjV@rhel-developer-toolbox> (raw)
In-Reply-To: <20231013131812.873331-1-manishc@marvell.com>
On Fri, Oct 13, 2023 at 06:48:12PM +0530, Manish Chopra wrote:
> Driver allocates the LL2 rx buffers from kmalloc()
> area to construct the skb using slab_build_skb()
>
> The required size allocation seems to have overlooked
> for accounting both skb_shared_info size and device
> placement padding bytes which results into the below
> panic when doing skb_put() for a standard MTU sized frame.
>
> skbuff: skb_over_panic: text:ffffffffc0b0225f len:1514 put:1514
> head:ff3dabceaf39c000 data:ff3dabceaf39c042 tail:0x62c end:0x566
> dev:<NULL>
> …
> skb_panic+0x48/0x4a
> skb_put.cold+0x10/0x10
> qed_ll2b_complete_rx_packet+0x14f/0x260 [qed]
> qed_ll2_rxq_handle_completion.constprop.0+0x169/0x200 [qed]
> qed_ll2_rxq_completion+0xba/0x320 [qed]
> qed_int_sp_dpc+0x1a7/0x1e0 [qed]
>
> This patch fixes this by accouting skb_shared_info and device
> placement padding size bytes when allocating the buffers.
>
> Cc: David S. Miller <davem@davemloft.net>
> Fixes: 0a7fb11c23c0 ("qed: Add Light L2 support")
> Signed-off-by: Manish Chopra <manishc@marvell.com>
> ---
Ack. While normally build_skb will use the full slab object size
anyway, this skb_over_panic is seen when the buffer is allocated from a
kfence pool which changes the return value of ksize.
Reviewed-by: Chris Leech <cleech@redhat.com>
> drivers/net/ethernet/qlogic/qed/qed_ll2.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> index 717a0b3f89bd..ab5ef254a748 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> @@ -113,7 +113,10 @@ static void qed_ll2b_complete_tx_packet(void *cxt,
> static int qed_ll2_alloc_buffer(struct qed_dev *cdev,
> u8 **data, dma_addr_t *phys_addr)
> {
> - *data = kmalloc(cdev->ll2->rx_size, GFP_ATOMIC);
> + size_t size = cdev->ll2->rx_size + NET_SKB_PAD +
> + SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
> +
> + *data = kmalloc(size, GFP_ATOMIC);
> if (!(*data)) {
> DP_INFO(cdev, "Failed to allocate LL2 buffer data\n");
> return -ENOMEM;
> @@ -2589,7 +2592,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> INIT_LIST_HEAD(&cdev->ll2->list);
> spin_lock_init(&cdev->ll2->lock);
>
> - cdev->ll2->rx_size = NET_SKB_PAD + ETH_HLEN +
> + cdev->ll2->rx_size = PRM_DMA_PAD_BYTES_NUM + ETH_HLEN +
> L1_CACHE_BYTES + params->mtu;
>
> /* Allocate memory for LL2.
> --
> 2.27.0
>
prev parent reply other threads:[~2023-10-16 16:17 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-13 13:18 [PATCH net] qed: fix LL2 RX buffer allocation Manish Chopra
2023-10-15 13:30 ` patchwork-bot+netdevbpf
2023-10-16 16:17 ` Chris Leech [this message]
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=ZS1iCRGbxERNbfjV@rhel-developer-toolbox \
--to=cleech@redhat.com \
--cc=Ram.Amrani@caviumnetworks.com \
--cc=Yuval.Mintz@caviumnetworks.com \
--cc=aelior@marvell.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jmeneghi@redhat.com \
--cc=kuba@kernel.org \
--cc=manishc@marvell.com \
--cc=netdev@vger.kernel.org \
--cc=njavali@marvell.com \
--cc=pabeni@redhat.com \
--cc=palok@marvell.com \
--cc=skashyap@marvell.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.