lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 26 Mar 2012 09:36:27 +0800
From:	"he, bo" <bo.he@...el.com>
To:	Ingo Molnar <mingo@...nel.org>, akpm@...ux-foudation.org,
	mingo@...e.hu, rusty@...tcorp.com.au, a.p.zijlstra@...llo.nl,
	linux-kernel@...r.kernel.org, william.douglas@...el.com
Cc:	yanmin_zhang@...ux.intel.com
Subject: [PATCH_V2 1/2] fix the bug that printk can't support
 printk(KERN_LEVEL)

From: he bo <bo.he@...el.com>

Usually, there is a special scenario that developer wants to
call printk to just set up a log level (might be transferred
here as a parameter from upper level), then, later calling
of printk prints out real string with the same log level
continuously.

Current function vprintk has an issue to support this capability.
When the whole string in one calling to printk is just a log level,
it ignores it.

Signed-off-by: he, bo <bo.he@...el.com>
Reviewed-by: Zhang, Yanmin <yanmin.zhang@...el.com>
---
 kernel/printk.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/printk.c b/kernel/printk.c
index b663c2c..473afdb 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -909,7 +909,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
 	 * Copy the output into log_buf. If the caller didn't provide
 	 * the appropriate log prefix, we insert them here
 	 */
-	for (; *p; p++) {
+	for (; plen || *p; p++) {
 		if (new_text_line) {
 			new_text_line = 0;
 
@@ -920,6 +920,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
 				for (i = 0; i < plen; i++)
 					emit_log_char(printk_buf[i]);
 				printed_len += plen;
+				plen = 0;
 			} else {
 				/* Add log prefix */
 				emit_log_char('<');
@@ -946,10 +947,10 @@ asmlinkage int vprintk(const char *fmt, va_list args)
 				printed_len += tlen;
 			}
 
-			if (!*p)
-				break;
 		}
 
+		if (!*p)
+			break;
 		emit_log_char(*p);
 		if (*p == '\n')
 			new_text_line = 1;
-- 
1.7.1



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists