[kernel/f16] x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT

Dave Jones davej at fedoraproject.org
Tue Dec 20 00:03:07 UTC 2011


commit 117c274f5d5ba3fc2dcc01682a02d0f2339cad03
Author: Dave Jones <davej at redhat.com>
Date:   Mon Dec 19 19:03:00 2011 -0500

    x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT

 kernel.spec                        |    8 ++++
 x86-code-dump-fix-truncation.patch |   73 ++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 49a317c..080777a 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -771,6 +771,8 @@ Patch21022: mm-do-not-stall-in-synchronous-compaction-for-THP-allocations.patch
 Patch21030: be2net-non-member-vlan-pkts-not-received-in-promisco.patch
 Patch21031: benet-remove-bogus-unlikely-on-vlan-check.patch
 
+Patch21040: x86-code-dump-fix-truncation.patch
+
 Patch21070: oom-fix-integer-overflow-of-points.patch
 
 #rhbz 728607
@@ -1447,6 +1449,9 @@ ApplyPatch mm-do-not-stall-in-synchronous-compaction-for-THP-allocations.patch
 ApplyPatch be2net-non-member-vlan-pkts-not-received-in-promisco.patch
 ApplyPatch benet-remove-bogus-unlikely-on-vlan-check.patch
 
+#rhbz 736815
+ApplyPatch x86-code-dump-fix-truncation.patch
+
 #rhbz 750402
 ApplyPatch oom-fix-integer-overflow-of-points.patch
 
@@ -2216,6 +2221,9 @@ fi
 # and build.
 
 %changelog
+* Mon Dec 19 2011 Dave Jones <davej at redhat.com>
+- x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT
+
 * Fri Dec 16 2011 Ben Skeggs <bskeggs at redhat.com> - 3.1.5-7
 - Add patch to do a better job of dealing with busted EDID headers (rhbz#751589)
 
diff --git a/x86-code-dump-fix-truncation.patch b/x86-code-dump-fix-truncation.patch
new file mode 100644
index 0000000..dcd5a81
--- /dev/null
+++ b/x86-code-dump-fix-truncation.patch
@@ -0,0 +1,73 @@
+From: Clemens Ladisch <clemens at ladisch.de>
+Date: Mon, 19 Dec 2011 21:07:58 +0000 (+0100)
+Subject: x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT
+X-Git-Url: https://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftip%2Ftip.git;a=commitdiff_plain;h=13f541c10b30fc6529200d7f9a0073217709622f
+
+x86, dumpstack: Fix code bytes breakage due to missing KERN_CONT
+
+When printing the code bytes in show_registers(), the markers around the
+byte at the fault address could make the printk() format string look
+like a valid log level and facility code.  This would prevent this byte
+from being printed and result in a spurious newline:
+
+[ 7555.765589] Code: 8b 32 e9 94 00 00 00 81 7d 00 ff 00 00 00 0f 87 96 00 00 00 48 8b 83 c0 00 00 00 44 89 e2 44 89 e6 48 89 df 48 8b 80 d8 02 00 00
+[ 7555.765683]  8b 48 28 48 89 d0 81 e2 ff 0f 00 00 48 c1 e8 0c 48 c1 e0 04
+
+Add KERN_CONT where needed, and elsewhere in show_registers() for
+consistency.
+
+Signed-off-by: Clemens Ladisch <clemens at ladisch.de>
+Link: http://lkml.kernel.org/r/4EEFA7AE.9020407@ladisch.de
+Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>
+---
+
+diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
+index 3b97a80..c99f9ed 100644
+--- a/arch/x86/kernel/dumpstack_32.c
++++ b/arch/x86/kernel/dumpstack_32.c
+@@ -116,16 +116,16 @@ void show_registers(struct pt_regs *regs)
+ 		for (i = 0; i < code_len; i++, ip++) {
+ 			if (ip < (u8 *)PAGE_OFFSET ||
+ 					probe_kernel_address(ip, c)) {
+-				printk(" Bad EIP value.");
++				printk(KERN_CONT " Bad EIP value.");
+ 				break;
+ 			}
+ 			if (ip == (u8 *)regs->ip)
+-				printk("<%02x> ", c);
++				printk(KERN_CONT "<%02x> ", c);
+ 			else
+-				printk("%02x ", c);
++				printk(KERN_CONT "%02x ", c);
+ 		}
+ 	}
+-	printk("\n");
++	printk(KERN_CONT "\n");
+ }
+ 
+ int is_valid_bugaddr(unsigned long ip)
+diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
+index 19853ad..6d728d9 100644
+--- a/arch/x86/kernel/dumpstack_64.c
++++ b/arch/x86/kernel/dumpstack_64.c
+@@ -284,16 +284,16 @@ void show_registers(struct pt_regs *regs)
+ 		for (i = 0; i < code_len; i++, ip++) {
+ 			if (ip < (u8 *)PAGE_OFFSET ||
+ 					probe_kernel_address(ip, c)) {
+-				printk(" Bad RIP value.");
++				printk(KERN_CONT " Bad RIP value.");
+ 				break;
+ 			}
+ 			if (ip == (u8 *)regs->ip)
+-				printk("<%02x> ", c);
++				printk(KERN_CONT "<%02x> ", c);
+ 			else
+-				printk("%02x ", c);
++				printk(KERN_CONT "%02x ", c);
+ 		}
+ 	}
+-	printk("\n");
++	printk(KERN_CONT "\n");
+ }
+ 
+ int is_valid_bugaddr(unsigned long ip)


More information about the scm-commits mailing list