CC: kbuild-...@lists.01.org
BCC: l...@intel.com
In-Reply-To: <20220720044144.90-5-xieyon...@bytedance.com>
References: <20220720044144.90-5-xieyon...@bytedance.com>
TO: Xie Yongji <xieyon...@bytedance.com>
TO: m...@redhat.com
TO: jasow...@redhat.com
TO: xiaodong....@intel.com
TO: maxime.coque...@redhat.com
TO: stefa...@redhat.com
CC: songmuc...@bytedance.com
CC: virtualizat...@lists.linux-foundation.org
CC: linux-ker...@vger.kernel.org

Hi Xie,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.19-rc7 next-20220722]
[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/Xie-Yongji/VDUSE-Support-registering-userspace-memory-as-bounce-buffer/20220720-124408
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
ca85855bdcae8f84f1512e88b4c75009ea17ea2f
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: ia64-randconfig-m041-20220721 
(https://download.01.org/0day-ci/archive/20220724/202207241607.u3jn5m08-...@intel.com/config)
compiler: ia64-linux-gcc (GCC) 12.1.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>

smatch warnings:
drivers/vdpa/vdpa_user/vduse_dev.c:1024 vduse_dev_reg_umem() warn: possible 
memory leak of 'umem'

vim +/umem +1024 drivers/vdpa/vdpa_user/vduse_dev.c

adfe5defa068df Xie Yongji 2022-07-20   958  
adfe5defa068df Xie Yongji 2022-07-20   959  static int 
vduse_dev_reg_umem(struct vduse_dev *dev,
adfe5defa068df Xie Yongji 2022-07-20   960                            u64 iova, 
u64 uaddr, u64 size)
adfe5defa068df Xie Yongji 2022-07-20   961  {
adfe5defa068df Xie Yongji 2022-07-20   962      struct page **page_list = NULL;
adfe5defa068df Xie Yongji 2022-07-20   963      struct vduse_umem *umem = NULL;
adfe5defa068df Xie Yongji 2022-07-20   964      long pinned = 0;
adfe5defa068df Xie Yongji 2022-07-20   965      unsigned long npages, 
lock_limit;
adfe5defa068df Xie Yongji 2022-07-20   966      int ret;
adfe5defa068df Xie Yongji 2022-07-20   967  
adfe5defa068df Xie Yongji 2022-07-20   968      if (!dev->domain->bounce_map ||
adfe5defa068df Xie Yongji 2022-07-20   969          size != 
dev->domain->bounce_size ||
adfe5defa068df Xie Yongji 2022-07-20   970          iova != 0 || uaddr & 
~PAGE_MASK)
adfe5defa068df Xie Yongji 2022-07-20   971              return -EINVAL;
adfe5defa068df Xie Yongji 2022-07-20   972  
adfe5defa068df Xie Yongji 2022-07-20   973      mutex_lock(&dev->mem_lock);
adfe5defa068df Xie Yongji 2022-07-20   974      ret = -EEXIST;
adfe5defa068df Xie Yongji 2022-07-20   975      if (dev->umem)
adfe5defa068df Xie Yongji 2022-07-20   976              goto unlock;
adfe5defa068df Xie Yongji 2022-07-20   977  
adfe5defa068df Xie Yongji 2022-07-20   978      ret = -ENOMEM;
adfe5defa068df Xie Yongji 2022-07-20   979      npages = size >> PAGE_SHIFT;
adfe5defa068df Xie Yongji 2022-07-20   980      page_list = 
__vmalloc(array_size(npages, sizeof(struct page *)),
adfe5defa068df Xie Yongji 2022-07-20   981                            
GFP_KERNEL_ACCOUNT);
adfe5defa068df Xie Yongji 2022-07-20   982      umem = kzalloc(sizeof(*umem), 
GFP_KERNEL);
adfe5defa068df Xie Yongji 2022-07-20   983      if (!page_list || !umem)
adfe5defa068df Xie Yongji 2022-07-20   984              goto unlock;
adfe5defa068df Xie Yongji 2022-07-20   985  
adfe5defa068df Xie Yongji 2022-07-20   986      mmap_read_lock(current->mm);
adfe5defa068df Xie Yongji 2022-07-20   987  
adfe5defa068df Xie Yongji 2022-07-20   988      lock_limit = 
PFN_DOWN(rlimit(RLIMIT_MEMLOCK));
adfe5defa068df Xie Yongji 2022-07-20   989      if (npages + 
atomic64_read(&current->mm->pinned_vm) > lock_limit)
adfe5defa068df Xie Yongji 2022-07-20   990              goto out;
adfe5defa068df Xie Yongji 2022-07-20   991  
adfe5defa068df Xie Yongji 2022-07-20   992      pinned = pin_user_pages(uaddr, 
npages, FOLL_LONGTERM | FOLL_WRITE,
adfe5defa068df Xie Yongji 2022-07-20   993                              
page_list, NULL);
adfe5defa068df Xie Yongji 2022-07-20   994      if (pinned != npages) {
adfe5defa068df Xie Yongji 2022-07-20   995              ret = pinned < 0 ? 
pinned : -ENOMEM;
adfe5defa068df Xie Yongji 2022-07-20   996              goto out;
adfe5defa068df Xie Yongji 2022-07-20   997      }
adfe5defa068df Xie Yongji 2022-07-20   998  
adfe5defa068df Xie Yongji 2022-07-20   999      ret = 
vduse_domain_add_user_bounce_pages(dev->domain,
adfe5defa068df Xie Yongji 2022-07-20  1000                                      
         page_list, pinned);
adfe5defa068df Xie Yongji 2022-07-20  1001      if (ret)
adfe5defa068df Xie Yongji 2022-07-20  1002              goto out;
adfe5defa068df Xie Yongji 2022-07-20  1003  
adfe5defa068df Xie Yongji 2022-07-20  1004      atomic64_add(npages, 
&current->mm->pinned_vm);
adfe5defa068df Xie Yongji 2022-07-20  1005  
adfe5defa068df Xie Yongji 2022-07-20  1006      umem->pages = page_list;
adfe5defa068df Xie Yongji 2022-07-20  1007      umem->npages = pinned;
adfe5defa068df Xie Yongji 2022-07-20  1008      umem->iova = iova;
adfe5defa068df Xie Yongji 2022-07-20  1009      umem->mm = current->mm;
adfe5defa068df Xie Yongji 2022-07-20  1010      mmgrab(current->mm);
adfe5defa068df Xie Yongji 2022-07-20  1011  
adfe5defa068df Xie Yongji 2022-07-20  1012      dev->umem = umem;
adfe5defa068df Xie Yongji 2022-07-20  1013  out:
adfe5defa068df Xie Yongji 2022-07-20  1014      if (ret && pinned > 0)
adfe5defa068df Xie Yongji 2022-07-20  1015              
unpin_user_pages(page_list, pinned);
adfe5defa068df Xie Yongji 2022-07-20  1016  
adfe5defa068df Xie Yongji 2022-07-20  1017      mmap_read_unlock(current->mm);
adfe5defa068df Xie Yongji 2022-07-20  1018  unlock:
adfe5defa068df Xie Yongji 2022-07-20  1019      if (ret) {
adfe5defa068df Xie Yongji 2022-07-20  1020              vfree(page_list);
adfe5defa068df Xie Yongji 2022-07-20  1021              kfree(umem);
adfe5defa068df Xie Yongji 2022-07-20  1022      }
adfe5defa068df Xie Yongji 2022-07-20  1023      mutex_unlock(&dev->mem_lock);
adfe5defa068df Xie Yongji 2022-07-20 @1024      return ret;
adfe5defa068df Xie Yongji 2022-07-20  1025  }
adfe5defa068df Xie Yongji 2022-07-20  1026  

-- 
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

Reply via email to