net: ipa: skip SKB copy if no netdev
authorAlex Elder <elder@linaro.org>
Wed, 24 Nov 2021 20:25:09 +0000 (14:25 -0600)
committerJakub Kicinski <kuba@kernel.org>
Fri, 26 Nov 2021 03:37:34 +0000 (19:37 -0800)
In ipa_endpoint_skb_copy(), a new socket buffer structure is
allocated so that some data can be copied into it.  However, after
doing this, if the endpoint has a null netdev pointer, we just drop
free the socket buffer.

Instead, check endpoint->netdev pointer first, and just return early
if it's null.  Also return early if the SKB allocation fails, to
avoid the deeper indentation in the normal path.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ipa/ipa_endpoint.c

index eeb9f082a0e4c4f0c72f7b9583c5c5bf2c90d8ed..fba576a7717fa74b01f90b2eb8e24b2cc7b9edc1 100644 (file)
@@ -1153,18 +1153,19 @@ static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint,
 {
        struct sk_buff *skb;
 
+       if (!endpoint->netdev)
+               return;
+
        skb = __dev_alloc_skb(len, GFP_ATOMIC);
-       if (skb) {
-               skb_put(skb, len);
-               memcpy(skb->data, data, len);
-               skb->truesize += extra;
-       }
+       if (!skb)
+               return;
 
-       /* Now receive it, or drop it if there's no netdev */
-       if (endpoint->netdev)
-               ipa_modem_skb_rx(endpoint->netdev, skb);
-       else if (skb)
-               dev_kfree_skb_any(skb);
+       /* Copy the data into the socket buffer and receive it */
+       skb_put(skb, len);
+       memcpy(skb->data, data, len);
+       skb->truesize += extra;
+
+       ipa_modem_skb_rx(endpoint->netdev, skb);
 }
 
 static bool ipa_endpoint_skb_build(struct ipa_endpoint *endpoint,