Re: [PATCH 3/4] block: add IOC_PR_READ_KEYS ioctl

kernel test robot
2025-11-26T18:07:16Z

Hi Stefan,

kernel test robot noticed the following build warnings:

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on axboe/for-next jejb-scsi/for-next linus/master v6.18-rc7 next-20251126]
[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/Stefan-Hajnoczi/scsi-sd-reject-invalid-pr_read_keys-num_keys-values/20251127-003756
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
patch link: https://lore.kernel.org/r/20251126163600.583036-4-stefanha%40redhat.com
patch subject: [PATCH 3/4] block: add IOC_PR_READ_KEYS ioctl
config: loongarch-allnoconfig (https://download.01.org/0day-ci/archive/20251127/202511270125.CJ6M2RHv-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 9e9fe08b16ea2c4d9867fb4974edf2a3776d6ece)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251127/202511270125.CJ6M2RHv-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/202511270125.CJ6M2RHv-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> block/ioctl.c:443:21: warning: result of comparison of constant 2305843009213693951 with expression of type '__u32' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
443 | if (inout.num_keys > -sizeof(*keys_info) / sizeof(keys_info->keys[0]))
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.

vim +443 block/ioctl.c

426
427 static int blkdev_pr_read_keys(struct block_device *bdev, blk_mode_t mode,
428 struct pr_read_keys __user *arg)
429 {
430 const struct pr_ops *ops = bdev->bd_disk->fops->pr_ops;
431 struct pr_keys *keys_info __free(kfree) = NULL;
432 struct pr_read_keys inout;
433 int ret;
434
435 if (!blkdev_pr_allowed(bdev, mode))
436 return -EPERM;
437 if (!ops || !ops->pr_read_keys)
438 return -EOPNOTSUPP;
439
440 if (copy_from_user(&inout, arg, sizeof(inout)))
441 return -EFAULT;
442
> 443 if (inout.num_keys > -sizeof(*keys_info) / sizeof(keys_info->keys[0]))
444 return -EINVAL;
445
446 size_t keys_info_len = struct_size(keys_info, keys, inout.num_keys);
447
448 keys_info = kzalloc(keys_info_len, GFP_KERNEL);
449 if (!keys_info)
450 return -ENOMEM;
451
452 keys_info->num_keys = inout.num_keys;
453
454 ret = ops->pr_read_keys(bdev, keys_info);
455 if (ret)
456 return ret;
457
458 /* Copy out individual keys */
459 u64 __user *keys_ptr = u64_to_user_ptr(inout.keys_ptr);
460 u32 num_copy_keys = min(inout.num_keys, keys_info->num_keys);
461 size_t keys_copy_len = num_copy_keys * sizeof(keys_info->keys[0]);
462
463 if (copy_to_user(keys_ptr, keys_info->keys, keys_copy_len))
464 return -EFAULT;
465
466 /* Copy out the arg struct */
467 inout.generation = keys_info->generation;
468 inout.num_keys = keys_info->num_keys;
469
470 if (copy_to_user(arg, &inout, sizeof(inout)))
471 return -EFAULT;
472 return ret;
473 }
474

--
0-DAY CI Kernel Test Service