diff mbox series

um: vector: fix return value check in vector_mmsg_rx

Message ID 20231007005104.3994678-1-make_ruc2021@163.com
State Changes Requested
Headers show
Series um: vector: fix return value check in vector_mmsg_rx | expand

Commit Message

Ma Ke Oct. 7, 2023, 12:51 a.m. UTC
In vector_mmsg_rx, to avoid an unexpected result returned by
pskb_trim, we should check the return value of pskb_trim().

Signed-off-by: Ma Ke <make_ruc2021@163.com>
---
 arch/um/drivers/vector_kern.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Anton Ivanov Oct. 7, 2023, 6:12 a.m. UTC | #1
On 07/10/2023 01:51, Ma Ke wrote:
> In vector_mmsg_rx, to avoid an unexpected result returned by
> pskb_trim, we should check the return value of pskb_trim().
> 
> Signed-off-by: Ma Ke <make_ruc2021@163.com>
> ---
>   arch/um/drivers/vector_kern.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
> index 131b7cb29576..c280ce5ea6ce 100644
> --- a/arch/um/drivers/vector_kern.c
> +++ b/arch/um/drivers/vector_kern.c
> @@ -1013,8 +1013,8 @@ static int vector_mmsg_rx(struct vector_private *vp, int budget)
>   					skb->ip_summed = CHECKSUM_UNNECESSARY;
>   				}
>   			}
> -			pskb_trim(skb,
> -				mmsg_vector->msg_len - vp->rx_header_size);
> +			if (pskb_trim(skb, mmsg_vector->msg_len - vp->rx_header_size))
> +				return 0;
>   			skb->protocol = eth_type_trans(skb, skb->dev);
>   			/*
>   			 * We do not need to lock on updating stats here

That does not look right. You can have errors when processing an 
individual packet. That is not a reason to bail and you should process 
the next ones. This way you just dropped the rest of the RX vector (up 
to 64 packets at default settings).
Johannes Berg Oct. 9, 2023, 7:31 a.m. UTC | #2
On Sat, 2023-10-07 at 08:51 +0800, Ma Ke wrote:
> In vector_mmsg_rx, to avoid an unexpected result returned by
> pskb_trim, we should check the return value of pskb_trim().

And how exactly do you propose pskb_trim() will return anything but 0 in
this scenario?

Please. If you have a static checker, _think_ about it's output before
blindly sending patches.

johannes
diff mbox series

Patch

diff --git a/arch/um/drivers/vector_kern.c b/arch/um/drivers/vector_kern.c
index 131b7cb29576..c280ce5ea6ce 100644
--- a/arch/um/drivers/vector_kern.c
+++ b/arch/um/drivers/vector_kern.c
@@ -1013,8 +1013,8 @@  static int vector_mmsg_rx(struct vector_private *vp, int budget)
 					skb->ip_summed = CHECKSUM_UNNECESSARY;
 				}
 			}
-			pskb_trim(skb,
-				mmsg_vector->msg_len - vp->rx_header_size);
+			if (pskb_trim(skb, mmsg_vector->msg_len - vp->rx_header_size))
+				return 0;
 			skb->protocol = eth_type_trans(skb, skb->dev);
 			/*
 			 * We do not need to lock on updating stats here