microblaze: Fix strncpy_from_user macro
authorMichal Simek <michal.simek@xilinx.com>
Wed, 16 Jan 2013 17:53:22 +0000 (18:53 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 12 Feb 2013 10:24:44 +0000 (11:24 +0100)
Problem happens when len in strncpy_from_user is setup
and passing string has len-1 chars + \0 terminated
character. In this case was returned incorrect length
of the string.
It should always retunrs the length of the string
(not including the trailing NULL).

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/microblaze/lib/uaccess_old.S

index f085995ee8482da474be869148b581543cbf786f..0e8cc2710c27fb3503eee296f9041cc38659a99c 100644 (file)
@@ -38,15 +38,14 @@ __strncpy_user:
        addik   r3,r7,0         /* temp_count = len */
 1:
        lbu     r4,r6,r0
+       beqid   r4,2f
        sb      r4,r5,r0
 
-       addik   r3,r3,-1
-       beqi    r3,2f           /* break on len */
-
        addik   r5,r5,1
-       bneid   r4,1b
        addik   r6,r6,1         /* delay slot */
-       addik   r3,r3,1         /* undo "temp_count--" */
+
+       addik   r3,r3,-1
+       bnei    r3,1b           /* break on len */
 2:
        rsubk   r3,r3,r7        /* temp_count = len - temp_count */
 3: