lkml.org 
[lkml]   [2013]   [Aug]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 37/74] ARC: [lib] strchr breakage in Big-endian configuration
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    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



    \
     
     \ /
      Last update: 2013-08-27 03:41    [W:2.228 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site