Hi Dawei,

kernel test robot noticed the following build warnings:

url:    
https://github.com/intel-lab-lkp/linux/commits/Dawei-Li/rpmsg-char-Reuse-eptdev-logic-for-anonymous-device/20250519-231006
base:   92a09c47464d040866cf2b4cd052bc60555185fb
patch link:    
https://lore.kernel.org/r/20250519150823.62350-4-dawei.li%40linux.dev
patch subject: [PATCH v3 3/3] rpmsg: ctrl: Introduce RPMSG_CREATE_EPT_FD_IOCTL 
uAPI
config: powerpc64-randconfig-r072-20250521 
(https://download.01.org/0day-ci/archive/20250521/202505211038.sqqvx8ko-...@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 
3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)

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 <l...@intel.com>
| Reported-by: Dan Carpenter <dan.carpen...@linaro.org>
| Closes: https://lore.kernel.org/r/202505211038.sqqvx8ko-...@intel.com/

smatch warnings:
drivers/rpmsg/rpmsg_ctrl.c:140 rpmsg_ctrldev_ioctl() warn: maybe return -EFAULT 
instead of the bytes remaining?

vim +140 drivers/rpmsg/rpmsg_ctrl.c

617d32938d1be0 Arnaud Pouliquen 2022-01-24   74  static long 
rpmsg_ctrldev_ioctl(struct file *fp, unsigned int cmd,
617d32938d1be0 Arnaud Pouliquen 2022-01-24   75                                 
unsigned long arg)
617d32938d1be0 Arnaud Pouliquen 2022-01-24   76  {
617d32938d1be0 Arnaud Pouliquen 2022-01-24   77         struct rpmsg_ctrldev 
*ctrldev = fp->private_data;
74317ea5240801 Dawei Li         2025-05-19   78         struct 
rpmsg_endpoint_fd_info ept_fd_info;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   79         void __user *argp = 
(void __user *)arg;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   80         struct 
rpmsg_endpoint_info eptinfo;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   81         struct 
rpmsg_channel_info chinfo;
8109517b394e6d Arnaud Pouliquen 2022-01-24   82         struct rpmsg_device 
*rpdev;
8109517b394e6d Arnaud Pouliquen 2022-01-24   83         int ret = 0;
74317ea5240801 Dawei Li         2025-05-19   84         int fd = -1;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   85  
74317ea5240801 Dawei Li         2025-05-19   86         if (cmd == 
RPMSG_CREATE_EPT_IOCTL || cmd == RPMSG_CREATE_DEV_IOCTL ||
74317ea5240801 Dawei Li         2025-05-19   87             cmd == 
RPMSG_RELEASE_DEV_IOCTL) {
617d32938d1be0 Arnaud Pouliquen 2022-01-24   88                 if 
(copy_from_user(&eptinfo, argp, sizeof(eptinfo)))
617d32938d1be0 Arnaud Pouliquen 2022-01-24   89                         return 
-EFAULT;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   90  
617d32938d1be0 Arnaud Pouliquen 2022-01-24   91                 
memcpy(chinfo.name, eptinfo.name, RPMSG_NAME_SIZE);
617d32938d1be0 Arnaud Pouliquen 2022-01-24   92                 
chinfo.name[RPMSG_NAME_SIZE - 1] = '\0';
617d32938d1be0 Arnaud Pouliquen 2022-01-24   93                 chinfo.src = 
eptinfo.src;
617d32938d1be0 Arnaud Pouliquen 2022-01-24   94                 chinfo.dst = 
eptinfo.dst;
74317ea5240801 Dawei Li         2025-05-19   95         } else if (cmd == 
RPMSG_CREATE_EPT_FD_IOCTL) {
74317ea5240801 Dawei Li         2025-05-19   96                 if 
(copy_from_user(&ept_fd_info, argp, sizeof(ept_fd_info)))
74317ea5240801 Dawei Li         2025-05-19   97                         return 
-EFAULT;
74317ea5240801 Dawei Li         2025-05-19   98  
74317ea5240801 Dawei Li         2025-05-19   99                 
memcpy(chinfo.name, ept_fd_info.name, RPMSG_NAME_SIZE);
74317ea5240801 Dawei Li         2025-05-19  100                 
chinfo.name[RPMSG_NAME_SIZE - 1] = '\0';
74317ea5240801 Dawei Li         2025-05-19  101                 chinfo.src = 
ept_fd_info.src;
74317ea5240801 Dawei Li         2025-05-19  102                 chinfo.dst = 
ept_fd_info.dst;
74317ea5240801 Dawei Li         2025-05-19  103         }
617d32938d1be0 Arnaud Pouliquen 2022-01-24  104  
8109517b394e6d Arnaud Pouliquen 2022-01-24  105         
mutex_lock(&ctrldev->ctrl_lock);
8109517b394e6d Arnaud Pouliquen 2022-01-24  106         switch (cmd) {
8109517b394e6d Arnaud Pouliquen 2022-01-24  107         case 
RPMSG_CREATE_EPT_IOCTL:
8109517b394e6d Arnaud Pouliquen 2022-01-24  108                 ret = 
rpmsg_chrdev_eptdev_create(ctrldev->rpdev, &ctrldev->dev, chinfo);
8109517b394e6d Arnaud Pouliquen 2022-01-24  109                 break;
8109517b394e6d Arnaud Pouliquen 2022-01-24  110  
8109517b394e6d Arnaud Pouliquen 2022-01-24  111         case 
RPMSG_CREATE_DEV_IOCTL:
8109517b394e6d Arnaud Pouliquen 2022-01-24  112                 rpdev = 
rpmsg_create_channel(ctrldev->rpdev, &chinfo);
8109517b394e6d Arnaud Pouliquen 2022-01-24  113                 if (!rpdev) {
8109517b394e6d Arnaud Pouliquen 2022-01-24  114                         
dev_err(&ctrldev->dev, "failed to create %s channel\n", chinfo.name);
8109517b394e6d Arnaud Pouliquen 2022-01-24  115                         ret = 
-ENXIO;
8109517b394e6d Arnaud Pouliquen 2022-01-24  116                 }
8109517b394e6d Arnaud Pouliquen 2022-01-24  117                 break;
8109517b394e6d Arnaud Pouliquen 2022-01-24  118  
8109517b394e6d Arnaud Pouliquen 2022-01-24  119         case 
RPMSG_RELEASE_DEV_IOCTL:
8109517b394e6d Arnaud Pouliquen 2022-01-24  120                 ret = 
rpmsg_release_channel(ctrldev->rpdev, &chinfo);
8109517b394e6d Arnaud Pouliquen 2022-01-24  121                 if (ret)
8109517b394e6d Arnaud Pouliquen 2022-01-24  122                         
dev_err(&ctrldev->dev, "failed to release %s channel (%d)\n",
8109517b394e6d Arnaud Pouliquen 2022-01-24  123                                 
chinfo.name, ret);
8109517b394e6d Arnaud Pouliquen 2022-01-24  124                 break;
8109517b394e6d Arnaud Pouliquen 2022-01-24  125  
74317ea5240801 Dawei Li         2025-05-19  126         case 
RPMSG_CREATE_EPT_FD_IOCTL:
74317ea5240801 Dawei Li         2025-05-19  127                 ret = 
rpmsg_anonymous_eptdev_create(ctrldev->rpdev, &ctrldev->dev, chinfo,
74317ea5240801 Dawei Li         2025-05-19  128                                 
                    ept_fd_info.flags, &fd);
74317ea5240801 Dawei Li         2025-05-19  129                 if (!ret) {

You should flip this around.  if (ret)
                                        break;

74317ea5240801 Dawei Li         2025-05-19  130                         
ept_fd_info.fd = fd;
74317ea5240801 Dawei Li         2025-05-19  131                         ret = 
copy_to_user(argp, &ept_fd_info, sizeof(ept_fd_info));

This should be:

        if (copy_to_user(argp, &ept_fd_info, sizeof(ept_fd_info)))
                ret = -EFAULT;


74317ea5240801 Dawei Li         2025-05-19  132                 }
74317ea5240801 Dawei Li         2025-05-19  133                 break;
74317ea5240801 Dawei Li         2025-05-19  134  
8109517b394e6d Arnaud Pouliquen 2022-01-24  135         default:
8109517b394e6d Arnaud Pouliquen 2022-01-24  136                 ret = -EINVAL;
8109517b394e6d Arnaud Pouliquen 2022-01-24  137         }
8109517b394e6d Arnaud Pouliquen 2022-01-24  138         
mutex_unlock(&ctrldev->ctrl_lock);
8109517b394e6d Arnaud Pouliquen 2022-01-24  139  
8109517b394e6d Arnaud Pouliquen 2022-01-24 @140         return ret;
617d32938d1be0 Arnaud Pouliquen 2022-01-24  141  };

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


Reply via email to