unsigned long buf;

/*  ,      

    ,   */
if (len != sizeof(buf))
return -EINVAL;

/*   src,     

,  buf */
if (copy from user(&buf, src, len))
return -EFAULT;

/*   buf  dst,    

   */
if (copy_to user(dst, &buf, len))
return -EFAULT;

/*     */
return len;



 ,   , copy_from_user ()  copy_to_user (), -
 .  , ,   ,  -
 ,     ,     
 .          
 ,    -   (page fault handler)
           .

        .  
  Linux     suser ()  -
 ,     root.    -
,      root.     
      " -
" (capabilities).      -
      .  capable ()
   ,   ,   -
,     ,      .
,  capable (CAP_SYS_NICE) ,    -
     nice  . 
    ,  ,  -
  root,     .  
 ,     -
,    .

asmlinkage long sys_am_i_popular (void)
{

/* ,     

 CAP_SYS_NICE */
if (!capable(CAP_SYS_NICE))
return -EPERM;

/*  ,     */
return 0;

}

  " "  ,    -
,    <linux/capability.h>.

                                                          103