Re: [PATCHv2 1/4] block: bio-integrity: directly map user buffers

kernel test robot
2023-10-31T00:14:24Z

Hi Keith,

kernel test robot noticed the following build warnings:

[auto build test WARNING on axboe-block/for-next]
[also build test WARNING on linus/master v6.6 next-20231030]
[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/Keith-Busch/block-bio-integrity-directly-map-user-buffers/20231028-022107
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
patch link: https://lore.kernel.org/r/20231027181929.2589937-2-kbusch%40meta.com
patch subject: [PATCHv2 1/4] block: bio-integrity: directly map user buffers
config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20231031/202310310704.l4FwoJDd-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231031/202310310704.l4FwoJDd-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310310704.l4FwoJDd-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> block/bio-integrity.c:215:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (!buf)
^~~~
block/bio-integrity.c:255:9: note: uninitialized use occurs here
return ret;
^~~
block/bio-integrity.c:215:2: note: remove the 'if' if its condition is always false
if (!buf)
^~~~~~~~~
block/bio-integrity.c:204:9: note: initialize the variable 'ret' to silence this warning
int ret;
^
= 0
1 warning generated.

vim +215 block/bio-integrity.c

195
196 static int bio_integrity_copy_user(struct bio *bio, struct bio_vec *bvec,
197 int nr_vecs, unsigned int len,
198 unsigned int direction, u32 seed)
199 {
200 struct bio_integrity_payload *bip;
201 struct bio_vec *copy_vec = NULL;
202 struct iov_iter iter;
203 void *buf;
204 int ret;
205
206 /* if bvec is on the stack, we need to allocate a copy for the completion */
207 if (nr_vecs <= UIO_FASTIOV) {
208 copy_vec = kcalloc(sizeof(*bvec), nr_vecs, GFP_KERNEL);
209 if (!copy_vec)
210 return -ENOMEM;
211 memcpy(copy_vec, bvec, nr_vecs * sizeof(*bvec));
212 }
213
214 buf = kmalloc(len, GFP_KERNEL);
> 215 if (!buf)
216 goto free_copy;
217
218 if (direction == ITER_SOURCE) {
219 iov_iter_bvec(&iter, direction, bvec, nr_vecs, len);
220 if (!copy_from_iter_full(buf, len, &iter)) {
221 ret = -EFAULT;
222 goto free_buf;
223 }
224 } else {
225 memset(buf, 0, len);
226 }
227
228 /*
229 * We just need one vec for this bip, but we need to preserve the
230 * number of vecs in the user bvec for the completion handling, so use
231 * nr_vecs.
232 */
233 bip = bio_integrity_alloc(bio, GFP_KERNEL, nr_vecs);
234 if (IS_ERR(bip)) {
235 ret = PTR_ERR(bip);
236 goto free_buf;
237 }
238
239 ret = bio_integrity_add_page(bio, virt_to_page(buf), len,
240 offset_in_page(buf));
241 if (ret != len) {
242 ret = -ENOMEM;
243 goto free_bip;
244 }
245
246 bip->bip_flags |= BIP_INTEGRITY_USER;
247 bip->copy_vec = copy_vec ?: bvec;
248 return 0;
249 free_bip:
250 bio_integrity_free(bio);
251 free_buf:
252 kfree(buf);
253 free_copy:
254 kfree(copy_vec);
255 return ret;
256 }
257

--
0-DAY CI Kernel Test Service