Hi Chen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on next-20260130]

url:    
https://github.com/intel-lab-lkp/linux/commits/Chen-Ridong/cgroup-dmem-fix-NULL-pointer-dereference-when-setting-max/20260131-173002
base:   next-20260130
patch link:    
https://lore.kernel.org/r/20260131091202.344788-2-chenridong%40huaweicloud.com
patch subject: [PATCH -next 1/3] cgroup/dmem: fix NULL pointer dereference when 
setting max
config: x86_64-randconfig-161-20260131 
(https://download.01.org/0day-ci/archive/20260201/[email protected]/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 
87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
smatch version: v0.5.0-8994-gd50c5a4c
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20260201/[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 warnings (new ones prefixed by >>):

>> kernel/cgroup/dmem.c:703:7: warning: variable 'region' is used uninitialized 
>> whenever 'if' condition is true [-Wsometimes-uninitialized]
     703 |                 if (!options || !*options) {
         |                     ^~~~~~~~~~~~~~~~~~~~~
   kernel/cgroup/dmem.c:729:13: note: uninitialized use occurs here
     729 |                 kref_put(&region->ref, dmemcg_free_region);
         |                           ^~~~~~
   kernel/cgroup/dmem.c:703:3: note: remove the 'if' if its condition is always 
false
     703 |                 if (!options || !*options) {
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
     704 |                         err = -EINVAL;
         |                         ~~~~~~~~~~~~~~
     705 |                         goto out_put;
         |                         ~~~~~~~~~~~~~
     706 |                 }
         |                 ~
>> kernel/cgroup/dmem.c:703:7: warning: variable 'region' is used uninitialized 
>> whenever '||' condition is true [-Wsometimes-uninitialized]
     703 |                 if (!options || !*options) {
         |                     ^~~~~~~~
   kernel/cgroup/dmem.c:729:13: note: uninitialized use occurs here
     729 |                 kref_put(&region->ref, dmemcg_free_region);
         |                           ^~~~~~
   kernel/cgroup/dmem.c:703:7: note: remove the '||' if its condition is always 
false
     703 |                 if (!options || !*options) {
         |                     ^~~~~~~~~~~
   kernel/cgroup/dmem.c:685:36: note: initialize the variable 'region' to 
silence this warning
     685 |                 struct dmem_cgroup_region *region;
         |                                                  ^
         |                                                   = NULL
   2 warnings generated.


vim +703 kernel/cgroup/dmem.c

   674  
   675  static ssize_t dmemcg_limit_write(struct kernfs_open_file *of,
   676                                   char *buf, size_t nbytes, loff_t off,
   677                                   void (*apply)(struct 
dmem_cgroup_pool_state *, u64))
   678  {
   679          struct dmemcg_state *dmemcs = css_to_dmemcs(of_css(of));
   680          int err = 0;
   681  
   682          while (buf && !err) {
   683                  struct dmem_cgroup_pool_state *pool = NULL;
   684                  char *options, *region_name;
   685                  struct dmem_cgroup_region *region;
   686                  u64 new_limit;
   687  
   688                  options = buf;
   689                  buf = strchr(buf, '\n');
   690                  if (buf)
   691                          *buf++ = '\0';
   692  
   693                  options = strstrip(options);
   694  
   695                  /* eat empty lines */
   696                  if (!options[0])
   697                          continue;
   698  
   699                  region_name = strsep(&options, " \t");
   700                  if (!region_name[0])
   701                          continue;
   702  
 > 703                  if (!options || !*options) {
   704                          err = -EINVAL;
   705                          goto out_put;
   706                  }
   707  
   708                  rcu_read_lock();
   709                  region = dmemcg_get_region_by_name(region_name);
   710                  rcu_read_unlock();
   711  
   712                  if (!region)
   713                          return -EINVAL;
   714  
   715                  err = dmemcg_parse_limit(options, region, &new_limit);
   716                  if (err < 0)
   717                          goto out_put;
   718  
   719                  pool = get_cg_pool_unlocked(dmemcs, region);
   720                  if (IS_ERR(pool)) {
   721                          err = PTR_ERR(pool);
   722                          goto out_put;
   723                  }
   724  
   725                  /* And commit */
   726                  apply(pool, new_limit);
   727  
   728  out_put:
   729                  kref_put(&region->ref, dmemcg_free_region);
   730          }
   731  
   732  
   733          return err ?: nbytes;
   734  }
   735  

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

Reply via email to