diff mbox series

sbp: potential integer overflow in sbp_make_tpg()

Message ID 20250415065744.719-1-chenyufeng@iie.ac.cn
State New
Headers show
Series sbp: potential integer overflow in sbp_make_tpg() | expand

Commit Message

Chen Yufeng April 15, 2025, 6:57 a.m. UTC
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.

I modified 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: Chen Yufeng <chenyufeng@iie.ac.cn>
---
 drivers/target/sbp/sbp_target.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 3b89b5a70331..ad03bf7929f8 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -1961,12 +1961,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) {