dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Mina Almasry" <almasrymina@google.com>, dri-devel@lists.freedesktop.org
Cc: media-ci@linuxtv.org
Subject: Re: [PATCH net v4 3/4] netdevsim: support devmem RX and TX bindings
Date: Fri, 16 Oct 2026 16:39:25 +0000	[thread overview]
Message-ID: <sashiko-outbox-174653@kernel.org> (raw)
In-Reply-To: <20261015163915.1166043-4-almasrymina@google.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] netdevsim: NULL pointer dereference in nsim_pp_hold_write() for VFs
- [High] net: OOB access in nsim_do_psp() due to missing pskb_may_pull()
- [Medium] bus: missing return value check for dma_coerce_mask_and_coherent()
--

commit 4175c230c938d97450e1b621f172ccd40a24af4d
Author: Mina Almasry <almasrymina@google.com>

netdevsim: support devmem RX and TX bindings

Set a 64-bit DMA mask on nsim_bus_dev, enable NETMEM_TX_DMA on the
netdevsim net_device, and configure page_pool instances so devmem bind-rx
and bind-tx netlink operations can be tested against netdevsim.

> diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c
> --- a/drivers/net/netdevsim/bus.c
> +++ b/drivers/net/netdevsim/bus.c
> @@ -462,6 +462,7 @@ nsim_bus_dev_new(unsigned int id, unsigned int port_count, unsigned int num_queu
>  	nsim_bus_dev->port_count = port_count;
>  	nsim_bus_dev->num_queues = num_queues;
>  	nsim_bus_dev->initial_net = current->nsproxy->net_ns;
> +	dma_coerce_mask_and_coherent(&nsim_bus_dev->dev, DMA_BIT_MASK(64));

[Severity: Medium]
Does the return value of dma_coerce_mask_and_coherent() need to be checked 
here? If the platform rejects the requested 64-bit DMA mask, this function 
can return a negative error code. This might later cause page_pool_create() 
to fail or trigger silent DMA mapping issues when setting up the queues.

>  	/* Disallow using nsim_bus_dev */
>  	smp_store_release(&nsim_bus_dev->init, false);

[ ... ]

> diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c
> --- a/drivers/net/netdevsim/netdev.c
> +++ b/drivers/net/netdevsim/netdev.c
[ ... ]
> @@ -929,12 +939,15 @@ nsim_pp_hold_write(struct file *file, const char __user *data,
>  		return ret;
>  
>  	rtnl_lock();
> +	netdev_lock(ns->netdev);
>  	ret = count;
>  	if (val == !!ns->page)
>  		goto exit;
>  
>  	if (!netif_running(ns->netdev) && val) {
>  		ret = -ENETDOWN;
> +	} else if (val && page_pool_is_unreadable(ns->rq[0]->page_pool)) {

[Severity: High]
Could this lead to a NULL pointer dereference for VFs?

When a VF is initialized, nsim_init_netdevsim_vf() is called instead of
nsim_init_netdevsim(). This bypasses nsim_queue_init(), leaving ns->rq as
NULL. Since the 'pp_hold' debugfs file is created unconditionally, writing
'1' to it for a VF interface could reach this code and dereference
ns->rq[0] while ns->rq itself is NULL.

> +		ret = -EOPNOTSUPP;
>  	} else if (val) {
>  		ns->page = page_pool_dev_alloc_pages(ns->rq[0]->page_pool);

[ ... ]

> diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c
> --- a/drivers/net/netdevsim/psp.c
> +++ b/drivers/net/netdevsim/psp.c
> @@ -86,6 +86,11 @@ nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns,
>  		__wsum csum;
>  		int udplen;
>  
> +		if (!skb_frags_readable(skb)) {
> +			rc = SKB_DROP_REASON_PSP_OUTPUT;
> +			goto out_unlock;
> +		}
> +
>  		/* Do not decapsulate. Receive the skb with the udp and psp
>  		 * headers still there as if this is a normal udp packet.
>  		 * psp_dev_encapsulate() sets udp checksum to 0, so we need to
>  		 * provide a valid checksum here, so the skb isn't dropped.
>  		 */
>  		uh = udp_hdr(skb);
>  		udplen = udp_get_len(skb, uh, skb_transport_offset(skb));
>  		csum = skb_checksum(skb, skb_transport_offset(skb),
>  				    udplen, 0);
>  
>  		switch (skb->protocol) {
>  		case htons(ETH_P_IP):
>  			iph = ip_hdr(skb);

[Severity: High]
Is it safe to directly access udp_hdr(skb) and ip_hdr(skb) here without
first verifying that the transport and network headers are in the linear
data region?

If the packet headers reside in paged fragments (for instance, if injected
via AF_PACKET, since the netdevsim device advertises NETIF_F_SG), this
might lead to an out-of-bounds memory access. Could a call to
pskb_may_pull() be needed before accessing these header pointers?

>  			uh->check = udp_v4_check(udplen, iph->saddr,
>  						 iph->daddr, csum);
>  			break;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261015163915.1166043-1-almasrymina@google.com?part=3

  parent reply	other threads:[~2026-10-16 16:39 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-15 16:39 [PATCH net v4 0/4] net: devmem: fix RX and TX binding teardown on device unregistration Mina Almasry
2026-10-15 16:39 ` [PATCH net v4 1/4] net: devmem: unmap dma_buf synchronously on queue uninstall Mina Almasry
2026-10-15 21:34   ` Stanislav Fomichev
2026-10-16 16:39   ` sashiko-bot
2026-10-16 20:00     ` Mina Almasry
2026-10-18 16:01   ` netdev-bot+sashiko
2026-10-15 16:39 ` [PATCH net v4 2/4] net: devmem: detach TX bindings on NETDEV_UNREGISTER Mina Almasry
2026-10-15 21:34   ` Stanislav Fomichev
2026-10-18 16:01   ` netdev-bot+sashiko
2026-10-15 16:39 ` [PATCH net v4 3/4] netdevsim: support devmem RX and TX bindings Mina Almasry
2026-10-15 21:34   ` Stanislav Fomichev
2026-10-16 16:39   ` sashiko-bot [this message]
2026-10-16 20:01     ` Mina Almasry
2026-10-18 16:01   ` netdev-bot+sashiko
2026-10-19 16:10     ` Mina Almasry
2026-10-20 19:18   ` Jakub Kicinski
2026-10-21  6:17     ` Mina Almasry
2026-10-21 20:23       ` Jakub Kicinski
2026-10-22 15:41         ` Mina Almasry
2026-10-23  1:19           ` Jakub Kicinski
2026-10-23 20:01             ` Mina Almasry
2026-10-15 16:39 ` [PATCH net v4 4/4] selftests: net: add devmem RX and TX netdev unregister tests Mina Almasry
2026-10-15 21:34   ` Stanislav Fomichev
2026-10-20 19:16 ` [PATCH net v4 0/4] net: devmem: fix RX and TX binding teardown on device unregistration Jakub Kicinski

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=sashiko-outbox-174653@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=almasrymina@google.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=media-ci@linuxtv.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox