net: qualcomm: rmnet: fix two pointer math bugs
authorDan Carpenter <dan.carpenter@oracle.com>
Sat, 19 Jun 2021 13:52:22 +0000 (16:52 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 21 Jun 2021 19:19:19 +0000 (12:19 -0700)
We recently changed these two pointers from void pointers to struct
pointers and it breaks the pointer math so now the "txphdr" points
beyond the end of the buffer.

Fixes: 56a967c4f7e5 ("net: qualcomm: rmnet: Remove some unneeded casts")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c

index 3ee5c1a..3676976 100644 (file)
@@ -168,7 +168,7 @@ static void rmnet_map_complement_ipv4_txporthdr_csum_field(struct iphdr *ip4h)
        void *txphdr;
        u16 *csum;
 
-       txphdr = ip4h + ip4h->ihl * 4;
+       txphdr = (void *)ip4h + ip4h->ihl * 4;
 
        if (ip4h->protocol == IPPROTO_TCP || ip4h->protocol == IPPROTO_UDP) {
                csum = (u16 *)rmnet_map_get_csum_field(ip4h->protocol, txphdr);
@@ -203,7 +203,7 @@ rmnet_map_complement_ipv6_txporthdr_csum_field(struct ipv6hdr *ip6h)
        void *txphdr;
        u16 *csum;
 
-       txphdr = ip6h + sizeof(struct ipv6hdr);
+       txphdr = ip6h + 1;
 
        if (ip6h->nexthdr == IPPROTO_TCP || ip6h->nexthdr == IPPROTO_UDP) {
                csum = (u16 *)rmnet_map_get_csum_field(ip6h->nexthdr, txphdr);