]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Aug 2013 04:44:16 +0000 (21:44 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Aug 2013 04:44:16 +0000 (21:44 -0700)
added patches:
arc-strchr-breakage-in-big-endian-configuration.patch

queue-3.10/arc-strchr-breakage-in-big-endian-configuration.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/arc-strchr-breakage-in-big-endian-configuration.patch b/queue-3.10/arc-strchr-breakage-in-big-endian-configuration.patch
new file mode 100644 (file)
index 0000000..161c404
--- /dev/null
@@ -0,0 +1,68 @@
+From b0f55f2a1a295c364be012e82dbab079a2454006 Mon Sep 17 00:00:00 2001
+From: Joern Rennecke <joern.rennecke@embecosm.com>
+Date: Sat, 24 Aug 2013 12:03:06 +0530
+Subject: ARC: [lib] strchr breakage in Big-endian configuration
+
+From: Joern Rennecke <joern.rennecke@embecosm.com>
+
+commit b0f55f2a1a295c364be012e82dbab079a2454006 upstream.
+
+For a search buffer, 2 byte aligned, strchr() was returning pointer
+outside of buffer (buf - 1)
+
+------------->8----------------
+    // Input buffer (default 4 byte aigned)
+    char *buffer = "1AA_";
+
+    // actual search start (to mimick 2 byte alignment)
+    char *current_line = &(buffer[2]);
+
+    // Character to search for
+    char c = 'A';
+
+    char *c_pos = strchr(current_line, c);
+
+    printf("%s\n", c_pos) --> 'AA_' as oppose to 'A_'
+------------->8----------------
+
+Reported-by: Anton Kolesov <Anton.Kolesov@synopsys.com>
+Debugged-by: Anton Kolesov <Anton.Kolesov@synopsys.com>
+Cc: Noam Camus <noamc@ezchip.com>
+Signed-off-by: Joern Rennecke  <joern.rennecke@embecosm.com>
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arc/lib/strchr-700.S |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/arch/arc/lib/strchr-700.S
++++ b/arch/arc/lib/strchr-700.S
+@@ -39,9 +39,18 @@ ARC_ENTRY strchr
+       ld.a    r2,[r0,4]
+       sub     r12,r6,r7
+       bic     r12,r12,r6
++#ifdef __LITTLE_ENDIAN__
+       and     r7,r12,r4
+       breq    r7,0,.Loop ; For speed, we want this branch to be unaligned.
+       b       .Lfound_char ; Likewise this one.
++#else
++      and     r12,r12,r4
++      breq    r12,0,.Loop ; For speed, we want this branch to be unaligned.
++      lsr_s   r12,r12,7
++      bic     r2,r7,r6
++      b.d     .Lfound_char_b
++      and_s   r2,r2,r12
++#endif
+ ; /* We require this code address to be unaligned for speed...  */
+ .Laligned:
+       ld_s    r2,[r0]
+@@ -95,6 +104,7 @@ ARC_ENTRY strchr
+       lsr     r7,r7,7
+       bic     r2,r7,r6
++.Lfound_char_b:
+       norm    r2,r2
+       sub_s   r0,r0,4
+       asr_s   r2,r2,3
index dbb31f683f557b7c51bd3f50fd13ac8b7d9e418f..26e55e9391726dc67cd17f11672c863d5f878746 100644 (file)
@@ -34,3 +34,4 @@ tracing-kprobes-fail-to-unregister-if-probe-event-files-are-in-use.patch
 tracing-uprobes-fail-to-unregister-if-probe-event-files-are-in-use.patch
 ftrace-check-module-functions-being-traced-on-reload.patch
 xen-smp-initialize-ipi-vectors-before-marking-cpu-online.patch
+arc-strchr-breakage-in-big-endian-configuration.patch