Re: [PATCH] fix: drm/vmwgfx: vmw_user_shader_alloc: fix base object refcount leak on ttm_base_object_init failure

kernel test robot <[email protected]>
Newsgroups org.kernel.vger.stable,dev.linux.lists.oe-kbuild-all,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi WenTao,

kernel test robot noticed the following build errors:

[auto build test ERROR on drm-misc/drm-misc-next]
[also build test ERROR on daeinki-drm-exynos/exynos-drm-next drm/drm-next drm-i915/for-linux-next drm-i915/for-linux-next-fixes drm-tip/drm-tip linus/master v7.2-rc6 next-20260806]
[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/WenTao-Liang/fix-drm-vmwgfx-vmw_user_shader_alloc-fix-base-object-refcount-leak-on-ttm_base_object_init-failure/20260807-080356
base:   https://gitlab.freedesktop.org/drm/misc/kernel.git drm-misc-next
patch link:    https://lore.kernel.org/r/20260626150142.49732-1-vulab%40iscas.ac.cn
patch subject: [PATCH] fix: drm/vmwgfx: vmw_user_shader_alloc: fix base object refcount leak on ttm_base_object_init failure
config: i386-allmodconfig (https://download.01.org/0day-ci/archive/20260808/[email protected]/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260808/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

   drivers/gpu/drm/vmwgfx/vmwgfx_shader.c: In function 'vmw_user_shader_alloc':
>> drivers/gpu/drm/vmwgfx/vmwgfx_shader.c:727:39: error: passing argument 1 of 'ttm_base_object_unref' from incompatible pointer type [-Wincompatible-pointer-types]
     727 |                 ttm_base_object_unref(&ushader->base);
         |                                       ^~~~~~~~~~~~~~
         |                                       |
         |                                       struct ttm_base_object *
   In file included from drivers/gpu/drm/vmwgfx/vmwgfx_drv.h:27,
                    from drivers/gpu/drm/vmwgfx/vmwgfx_shader.c:32:
   drivers/gpu/drm/vmwgfx/ttm_object.h:192:60: note: expected 'struct ttm_base_object **' but argument is of type 'struct ttm_base_object *'
     192 | extern void ttm_base_object_unref(struct ttm_base_object **p_base);
         |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~


vim +/ttm_base_object_unref +727 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c

   684	
   685	static int vmw_user_shader_alloc(struct vmw_private *dev_priv,
   686					 struct vmw_bo *buffer,
   687					 size_t shader_size,
   688					 size_t offset,
   689					 SVGA3dShaderType shader_type,
   690					 uint8_t num_input_sig,
   691					 uint8_t num_output_sig,
   692					 struct ttm_object_file *tfile,
   693					 u32 *handle)
   694	{
   695		struct vmw_user_shader *ushader;
   696		struct vmw_resource *res, *tmp;
   697		int ret;
   698	
   699		ushader = kzalloc_obj(*ushader);
   700		if (unlikely(!ushader)) {
   701			ret = -ENOMEM;
   702			goto out;
   703		}
   704	
   705		res = &ushader->shader.res;
   706		ushader->base.shareable = false;
   707		ushader->base.tfile = NULL;
   708	
   709		/*
   710		 * From here on, the destructor takes over resource freeing.
   711		 */
   712	
   713		ret = vmw_gb_shader_init(dev_priv, res, shader_size,
   714					 offset, shader_type, num_input_sig,
   715					 num_output_sig, buffer,
   716					 vmw_user_shader_free);
   717		if (unlikely(ret != 0))
   718			goto out;
   719	
   720		tmp = vmw_resource_reference(res);
   721		ret = ttm_base_object_init(tfile, &ushader->base, false,
   722					   VMW_RES_SHADER,
   723					   &vmw_user_shader_base_release);
   724	
   725		if (unlikely(ret != 0)) {
   726			vmw_resource_unreference(&tmp);
 > 727			ttm_base_object_unref(&ushader->base);
   728			goto out_err;
   729		}
   730	
   731		if (handle)
   732			*handle = ushader->base.handle;
   733	out_err:
   734		vmw_resource_unreference(&res);
   735	out:
   736		return ret;
   737	}
   738	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.