CC: [email protected]
CC: [email protected]
In-Reply-To: <20211118111632.GE1147@kili>
References: <20211118111632.GE1147@kili>
TO: Dan Carpenter <[email protected]>
TO: David Airlie <[email protected]>
TO: Gerd Hoffmann <[email protected]>
CC: [email protected]
CC: [email protected]
CC: [email protected]

Hi Dan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on v5.16-rc2]
[cannot apply to next-20211118]
[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]

url:    
https://github.com/0day-ci/linux/commits/Dan-Carpenter/drm-virtio-Fix-an-NULL-vs-IS_ERR-bug-in-virtio_gpu_object_shmem_init/20211118-191927
base:   git://anongit.freedesktop.org/drm/drm drm-next
:::::: branch date: 5 days ago
:::::: commit date: 5 days ago
config: arm-randconfig-c002-20211118 (attached as .config)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://github.com/0day-ci/linux/commit/6484c76f0631613606ed7704c2c341a44709c0f9
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Dan-Carpenter/drm-virtio-Fix-an-NULL-vs-IS_ERR-bug-in-virtio_gpu_object_shmem_init/20211118-191927
        git checkout 6484c76f0631613606ed7704c2c341a44709c0f9
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
                           ^
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   crypto/testmgr.c:625:16: note: Assuming 'copied' is equal to 'copy_len'
                           if (WARN_ON(copied != copy_len))
                                       ^
   include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   crypto/testmgr.c:625:8: note: Taking false branch
                           if (WARN_ON(copied != copy_len))
                               ^
   include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON'
           if (unlikely(__ret_warn_on))                                    \
           ^
   crypto/testmgr.c:625:4: note: Taking false branch
                           if (WARN_ON(copied != copy_len))
                           ^
   crypto/testmgr.c:600:14: note: Assuming 'i' is < field 'nents'
           for (i = 0; i < tsgl->nents; i++) {
                       ^~~~~~~~~~~~~~~
   crypto/testmgr.c:600:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < tsgl->nents; i++) {
           ^
   crypto/testmgr.c:601:25: note: Access to field 'offset' results in a 
dereference of an undefined pointer value (loaded from field 'div')
                   unsigned int offset = partitions[i].div->offset;
                                         ^             ~~~
   crypto/testmgr.c:1056:3: warning: Value stored to 'p' is never read 
[clang-analyzer-deadcode.DeadStores]
                   p += scnprintf(p, end - p, " key_offset=%u", 
cfg->key_offset);
                   ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   crypto/testmgr.c:1056:3: note: Value stored to 'p' is never read
                   p += scnprintf(p, end - p, " key_offset=%u", 
cfg->key_offset);
                   ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   15 warnings generated.
   Suppressed 15 warnings (15 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   19 warnings generated.
   kernel/kexec_core.c:771:4: warning: Value stored to 'addr' is never read 
[clang-analyzer-deadcode.DeadStores]
                           addr = old_addr;
                           ^      ~~~~~~~~
   kernel/kexec_core.c:771:4: note: Value stored to 'addr' is never read
                           addr = old_addr;
                           ^      ~~~~~~~~
   kernel/kexec_core.c:791:2: warning: Value stored to 'result' is never read 
[clang-analyzer-deadcode.DeadStores]
           result = 0;
           ^        ~
   kernel/kexec_core.c:791:2: note: Value stored to 'result' is never read
           result = 0;
           ^        ~
   Suppressed 17 warnings (17 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   17 warnings generated.
   Suppressed 17 warnings (16 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   19 warnings generated.
   drivers/char/tpm/tpm_tis_core.c:423:2: warning: Value stored to 'rc' is 
never read [clang-analyzer-deadcode.DeadStores]
           rc = tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask);
           ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/char/tpm/tpm_tis_core.c:423:2: note: Value stored to 'rc' is never 
read
           rc = tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), intmask);
           ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/char/tpm/tpm_tis_core.c:865:23: warning: Value stored to 'data' 
during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct tpm_tis_data *data = dev_get_drvdata(&chip->dev);
                                ^~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/char/tpm/tpm_tis_core.c:865:23: note: Value stored to 'data' during 
its initialization is never read
           struct tpm_tis_data *data = dev_get_drvdata(&chip->dev);
                                ^~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 17 warnings (16 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   18 warnings generated.
   Suppressed 18 warnings (16 in non-user code, 2 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   18 warnings generated.
   Suppressed 18 warnings (17 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   18 warnings generated.
   Suppressed 18 warnings (17 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   20 warnings generated.
>> drivers/gpu/drm/virtio/virtgpu_object.c:253:3: warning: Use of memory after 
>> it is freed [clang-analyzer-unix.Malloc]
                   return ret;
                   ^      ~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:227:2: note: Taking false branch
           if (IS_ERR(shmem_obj))
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:232:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   drivers/gpu/drm/virtio/virtgpu_object.c:232:2: note: Taking false branch
           if (ret < 0)
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:237:6: note: Assuming 'fence' is null
           if (fence) {
               ^~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:237:2: note: Taking false branch
           if (fence) {
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:250:6: note: Assuming 'ret' is not 
equal to 0
           if (ret != 0) {
               ^~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:250:2: note: Taking true branch
           if (ret != 0) {
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:252:3: note: Calling 
'virtio_gpu_free_object'
                   virtio_gpu_free_object(&shmem_obj->base);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:106:6: note: Assuming field 
'created' is false
           if (bo->created) {
               ^~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:106:2: note: Taking false branch
           if (bo->created) {
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:112:2: note: Calling 
'virtio_gpu_cleanup_object'
           virtio_gpu_cleanup_object(bo);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:69:6: note: Assuming the condition 
is true
           if (virtio_gpu_is_shmem(bo)) {
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:69:2: note: Taking true branch
           if (virtio_gpu_is_shmem(bo)) {
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:72:14: note: Field 'pages' is 
non-null
                   if (shmem->pages) {
                              ^
   drivers/gpu/drm/virtio/virtgpu_object.c:72:3: note: Taking true branch
                   if (shmem->pages) {
                   ^
   drivers/gpu/drm/virtio/virtgpu_object.c:73:8: note: Assuming field 'mapped' 
is 0
                           if (shmem->mapped) {
                               ^~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:73:4: note: Taking false branch
                           if (shmem->mapped) {
                           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:80:4: note: Memory is released
                           kfree(shmem->pages);
                           ^~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:112:2: note: Returning; memory was 
released
           virtio_gpu_cleanup_object(bo);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:252:3: note: Returning; memory was 
released
                   virtio_gpu_free_object(&shmem_obj->base);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:253:3: note: Use of memory after it 
is freed
                   return ret;
                   ^      ~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:260:3: warning: 4th function call 
argument is an uninitialized value [clang-analyzer-core.CallAndMessage]
                   virtio_gpu_cmd_resource_create_blob(vgdev, bo, params,
                   ^
   drivers/gpu/drm/virtio/virtgpu_object.c:219:2: note: 'ents' declared without 
an initial value
           struct virtio_gpu_mem_entry *ents;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:227:6: note: Calling 'IS_ERR'
           if (IS_ERR(shmem_obj))
               ^~~~~~~~~~~~~~~~~
   include/linux/err.h:36:9: note: Assuming the condition is false
           return IS_ERR_VALUE((unsigned long)ptr);
                  ^
   include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE'
   #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned 
long)-MAX_ERRNO)
                           
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/err.h:36:2: note: Returning zero, which participates in a 
condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:227:6: note: Returning from 'IS_ERR'
           if (IS_ERR(shmem_obj))
               ^~~~~~~~~~~~~~~~~
   drivers/gpu/drm/virtio/virtgpu_object.c:227:2: note: Taking false branch
           if (IS_ERR(shmem_obj))
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:232:6: note: 'ret' is >= 0
           if (ret < 0)
               ^~~
   drivers/gpu/drm/virtio/virtgpu_object.c:232:2: note: Taking false branch
           if (ret < 0)
           ^
   drivers/gpu/drm/virtio/virtgpu_object.c:237:6: note: Assuming 'fence' is null
           if (fence) {

vim +253 drivers/gpu/drm/virtio/virtgpu_object.c

2f2aa13724d568 Gerd Hoffmann  2020-02-07  210  
dc5698e80cf724 Dave Airlie    2013-09-09  211  int 
virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
4441235f9566e6 Gerd Hoffmann  2019-03-18  212                        struct 
virtio_gpu_object_params *params,
530b28426a94b8 Gerd Hoffmann  2019-03-18  213                        struct 
virtio_gpu_object **bo_ptr,
530b28426a94b8 Gerd Hoffmann  2019-03-18  214                        struct 
virtio_gpu_fence *fence)
dc5698e80cf724 Dave Airlie    2013-09-09  215  {
e2324300f427ff Gerd Hoffmann  2019-08-29  216   struct virtio_gpu_object_array 
*objs = NULL;
c66df701e783bc Gerd Hoffmann  2019-08-29  217   struct drm_gem_shmem_object 
*shmem_obj;
dc5698e80cf724 Dave Airlie    2013-09-09  218   struct virtio_gpu_object *bo;
2f2aa13724d568 Gerd Hoffmann  2020-02-07  219   struct virtio_gpu_mem_entry 
*ents;
2f2aa13724d568 Gerd Hoffmann  2020-02-07  220   unsigned int nents;
dc5698e80cf724 Dave Airlie    2013-09-09  221   int ret;
dc5698e80cf724 Dave Airlie    2013-09-09  222  
dc5698e80cf724 Dave Airlie    2013-09-09  223   *bo_ptr = NULL;
dc5698e80cf724 Dave Airlie    2013-09-09  224  
c66df701e783bc Gerd Hoffmann  2019-08-29  225   params->size = 
roundup(params->size, PAGE_SIZE);
c66df701e783bc Gerd Hoffmann  2019-08-29  226   shmem_obj = 
drm_gem_shmem_create(vgdev->ddev, params->size);
c66df701e783bc Gerd Hoffmann  2019-08-29  227   if (IS_ERR(shmem_obj))
c66df701e783bc Gerd Hoffmann  2019-08-29  228           return 
PTR_ERR(shmem_obj);
c66df701e783bc Gerd Hoffmann  2019-08-29  229   bo = 
gem_to_virtio_gpu_obj(&shmem_obj->base);
dc5698e80cf724 Dave Airlie    2013-09-09  230  
556c62e85f9b97 Matthew Wilcox 2018-10-30  231   ret = 
virtio_gpu_resource_id_get(vgdev, &bo->hw_res_handle);
e2324300f427ff Gerd Hoffmann  2019-08-29  232   if (ret < 0)
e2324300f427ff Gerd Hoffmann  2019-08-29  233           goto err_free_gem;
e2324300f427ff Gerd Hoffmann  2019-08-29  234  
530b28426a94b8 Gerd Hoffmann  2019-03-18  235   bo->dumb = params->dumb;
530b28426a94b8 Gerd Hoffmann  2019-03-18  236  
e2324300f427ff Gerd Hoffmann  2019-08-29  237   if (fence) {
e2324300f427ff Gerd Hoffmann  2019-08-29  238           ret = -ENOMEM;
e2324300f427ff Gerd Hoffmann  2019-08-29  239           objs = 
virtio_gpu_array_alloc(1);
e2324300f427ff Gerd Hoffmann  2019-08-29  240           if (!objs)
e2324300f427ff Gerd Hoffmann  2019-08-29  241                   goto err_put_id;
c66df701e783bc Gerd Hoffmann  2019-08-29  242           
virtio_gpu_array_add_obj(objs, &bo->base.base);
e2324300f427ff Gerd Hoffmann  2019-08-29  243  
e2324300f427ff Gerd Hoffmann  2019-08-29  244           ret = 
virtio_gpu_array_lock_resv(objs);
e2324300f427ff Gerd Hoffmann  2019-08-29  245           if (ret != 0)
e2324300f427ff Gerd Hoffmann  2019-08-29  246                   goto 
err_put_objs;
e2324300f427ff Gerd Hoffmann  2019-08-29  247   }
e2324300f427ff Gerd Hoffmann  2019-08-29  248  
2f2aa13724d568 Gerd Hoffmann  2020-02-07  249   ret = 
virtio_gpu_object_shmem_init(vgdev, bo, &ents, &nents);
2f2aa13724d568 Gerd Hoffmann  2020-02-07  250   if (ret != 0) {
377f8331d0565e xndcn          2021-03-05  251           
virtio_gpu_array_put_free(objs);
2f2aa13724d568 Gerd Hoffmann  2020-02-07  252           
virtio_gpu_free_object(&shmem_obj->base);
2f2aa13724d568 Gerd Hoffmann  2020-02-07 @253           return ret;

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to