BCC: l...@intel.com CC: kbuild-...@lists.01.org In-Reply-To: <9293c7ee-6fb7-7142-66fe-051548ffb...@ya.ru> References: <9293c7ee-6fb7-7142-66fe-051548ffb...@ya.ru> TO: Kirill Tkhai <tk...@ya.ru> TO: net...@vger.kernel.org CC: Eric Dumazet <eduma...@google.com> CC: Paolo Abeni <pab...@redhat.com> CC: Kirill Tkhai <tk...@ya.ru>
Hi Kirill, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on net/master] [also build test WARNING on net-next/master linus/master horms-ipvs/master v6.0-rc1 next-20220812] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Kirill-Tkhai/af_unix-Add-ioctl-SIOCUNIXGRABFDS-to-grab-files-of-receive-queue-skbs/20220815-045608 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git 777885673122b78b2abd2f1e428730961a786ff2 :::::: branch date: 8 hours ago :::::: commit date: 8 hours ago config: x86_64-randconfig-m001 (https://download.01.org/0day-ci/archive/20220815/202208151232.4lhp28lp-...@intel.com/config) compiler: gcc-11 (Debian 11.3.0-3) 11.3.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <l...@intel.com> Reported-by: Dan Carpenter <dan.carpen...@oracle.com> New smatch warnings: net/unix/af_unix.c:3130 unix_ioc_grab_fds() warn: potential spectre issue 'fp->fp' [r] (local cap) Old smatch warnings: net/unix/af_unix.c:1605 unix_stream_connect() warn: variable dereferenced before check 'other' (see line 1488) vim +3130 net/unix/af_unix.c ba94f3088b792b Andrey Vagin 2017-02-01 3081 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3082 static int unix_ioc_grab_fds(struct sock *sk, struct unix_ioc_grab_fds __user *uarg) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3083 { 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3084 int i, todo, skip, count, all, err, done = 0; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3085 struct unix_sock *u = unix_sk(sk); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3086 struct unix_ioc_grab_fds arg; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3087 struct sk_buff *skb = NULL; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3088 struct scm_fp_list *fp; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3089 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3090 if (copy_from_user(&arg, uarg, sizeof(arg))) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3091 return -EFAULT; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3092 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3093 skip = arg.in.nr_skip; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3094 todo = arg.in.nr_grab; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3095 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3096 if (skip < 0 || todo <= 0) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3097 return -EINVAL; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3098 if (mutex_lock_interruptible(&u->iolock)) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3099 return -EINTR; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3100 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3101 all = atomic_read(&u->scm_stat.nr_fds); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3102 err = -EFAULT; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3103 /* Set uarg->out.nr_all before the first file is received. */ 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3104 if (put_user(all, &uarg->out.nr_all)) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3105 goto unlock; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3106 err = 0; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3107 if (all <= skip) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3108 goto unlock; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3109 if (all - skip < todo) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3110 todo = all - skip; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3111 while (todo) { 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3112 spin_lock(&sk->sk_receive_queue.lock); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3113 if (!skb) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3114 skb = skb_peek(&sk->sk_receive_queue); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3115 else 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3116 skb = skb_peek_next(skb, &sk->sk_receive_queue); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3117 spin_unlock(&sk->sk_receive_queue.lock); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3118 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3119 if (!skb) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3120 goto unlock; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3121 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3122 fp = UNIXCB(skb).fp; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3123 count = fp->count; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3124 if (skip >= count) { 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3125 skip -= count; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3126 continue; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3127 } 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3128 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3129 for (i = skip; i < count && todo; i++) { 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 @3130 err = receive_fd_user(fp->fp[i], &arg.in.fds[done], 0); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3131 if (err < 0) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3132 goto unlock; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3133 done++; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3134 todo--; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3135 } 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3136 skip = 0; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3137 } 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3138 unlock: 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3139 mutex_unlock(&u->iolock); 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3140 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3141 /* Return number of fds (non-error) if there is a received file. */ 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3142 if (done) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3143 return done; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3144 if (err < 0) 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3145 return err; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3146 return 0; 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3147 } 0b4bc309fb3cdc Kirill Tkhai 2022-08-14 3148 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org