]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dlink: handle copy_thresh allocation failure
authorYeounsu Moon <yyyynoom@gmail.com>
Sun, 28 Sep 2025 19:01:24 +0000 (04:01 +0900)
committerJakub Kicinski <kuba@kernel.org>
Tue, 30 Sep 2025 01:47:49 +0000 (18:47 -0700)
The driver did not handle failure of `netdev_alloc_skb_ip_align()`.
If the allocation failed, dereferencing `skb->protocol` could lead to
a NULL pointer dereference.

This patch tries to allocate `skb`. If the allocation fails, it falls
back to the normal path.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Tested-on: D-Link DGE-550T Rev-A3
Signed-off-by: Yeounsu Moon <yyyynoom@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20250928190124.1156-1-yyyynoom@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/dlink/dl2k.c

index 6bbf6e5584e54f70aae7738cd9c70341a948deba..1996d2e4e3e2c97eccbfa9c217a70123883c6248 100644 (file)
@@ -964,15 +964,18 @@ receive_packet (struct net_device *dev)
                } else {
                        struct sk_buff *skb;
 
+                       skb = NULL;
                        /* Small skbuffs for short packets */
-                       if (pkt_len > copy_thresh) {
+                       if (pkt_len <= copy_thresh)
+                               skb = netdev_alloc_skb_ip_align(dev, pkt_len);
+                       if (!skb) {
                                dma_unmap_single(&np->pdev->dev,
                                                 desc_to_dma(desc),
                                                 np->rx_buf_sz,
                                                 DMA_FROM_DEVICE);
                                skb_put (skb = np->rx_skbuff[entry], pkt_len);
                                np->rx_skbuff[entry] = NULL;
-                       } else if ((skb = netdev_alloc_skb_ip_align(dev, pkt_len))) {
+                       } else {
                                dma_sync_single_for_cpu(&np->pdev->dev,
                                                        desc_to_dma(desc),
                                                        np->rx_buf_sz,