]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: libfc: Prevent integer overflow in fc_fcp_recv_data()
authorDan Carpenter <dan.carpenter@linaro.org>
Tue, 30 Sep 2025 12:38:09 +0000 (15:38 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 7 Oct 2025 02:27:28 +0000 (22:27 -0400)
The "offset" comes from the skb->data that we received.  Here the code
is verifying that "offset + len" is within bounds however it does not
take integer overflows into account.  Use size_add() to be safe.

This would only be an issue on 32bit systems which are probably a very
small percent of the users.  Still, it's worth fixing just for
correctness sake.

Fixes: 42e9a92fe6a9 ("[SCSI] libfc: A modular Fibre Channel library")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Message-Id: <aNvPMet7TPtM9CY1@stanley.mountain>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libfc/fc_fcp.c

index 16d0f02af1e40c9c57a28630ae7bf339fd0bbbe7..31d08c115521054d021f7d745d9e3463c3acb23f 100644 (file)
@@ -503,7 +503,7 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
                host_bcode = FC_ERROR;
                goto err;
        }
-       if (offset + len > fsp->data_len) {
+       if (size_add(offset, len) > fsp->data_len) {
                /* this should never happen */
                if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) &&
                    fc_frame_crc_check(fp))