]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
staging: gdm724x: check for overflow in gdm_lte_netif_rx()
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 14 Jun 2021 09:58:36 +0000 (12:58 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:22:36 +0000 (16:22 +0200)
[ Upstream commit 7002b526f4ff1f6da34356e67085caafa6be383a ]

This code assumes that "len" is at least 62 bytes, but we need a check
to prevent a read overflow.

Fixes: 61e121047645 ("staging: gdm7240: adding LTE USB driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/YMcoTPsCYlhh2TQo@mwanda
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/staging/gdm724x/gdm_lte.c

index 1eacf82d1bd0fcc697b0e2f993c5e023d9144fcd..8561f7fb53e96a1a58dcfcc4da5f14af0046baf1 100644 (file)
@@ -624,10 +624,12 @@ static void gdm_lte_netif_rx(struct net_device *dev, char *buf,
                                                  * bytes (99,130,83,99 dec)
                                                  */
                        } __packed;
-                       void *addr = buf + sizeof(struct iphdr) +
-                               sizeof(struct udphdr) +
-                               offsetof(struct dhcp_packet, chaddr);
-                       ether_addr_copy(nic->dest_mac_addr, addr);
+                       int offset = sizeof(struct iphdr) +
+                                    sizeof(struct udphdr) +
+                                    offsetof(struct dhcp_packet, chaddr);
+                       if (offset + ETH_ALEN > len)
+                               return;
+                       ether_addr_copy(nic->dest_mac_addr, buf + offset);
                }
        }