Commit 50853c0e authored by Justin Tee's avatar Justin Tee Committed by Yong Hu
Browse files

scsi: lpfc: Prevent lpfc_debugfs_lockstat_write() buffer overflow

stable inclusion
from stable-v5.10.181
commit e0e7faee3a7dd6f51350cda64997116a247eb045
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7ZCDZ
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.10.197&id=e0e7faee3a7dd6f51350cda64997116a247eb045

--------------------------------

[ Upstream commit c6087b82 ]

A static code analysis tool flagged the possibility of buffer overflow when
using copy_from_user() for a debugfs entry.

Currently, it is possible that copy_from_user() copies more bytes than what
would fit in the mybuf char array.  Add a min() restriction check between
sizeof(mybuf) - 1 and nbytes passed from the userspace buffer to protect
against buffer overflow.

Link: https://lore.kernel.org/r/20230301231626.9621-2-justintee8345@gmail.com


Signed-off-by: default avatarJustin Tee <justin.tee@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarYong Hu <yong.hu@windriver.com>
parent 53032b02
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2159,10 +2159,13 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf,
	char mybuf[64];
	char *pbuf;
	int i;
	size_t bsize;

	memset(mybuf, 0, sizeof(mybuf));

	if (copy_from_user(mybuf, buf, nbytes))
	bsize = min(nbytes, (sizeof(mybuf) - 1));

	if (copy_from_user(mybuf, buf, bsize))
		return -EFAULT;
	pbuf = &mybuf[0];

@@ -2183,7 +2186,7 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf,
			qp->lock_conflict.wq_access = 0;
		}
	}
	return nbytes;
	return bsize;
}
#endif