On Wed, 6 May 2026 16:09:16 +0200
Jens Remus <[email protected]> wrote:

> On 5/5/2026 2:17 PM, Jens Remus wrote:
> > From: Josh Poimboeuf <[email protected]>
> > 
> > Add an x86 implementation of unsafe_copy_from_user() similar to the
> > existing unsafe_copy_to_user().  
> 
> > diff --git a/arch/x86/include/asm/uaccess.h 
> > b/arch/x86/include/asm/uaccess.h  
> 
> > -#define unsafe_copy_to_user(_dst,_src,_len,label)                  \
> > -do {                                                                       
> > \
> > -   char __user *__ucu_dst = (_dst);                                \
> > -   const char *__ucu_src = (_src);                                 \
> > -   size_t __ucu_len = (_len);                                      \
> > -   unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u64, label);  \
> > -   unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u32, label);  \
> > -   unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u16, label);  \
> > -   unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u8, label);   \
> > +#define unsafe_copy_to_user(_dst, _src, _len, label)                       
> >         \
> > +do {                                                                       
> >         \
> > +   void __user *__dst = (_dst);                                            
> > \
> > +   const void *__src = (_src);                                             
> > \
> > +   size_t __len = (_len);                                                  
> > \
> > +   unsafe_copy_to_user_loop(__dst, __src, __len, u64, label);              
> > \
> > +   unsafe_copy_to_user_loop(__dst, __src, __len, u32, label);              
> > \
> > +   unsafe_copy_to_user_loop(__dst, __src, __len, u16, label);              
> > \
> > +   unsafe_copy_to_user_loop(__dst, __src, __len, u8,  label);              
> > \
> > +} while (0)
> > +
> > +#define unsafe_copy_from_user_loop(dst, src, len, type, label)             
> >         \
> > +   while (len >= sizeof(type)) {                                           
> > \
> > +           unsafe_get_user(*(type *)(dst), (type __user *)(src), label);   
> > \
> > +           dst += sizeof(type);                                            
> > \
> > +           src += sizeof(type);                                            
> > \
> > +           len -= sizeof(type);                                            
> > \
> > +   }
> > +
> > +#define unsafe_copy_from_user(_dst, _src, _len, label)                     
> >         \
> > +do {                                                                       
> >         \
> > +   void *__dst = (_dst);                                                   
> > \
> > +   void __user *__src = (_src);                                            
> > \  
> 
>       const void __user *__src = (_src);                                      
> \
> 
> This was suggested by Sashiko AI review.  Any objections?

Try compiling it :-)

-- David

> 
> > +   size_t __len = (_len);                                                  
> > \
> > +   unsafe_copy_from_user_loop(__dst, __src, __len, u64, label);            
> > \
> > +   unsafe_copy_from_user_loop(__dst, __src, __len, u32, label);            
> > \
> > +   unsafe_copy_from_user_loop(__dst, __src, __len, u16, label);            
> > \
> > +   unsafe_copy_from_user_loop(__dst, __src, __len, u8,  label);            
> > \
> >  } while (0)
> >  
> >  #ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT  
> 
> Thanks and regards,
> Jens


Reply via email to