diff mbox series

scsi: ufs: fix memory boundary check for UFS 3.0

Message ID 20201211193814.1709484-1-jaegeuk@kernel.org
State New
Headers show
Series scsi: ufs: fix memory boundary check for UFS 3.0 | expand

Commit Message

Jaegeuk Kim Dec. 11, 2020, 7:38 p.m. UTC
From: Jaegeuk Kim <jaegeuk@google.com>

If param_offset is greater than what UFS supports, it'll give kernel panic.

Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
Change-Id: I48ea6f3f3074bd42abf4ecf8be87806732f3e6a3
---
 drivers/scsi/ufs/ufshcd.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Eric Biggers Dec. 11, 2020, 8:43 p.m. UTC | #1
On Fri, Dec 11, 2020 at 11:38:14AM -0800, Jaegeuk Kim wrote:
> From: Jaegeuk Kim <jaegeuk@google.com>
> 
> If param_offset is greater than what UFS supports, it'll give kernel panic.
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
> Change-Id: I48ea6f3f3074bd42abf4ecf8be87806732f3e6a3
> ---
>  drivers/scsi/ufs/ufshcd.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index d6a3a0ba6960..04687661d0df 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -3194,6 +3194,9 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
>  		return -EINVAL;
>  	}
>  
> +	if (param_offset > buff_len)
> +		return -EINVAL;
> +
>  	/* Check whether we need temp memory */
>  	if (param_offset != 0 || param_size < buff_len) {
>  		desc_buf = kmalloc(buff_len, GFP_KERNEL);
> -- 

Didn't this already get fixed by:

	commit 1699f980d87fb678a669490462cf0b9517c1fb47
	Author: Can Guo <cang@codeaurora.org>
	Date:   Wed Oct 21 22:59:00 2020 -0700

	    scsi: ufs: Fix unexpected values from ufshcd_read_desc_param()
diff mbox series

Patch

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index d6a3a0ba6960..04687661d0df 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -3194,6 +3194,9 @@  int ufshcd_read_desc_param(struct ufs_hba *hba,
 		return -EINVAL;
 	}
 
+	if (param_offset > buff_len)
+		return -EINVAL;
+
 	/* Check whether we need temp memory */
 	if (param_offset != 0 || param_size < buff_len) {
 		desc_buf = kmalloc(buff_len, GFP_KERNEL);