]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
chelsio/chtls: prevent potential integer overflow on 32bit
authorDan Carpenter <dan.carpenter@linaro.org>
Fri, 13 Dec 2024 09:47:27 +0000 (12:47 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 17 Dec 2024 02:08:11 +0000 (18:08 -0800)
The "gl->tot_len" variable is controlled by the user.  It comes from
process_responses().  On 32bit systems, the "gl->tot_len +
sizeof(struct cpl_pass_accept_req) + sizeof(struct rss_header)" addition
could have an integer wrapping bug.  Use size_add() to prevent this.

Fixes: a08943947873 ("crypto: chtls - Register chtls with net tls")
Cc: stable@vger.kernel.org
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/c6bfb23c-2db2-4e1b-b8ab-ba3925c82ef5@stanley.mountain
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_main.c

index 96fd31d75dfd942dd44a702cc8faec8ce79133da..daa1ebaef51120732110cfe19e8be5913b2f2b56 100644 (file)
@@ -346,8 +346,9 @@ static struct sk_buff *copy_gl_to_skb_pkt(const struct pkt_gl *gl,
         * driver. Once driver synthesizes cpl_pass_accept_req the skb will go
         * through the regular cpl_pass_accept_req processing in TOM.
         */
-       skb = alloc_skb(gl->tot_len + sizeof(struct cpl_pass_accept_req)
-                       - pktshift, GFP_ATOMIC);
+       skb = alloc_skb(size_add(gl->tot_len,
+                                sizeof(struct cpl_pass_accept_req)) -
+                       pktshift, GFP_ATOMIC);
        if (unlikely(!skb))
                return NULL;
        __skb_put(skb, gl->tot_len + sizeof(struct cpl_pass_accept_req)