Takashi Iwai 4566ee
From e6cfaf34be9fcd1a8285a294e18986bfc41a409c Mon Sep 17 00:00:00 2001
Takashi Iwai 4566ee
From: Linus Torvalds <torvalds@linux-foundation.org>
Takashi Iwai 4566ee
Date: Mon, 5 Dec 2022 11:33:40 -0800
Takashi Iwai 4566ee
Subject: [PATCH] proc: avoid integer type confusion in get_proc_long
Takashi Iwai 4566ee
Git-commit: e6cfaf34be9fcd1a8285a294e18986bfc41a409c
Takashi Iwai 4566ee
Patch-mainline: v6.1
Takashi Iwai cab6fa
References: CVE-2022-4378 bsc#1206207
Takashi Iwai 4566ee
Takashi Iwai 4566ee
proc_get_long() is passed a size_t, but then assigns it to an 'int'
Takashi Iwai 4566ee
variable for the length.  Let's not do that, even if our IO paths are
Takashi Iwai 4566ee
limited to MAX_RW_COUNT (exactly because of these kinds of type errors).
Takashi Iwai 4566ee
Takashi Iwai 4566ee
So do the proper test in the rigth type.
Takashi Iwai 4566ee
Takashi Iwai 4566ee
Reported-by: Kyle Zeng <zengyhkyle@gmail.com>
Takashi Iwai 4566ee
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Takashi Iwai 4566ee
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 4566ee
Takashi Iwai 4566ee
---
Takashi Iwai 4566ee
 kernel/sysctl.c | 5 ++---
Takashi Iwai 4566ee
 1 file changed, 2 insertions(+), 3 deletions(-)
Takashi Iwai 4566ee
Takashi Iwai 4566ee
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
Takashi Iwai 4566ee
index 188c305aeb8b..8898ddeaaf75 100644
Takashi Iwai 4566ee
--- a/kernel/sysctl.c
Takashi Iwai 4566ee
+++ b/kernel/sysctl.c
Takashi Iwai 4566ee
@@ -342,13 +342,12 @@ static int proc_get_long(char **buf, size_t *size,
Takashi Iwai 4566ee
 			  unsigned long *val, bool *neg,
Takashi Iwai 4566ee
 			  const char *perm_tr, unsigned perm_tr_len, char *tr)
Takashi Iwai 4566ee
 {
Takashi Iwai 4566ee
-	int len;
Takashi Iwai 4566ee
 	char *p, tmp[TMPBUFLEN];
Takashi Iwai 4566ee
+	ssize_t len = *size;
Takashi Iwai 4566ee
 
Takashi Iwai 4566ee
-	if (!*size)
Takashi Iwai 4566ee
+	if (len <= 0)
Takashi Iwai 4566ee
 		return -EINVAL;
Takashi Iwai 4566ee
 
Takashi Iwai 4566ee
-	len = *size;
Takashi Iwai 4566ee
 	if (len > TMPBUFLEN - 1)
Takashi Iwai 4566ee
 		len = TMPBUFLEN - 1;
Takashi Iwai 4566ee
 
Takashi Iwai 4566ee
-- 
Takashi Iwai 4566ee
2.35.3
Takashi Iwai 4566ee