Skip to contentSkip to conversation

printk: Fix bounds checking for log_prefix.

PATCH Superseded William Douglas 1 participant 2 messages Aug 15, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 printk: Fix bounds checking for log_prefix.

Currently log_prefix is testing that the first character of the log level and facility is less than '0' and greater than '9' (which is always false). It should be testing to see if the character less than '0' or greater than '9' instead. This patch makes that change.

The code being changed worked because strtoul bombs out (endp isn't updated) and 0 is returned anyway.

---
 kernel/printk.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/printk.c +1 -1
index 37dff34..42080686 100644
@@ -590,7 +590,7 @@ static size_t log_prefix(const char *p, unsigned int *level, char *special)
 		/* multi digit including the level and facility number */
 		char *endp = NULL;
 
-		if (p[1] < '0' && p[1] > '9')
+		if (p[1] < '0' || p[1] > '9')
 			return 0;
 
 		lev = (simple_strtoul(&p[1], &endp, 10) & 7);
Signature · 1 line
1.7.6
#1 lore raw

PATCH v2 1/1 printk: Remove bounds checking for log_prefix

Currently log_prefix is testing that the first character of the log level and facility is less than '0' and greater than '9' (which is always false).

Since the code being updated works because strtoul bombs out (endp isn't updated) and 0 is returned anyway just remove the check and don't change the behavior of the function.

---
 kernel/printk.c |    3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)
kernel/printk.c +0 -3
index 37dff34..4a0d2ed 100644
@@ -590,9 +590,6 @@ static size_t log_prefix(const char *p, unsigned int *level, char *special)
 		/* multi digit including the level and facility number */
 		char *endp = NULL;
 
-		if (p[1] < '0' && p[1] > '9')
-			return 0;
-
 		lev = (simple_strtoul(&p[1], &endp, 10) & 7);
 		if (endp == NULL || endp[0] != '>')
 			return 0;
Signature · 1 line
1.7.6