Message ID | 20200817073212.830069-11-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/11] mem: remove duplicate ops for /dev/zero and /dev/null | expand |
Le 17/08/2020 à 09:32, Christoph Hellwig a écrit : > Provide __get_kernel_nofault and __put_kernel_nofault routines to > implement the maccess routines without messing with set_fs and without > opening up access to user space. __get_user_size() opens access to user space. You have to use __get_user_size_allowed() when user access is already allowed (or when not needed to allow it). Christophe > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > arch/powerpc/include/asm/uaccess.h | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h > index 00699903f1efca..a31de40ac00b62 100644 > --- a/arch/powerpc/include/asm/uaccess.h > +++ b/arch/powerpc/include/asm/uaccess.h > @@ -623,4 +623,20 @@ do { \ > __put_user_goto(*(u8*)(_src + _i), (u8 __user *)(_dst + _i), e);\ > } while (0) > > +#define HAVE_GET_KERNEL_NOFAULT > + > +#define __get_kernel_nofault(dst, src, type, err_label) \ > +do { \ > + int __kr_err; \ > + \ > + __get_user_size(*((type *)(dst)), (__force type __user *)(src), \ > + sizeof(type), __kr_err); \ > + if (unlikely(__kr_err)) \ > + goto err_label; \ > +} while (0) > + > +#define __put_kernel_nofault(dst, src, type, err_label) \ > + __put_user_size_goto(*((type *)(src)), \ > + (__force type __user *)(dst), sizeof(type), err_label) > + > #endif /* _ARCH_POWERPC_UACCESS_H */ >
diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h index 00699903f1efca..a31de40ac00b62 100644 --- a/arch/powerpc/include/asm/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h @@ -623,4 +623,20 @@ do { \ __put_user_goto(*(u8*)(_src + _i), (u8 __user *)(_dst + _i), e);\ } while (0) +#define HAVE_GET_KERNEL_NOFAULT + +#define __get_kernel_nofault(dst, src, type, err_label) \ +do { \ + int __kr_err; \ + \ + __get_user_size(*((type *)(dst)), (__force type __user *)(src), \ + sizeof(type), __kr_err); \ + if (unlikely(__kr_err)) \ + goto err_label; \ +} while (0) + +#define __put_kernel_nofault(dst, src, type, err_label) \ + __put_user_size_goto(*((type *)(src)), \ + (__force type __user *)(dst), sizeof(type), err_label) + #endif /* _ARCH_POWERPC_UACCESS_H */
Provide __get_kernel_nofault and __put_kernel_nofault routines to implement the maccess routines without messing with set_fs and without opening up access to user space. Signed-off-by: Christoph Hellwig <hch@lst.de> --- arch/powerpc/include/asm/uaccess.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)