powerpc: Fix handling of strncmp with zero len
authorJeff Mahoney <jeffm@suse.com>
Wed, 17 Mar 2010 10:55:51 +0000 (10:55 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 7 Apr 2010 08:00:39 +0000 (18:00 +1000)
Commit 0119536c, which added the assembly version of strncmp to
powerpc, mentions that it adds two instructions to the version from
boot/string.S to allow it to handle len=0. Unfortunately, it doesn't
always return 0 when that is the case. The length is passed in r5, but
the return value is passed back in r3. In certain cases, this will
happen to work. Otherwise it will pass back the address of the first
string as the return value.

This patch lifts the len <= 0 handling code from memcpy to handle that
case.

Reported by: Christian_Sellars@symantec.com
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
CC: <stable@kernel.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/lib/string.S

index 64e2e499e32a6fecacf81cb6eba2d03a32c8e50d..3ac0cd3a53738e28cd7a0cb0649d94b27c5d2d3b 100644 (file)
@@ -71,7 +71,7 @@ _GLOBAL(strcmp)
 
 _GLOBAL(strncmp)
        PPC_LCMPI r5,0
-       beqlr
+       ble-    2f
        mtctr   r5
        addi    r5,r3,-1
        addi    r4,r4,-1
@@ -82,6 +82,8 @@ _GLOBAL(strncmp)
        beqlr   1
        bdnzt   eq,1b
        blr
+2:     li      r3,0
+       blr
 
 _GLOBAL(strlen)
        addi    r4,r3,-1