| From 637a99022fb119b90fb281715d13172f0394fc12 Mon Sep 17 00:00:00 2001 |
| From: Jeff Mahoney <jeffm@suse.com> |
| Date: Wed, 17 Mar 2010 10:55:51 +0000 |
| Subject: powerpc: Fix handling of strncmp with zero len |
| |
| From: Jeff Mahoney <jeffm@suse.com> |
| |
| commit 637a99022fb119b90fb281715d13172f0394fc12 upstream. |
| |
| 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> |
| Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/powerpc/lib/string.S | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/arch/powerpc/lib/string.S |
| +++ b/arch/powerpc/lib/string.S |
| @@ -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 |