* [PATCH net v3] liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet
@ 2024-06-05 10:11 Aleksandr Mishin
2024-06-07 13:32 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Aleksandr Mishin @ 2024-06-05 10:11 UTC (permalink / raw)
To: David S. Miller
Cc: Aleksandr Mishin, Simon Horman, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Kees Cook, Justin Stitt, Felix Manlunas,
Satanand Burla, Raghu Vatsavayi, Vijaya Mohan Guvva, netdev,
linux-kernel, lvc-project
In lio_vf_rep_copy_packet() pg_info->page is compared to a NULL value,
but then it is unconditionally passed to skb_add_rx_frag() which looks
strange and could lead to null pointer dereference.
lio_vf_rep_copy_packet() call trace looks like:
octeon_droq_process_packets
octeon_droq_fast_process_packets
octeon_droq_dispatch_pkt
octeon_create_recv_info
...search in the dispatch_list...
->disp_fn(rdisp->rinfo, ...)
lio_vf_rep_pkt_recv(struct octeon_recv_info *recv_info, ...)
In this path there is no code which sets pg_info->page to NULL.
So this check looks unneeded and doesn't solve potential problem.
But I guess the author had reason to add a check and I have no such card
and can't do real test.
In addition, the code in the function liquidio_push_packet() in
liquidio/lio_core.c does exactly the same.
Based on this, I consider the most acceptable compromise solution to
adjust this issue by moving skb_add_rx_frag() into conditional scope.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 1f233f327913 ("liquidio: switchdev support for LiquidIO NIC")
Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
Reviewed-by: Simon Horman <horms@kernel.org>
---
v1->v2: Fix incorrect 'Fixes' tag format
v2->v3: Add explanation why this should be fixed,
add Reviewed-by: Simon Horman <horms@kernel.org>
(https://lore.kernel.org/all/20240308201911.GB603911@kernel.org/)
drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
index aa6c0dfb6f1c..e26b4ed33dc8 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
@@ -272,13 +272,12 @@ lio_vf_rep_copy_packet(struct octeon_device *oct,
pg_info->page_offset;
memcpy(skb->data, va, MIN_SKB_SIZE);
skb_put(skb, MIN_SKB_SIZE);
+ skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
+ pg_info->page,
+ pg_info->page_offset + MIN_SKB_SIZE,
+ len - MIN_SKB_SIZE,
+ LIO_RXBUFFER_SZ);
}
-
- skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
- pg_info->page,
- pg_info->page_offset + MIN_SKB_SIZE,
- len - MIN_SKB_SIZE,
- LIO_RXBUFFER_SZ);
} else {
struct octeon_skb_page_info *pg_info =
((struct octeon_skb_page_info *)(skb->cb));
--
2.30.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net v3] liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet
2024-06-05 10:11 [PATCH net v3] liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet Aleksandr Mishin
@ 2024-06-07 13:32 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-06-07 13:32 UTC (permalink / raw)
To: Aleksandr Mishin
Cc: davem, horms, edumazet, kuba, pabeni, keescook, justinstitt,
felix.manlunas, satananda.burla, raghu.vatsavayi, vijaya.guvva,
netdev, linux-kernel, lvc-project
Hello:
This patch was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:
On Wed, 5 Jun 2024 13:11:35 +0300 you wrote:
> In lio_vf_rep_copy_packet() pg_info->page is compared to a NULL value,
> but then it is unconditionally passed to skb_add_rx_frag() which looks
> strange and could lead to null pointer dereference.
>
> lio_vf_rep_copy_packet() call trace looks like:
> octeon_droq_process_packets
> octeon_droq_fast_process_packets
> octeon_droq_dispatch_pkt
> octeon_create_recv_info
> ...search in the dispatch_list...
> ->disp_fn(rdisp->rinfo, ...)
> lio_vf_rep_pkt_recv(struct octeon_recv_info *recv_info, ...)
> In this path there is no code which sets pg_info->page to NULL.
> So this check looks unneeded and doesn't solve potential problem.
> But I guess the author had reason to add a check and I have no such card
> and can't do real test.
> In addition, the code in the function liquidio_push_packet() in
> liquidio/lio_core.c does exactly the same.
>
> [...]
Here is the summary with links:
- [net,v3] liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet
https://git.kernel.org/netdev/net/c/c44711b78608
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-07 13:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-05 10:11 [PATCH net v3] liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet Aleksandr Mishin
2024-06-07 13:32 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox