[PARISC] update parisc to use generic strncpy_from_user()
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
8275b91aad
commit
b1195c0e3e
|
@ -18,6 +18,7 @@ config PARISC
|
||||||
select IRQ_PER_CPU
|
select IRQ_PER_CPU
|
||||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
select GENERIC_SMP_IDLE_THREAD
|
select GENERIC_SMP_IDLE_THREAD
|
||||||
|
select GENERIC_STRNCPY_FROM_USER
|
||||||
|
|
||||||
help
|
help
|
||||||
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
||||||
|
|
|
@ -218,15 +218,14 @@ struct exception_data {
|
||||||
extern unsigned long lcopy_to_user(void __user *, const void *, unsigned long);
|
extern unsigned long lcopy_to_user(void __user *, const void *, unsigned long);
|
||||||
extern unsigned long lcopy_from_user(void *, const void __user *, unsigned long);
|
extern unsigned long lcopy_from_user(void *, const void __user *, unsigned long);
|
||||||
extern unsigned long lcopy_in_user(void __user *, const void __user *, unsigned long);
|
extern unsigned long lcopy_in_user(void __user *, const void __user *, unsigned long);
|
||||||
extern long lstrncpy_from_user(char *, const char __user *, long);
|
extern long strncpy_from_user(char *, const char __user *, long);
|
||||||
extern unsigned lclear_user(void __user *,unsigned long);
|
extern unsigned lclear_user(void __user *,unsigned long);
|
||||||
extern long lstrnlen_user(const char __user *,long);
|
extern long lstrnlen_user(const char __user *,long);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Complex access routines -- macros
|
* Complex access routines -- macros
|
||||||
*/
|
*/
|
||||||
|
#define user_addr_max() (~0UL)
|
||||||
|
|
||||||
#define strncpy_from_user lstrncpy_from_user
|
|
||||||
#define strnlen_user lstrnlen_user
|
#define strnlen_user lstrnlen_user
|
||||||
#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
|
#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
|
||||||
#define clear_user lclear_user
|
#define clear_user lclear_user
|
||||||
|
|
|
@ -44,7 +44,6 @@ EXPORT_SYMBOL(__cmpxchg_u64);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
EXPORT_SYMBOL(lstrncpy_from_user);
|
|
||||||
EXPORT_SYMBOL(lclear_user);
|
EXPORT_SYMBOL(lclear_user);
|
||||||
EXPORT_SYMBOL(lstrnlen_user);
|
EXPORT_SYMBOL(lstrnlen_user);
|
||||||
|
|
||||||
|
|
|
@ -60,47 +60,6 @@
|
||||||
bv %r0(%r1)
|
bv %r0(%r1)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
|
||||||
* long lstrncpy_from_user(char *dst, const char *src, long n)
|
|
||||||
*
|
|
||||||
* Returns -EFAULT if exception before terminator,
|
|
||||||
* N if the entire buffer filled,
|
|
||||||
* otherwise strlen (i.e. excludes zero byte)
|
|
||||||
*/
|
|
||||||
|
|
||||||
ENTRY(lstrncpy_from_user)
|
|
||||||
.proc
|
|
||||||
.callinfo NO_CALLS
|
|
||||||
.entry
|
|
||||||
comib,= 0,%r24,$lsfu_done
|
|
||||||
copy %r24,%r23
|
|
||||||
get_sr
|
|
||||||
1: ldbs,ma 1(%sr1,%r25),%r1
|
|
||||||
$lsfu_loop:
|
|
||||||
stbs,ma %r1,1(%r26)
|
|
||||||
comib,=,n 0,%r1,$lsfu_done
|
|
||||||
addib,<>,n -1,%r24,$lsfu_loop
|
|
||||||
2: ldbs,ma 1(%sr1,%r25),%r1
|
|
||||||
$lsfu_done:
|
|
||||||
sub %r23,%r24,%r28
|
|
||||||
$lsfu_exit:
|
|
||||||
bv %r0(%r2)
|
|
||||||
nop
|
|
||||||
.exit
|
|
||||||
ENDPROC(lstrncpy_from_user)
|
|
||||||
|
|
||||||
.section .fixup,"ax"
|
|
||||||
3: fixup_branch $lsfu_exit
|
|
||||||
ldi -EFAULT,%r28
|
|
||||||
.previous
|
|
||||||
|
|
||||||
.section __ex_table,"aw"
|
|
||||||
ASM_ULONG_INSN 1b,3b
|
|
||||||
ASM_ULONG_INSN 2b,3b
|
|
||||||
.previous
|
|
||||||
|
|
||||||
.procend
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* unsigned long lclear_user(void *to, unsigned long n)
|
* unsigned long lclear_user(void *to, unsigned long n)
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue