In v3.6-rc1 UML, I see spurious "^A" (ASCII 1, SOH) characters in some kernel
messages:

Calibrating delay loop... 4640.76 BogoMIPS (lpj=23203840)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 256
^AChecking that host ptys support output SIGIO...Yes
^AChecking that host ptys support SIGIO on close...No, enabling workaround
^AUsing 2.6 host AIO
NET: Registered protocol family 16
bio: create slab <bio-0> at 0
Switching to clocksource itimer

This happens for all output using the "printk(UM_KERN_XXX ...)" idiom.

The "UM_KERN_XXX" defines are generated from the KERN_XXX defines in
arch/um/include/shared/common-offsets.h using:

DEFINE_STR(UM_KERN_EMERG, KERN_EMERG);
DEFINE_STR(UM_KERN_ALERT, KERN_ALERT);
DEFINE_STR(UM_KERN_CRIT, KERN_CRIT);
DEFINE_STR(UM_KERN_ERR, KERN_ERR);
DEFINE_STR(UM_KERN_WARNING, KERN_WARNING);
DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE);
DEFINE_STR(UM_KERN_INFO, KERN_INFO);
DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG);
DEFINE_STR(UM_KERN_CONT, KERN_CONT);

Before commit 04d2c8c83d0e3ac5f78aeede51babb3236200112 ("printk: convert
the format for KERN_<LEVEL> to a 2 byte pattern"), these were expanded in
include/generated/asm-offsets.h to:

#define UM_KERN_EMERG "<0>" /* KERN_EMERG */
#define UM_KERN_ALERT "<1>" /* KERN_ALERT */
#define UM_KERN_CRIT "<2>" /* KERN_CRIT */
#define UM_KERN_ERR "<3>" /* KERN_ERR */
#define UM_KERN_WARNING "<4>" /* KERN_WARNING */
#define UM_KERN_NOTICE "<5>" /* KERN_NOTICE */
#define UM_KERN_INFO "<6>" /* KERN_INFO */
#define UM_KERN_DEBUG "<7>" /* KERN_DEBUG */
#define UM_KERN_CONT "<c>" /* KERN_CONT */

In v3.6-rc1, they expand to:

#define UM_KERN_EMERG "\001" /* "0" KERN_EMERG */
#define UM_KERN_ALERT "\001" /* "1" KERN_ALERT */
#define UM_KERN_CRIT "\001" /* "2" KERN_CRIT */
#define UM_KERN_ERR "\001" /* "3" KERN_ERR */
#define UM_KERN_WARNING "\001" /* "4" KERN_WARNING */
#define UM_KERN_NOTICE "\001" /* "5" KERN_NOTICE */
#define UM_KERN_INFO "\001" /* "6" KERN_INFO */
#define UM_KERN_DEBUG "\001" /* "7" KERN_DEBUG */
#define UM_KERN_CONT "\001" /* "c" KERN_CONT */

I.e. only the SOH character is retained in the actual define, the remainder ends
up in the comment.

Apparently the combo of DEFINE_STR() in
arch/x86/um/shared/sysdep/kernel-offsets.h
and sed-y in Kbuild doesn't support string constants consisting of
multiple parts.

A quick fix is the (whitespace-damaged) patch below, but this would reduce
readability. And I'm afraid my sed-foo is not good enough to fix it better.
Any takers?

diff --git a/include/linux/kern_levels.h b/include/linux/kern_levels.h
index 866caaa..1c43b52 100644
--- a/include/linux/kern_levels.h
+++ b/include/linux/kern_levels.h
@@ -4,16 +4,16 @@
 #define KERN_SOH       "\001"          /* ASCII Start Of Header */
 #define KERN_SOH_ASCII '\001'

-#define KERN_EMERG     KERN_SOH "0"    /* system is unusable */
-#define KERN_ALERT     KERN_SOH "1"    /* action must be taken immediately */
-#define KERN_CRIT      KERN_SOH "2"    /* critical conditions */
-#define KERN_ERR       KERN_SOH "3"    /* error conditions */
-#define KERN_WARNING   KERN_SOH "4"    /* warning conditions */
-#define KERN_NOTICE    KERN_SOH "5"    /* normal but significant condition */
-#define KERN_INFO      KERN_SOH "6"    /* informational */
-#define KERN_DEBUG     KERN_SOH "7"    /* debug-level messages */
+#define KERN_EMERG     "\0010"         /* system is unusable */
+#define KERN_ALERT     "\0011"         /* action must be taken immediately */
+#define KERN_CRIT      "\0012"         /* critical conditions */
+#define KERN_ERR       "\0013"         /* error conditions */
+#define KERN_WARNING   "\0014"         /* warning conditions */
+#define KERN_NOTICE    "\0015"         /* normal but significant condition */
+#define KERN_INFO      "\0016"         /* informational */
+#define KERN_DEBUG     "\0017"         /* debug-level messages */

-#define KERN_DEFAULT   KERN_SOH "d"    /* the default kernel loglevel */
+#define KERN_DEFAULT   "\001d"         /* the default kernel loglevel */

 /*
  * Annotation for a "continued" line of log printout (only done after a

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to