]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: target: sbp: Potential integer overflow in sbp_make_tpg()
authorReBeating <rebeating@163.com>
Fri, 26 Dec 2025 03:19:36 +0000 (11:19 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 4 Jan 2026 20:44:17 +0000 (15:44 -0500)
The variable tpgt in sbp_make_tpg() is defined as unsigned long and is
assigned to tpgt->tport_tpgt, which is defined as u16. This may cause an
integer overflow when tpgt is greater than USHRT_MAX (65535). I haven't
tried to trigger it myself, but it is possible to trigger it by calling
sbp_make_tpg() with a large value for tpgt.

Modify the type of tpgt to match tpgt->tport_tpgt and adjusted the
relevant code accordingly.

This patch is similar to commit 59c816c1f24d ("vhost/scsi: potential
memory corruption").

Signed-off-by: ReBeating <rebeating@163.com>
Link: https://patch.msgid.link/20251226031936.852-1-rebeating@163.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/sbp/sbp_target.c

index 9f167ff8da7b070428f26f4bdbbdbbeabecd3c98..09120a538a401cf3f5fc532efc60ae98f61d59b8 100644 (file)
@@ -1960,12 +1960,12 @@ static struct se_portal_group *sbp_make_tpg(struct se_wwn *wwn,
                container_of(wwn, struct sbp_tport, tport_wwn);
 
        struct sbp_tpg *tpg;
-       unsigned long tpgt;
+       u16 tpgt;
        int ret;
 
        if (strstr(name, "tpgt_") != name)
                return ERR_PTR(-EINVAL);
-       if (kstrtoul(name + 5, 10, &tpgt) || tpgt > UINT_MAX)
+       if (kstrtou16(name + 5, 10, &tpgt))
                return ERR_PTR(-EINVAL);
 
        if (tport->tpg) {