All of lore.kernel.org
 help / color / mirror / Atom feed
* mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
@ 2021-12-05  2:33 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-12-05  2:33 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9605 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: SeongJae Park <sjpark@amazon.de>
CC: Fernand Sieber <sieberf@amazon.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   79a72162048e42a677bc7336a9f5d86fc3ff9558
commit: 75c1c2b53c78bf3b3188ebb7b3508dadbf98bba1 mm/damon/dbgfs: support multiple contexts
date:   3 months ago
:::::: branch date: 65 minutes ago
:::::: commit date: 3 months ago
config: nios2-randconfig-m031-20211202 (https://download.01.org/0day-ci/archive/20211205/202112051012.gkhSfyxT-lkp(a)intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
mm/damon/dbgfs.c:487 dbgfs_rm_context_write() warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +396 mm/damon/dbgfs.c

75c1c2b53c78bf SeongJae Park 2021-09-07  385  
75c1c2b53c78bf SeongJae Park 2021-09-07  386  static ssize_t dbgfs_mk_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  387  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  388  {
75c1c2b53c78bf SeongJae Park 2021-09-07  389  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  390  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  391  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  392  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  393  
75c1c2b53c78bf SeongJae Park 2021-09-07  394  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  395  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @396  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  397  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  398  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  399  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  400  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  401  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  402  
75c1c2b53c78bf SeongJae Park 2021-09-07  403  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  404  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  405  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  406  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  407  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  408  
75c1c2b53c78bf SeongJae Park 2021-09-07  409  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  410  	err = dbgfs_mk_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  411  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  412  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  413  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  414  
75c1c2b53c78bf SeongJae Park 2021-09-07  415  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  416  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  417  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  418  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  419  }
75c1c2b53c78bf SeongJae Park 2021-09-07  420  
75c1c2b53c78bf SeongJae Park 2021-09-07  421  /*
75c1c2b53c78bf SeongJae Park 2021-09-07  422   * Remove a context of @name and its debugfs directory.
75c1c2b53c78bf SeongJae Park 2021-09-07  423   *
75c1c2b53c78bf SeongJae Park 2021-09-07  424   * This function should be called while holding damon_dbgfs_lock.
75c1c2b53c78bf SeongJae Park 2021-09-07  425   *
75c1c2b53c78bf SeongJae Park 2021-09-07  426   * Return 0 on success, negative error code otherwise.
75c1c2b53c78bf SeongJae Park 2021-09-07  427   */
75c1c2b53c78bf SeongJae Park 2021-09-07  428  static int dbgfs_rm_context(char *name)
75c1c2b53c78bf SeongJae Park 2021-09-07  429  {
75c1c2b53c78bf SeongJae Park 2021-09-07  430  	struct dentry *root, *dir, **new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  431  	struct damon_ctx **new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  432  	int i, j;
75c1c2b53c78bf SeongJae Park 2021-09-07  433  
75c1c2b53c78bf SeongJae Park 2021-09-07  434  	if (damon_nr_running_ctxs())
75c1c2b53c78bf SeongJae Park 2021-09-07  435  		return -EBUSY;
75c1c2b53c78bf SeongJae Park 2021-09-07  436  
75c1c2b53c78bf SeongJae Park 2021-09-07  437  	root = dbgfs_dirs[0];
75c1c2b53c78bf SeongJae Park 2021-09-07  438  	if (!root)
75c1c2b53c78bf SeongJae Park 2021-09-07  439  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  440  
75c1c2b53c78bf SeongJae Park 2021-09-07  441  	dir = debugfs_lookup(name, root);
75c1c2b53c78bf SeongJae Park 2021-09-07  442  	if (!dir)
75c1c2b53c78bf SeongJae Park 2021-09-07  443  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  444  
75c1c2b53c78bf SeongJae Park 2021-09-07  445  	new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
75c1c2b53c78bf SeongJae Park 2021-09-07  446  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  447  	if (!new_dirs)
75c1c2b53c78bf SeongJae Park 2021-09-07  448  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  449  
75c1c2b53c78bf SeongJae Park 2021-09-07  450  	new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
75c1c2b53c78bf SeongJae Park 2021-09-07  451  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  452  	if (!new_ctxs) {
75c1c2b53c78bf SeongJae Park 2021-09-07  453  		kfree(new_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  454  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  455  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  456  
75c1c2b53c78bf SeongJae Park 2021-09-07  457  	for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
75c1c2b53c78bf SeongJae Park 2021-09-07  458  		if (dbgfs_dirs[i] == dir) {
75c1c2b53c78bf SeongJae Park 2021-09-07  459  			debugfs_remove(dbgfs_dirs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  460  			dbgfs_destroy_ctx(dbgfs_ctxs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  461  			continue;
75c1c2b53c78bf SeongJae Park 2021-09-07  462  		}
75c1c2b53c78bf SeongJae Park 2021-09-07  463  		new_dirs[j] = dbgfs_dirs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  464  		new_ctxs[j++] = dbgfs_ctxs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  465  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  466  
75c1c2b53c78bf SeongJae Park 2021-09-07  467  	kfree(dbgfs_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  468  	kfree(dbgfs_ctxs);
75c1c2b53c78bf SeongJae Park 2021-09-07  469  
75c1c2b53c78bf SeongJae Park 2021-09-07  470  	dbgfs_dirs = new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  471  	dbgfs_ctxs = new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  472  	dbgfs_nr_ctxs--;
75c1c2b53c78bf SeongJae Park 2021-09-07  473  
75c1c2b53c78bf SeongJae Park 2021-09-07  474  	return 0;
75c1c2b53c78bf SeongJae Park 2021-09-07  475  }
75c1c2b53c78bf SeongJae Park 2021-09-07  476  
75c1c2b53c78bf SeongJae Park 2021-09-07  477  static ssize_t dbgfs_rm_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  478  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  479  {
75c1c2b53c78bf SeongJae Park 2021-09-07  480  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  481  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  482  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  483  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  484  
75c1c2b53c78bf SeongJae Park 2021-09-07  485  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  486  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @487  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  488  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  489  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  490  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  491  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  492  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  493  
75c1c2b53c78bf SeongJae Park 2021-09-07  494  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  495  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  496  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  497  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  498  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  499  
75c1c2b53c78bf SeongJae Park 2021-09-07  500  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  501  	err = dbgfs_rm_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  502  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  503  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  504  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  505  
75c1c2b53c78bf SeongJae Park 2021-09-07  506  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  507  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  508  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  509  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  510  }
75c1c2b53c78bf SeongJae Park 2021-09-07  511  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 5+ messages in thread

* mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
@ 2022-08-21  7:02 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2022-08-21  7:02 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9567 bytes --]

BCC: lkp(a)intel.com
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: SeongJae Park <sjpark@amazon.de>
CC: Fernand Sieber <sieberf@amazon.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   15b3f48a4339e3c16acf18624e2b7f60bc5e9a2c
commit: 75c1c2b53c78bf3b3188ebb7b3508dadbf98bba1 mm/damon/dbgfs: support multiple contexts
date:   12 months ago
:::::: branch date: 9 hours ago
:::::: commit date: 12 months ago
config: parisc-randconfig-m031-20220821 (https://download.01.org/0day-ci/archive/20220821/202208211443.TXmKZTg3-lkp(a)intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
mm/damon/dbgfs.c:487 dbgfs_rm_context_write() warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +396 mm/damon/dbgfs.c

75c1c2b53c78bf SeongJae Park 2021-09-07  385  
75c1c2b53c78bf SeongJae Park 2021-09-07  386  static ssize_t dbgfs_mk_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  387  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  388  {
75c1c2b53c78bf SeongJae Park 2021-09-07  389  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  390  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  391  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  392  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  393  
75c1c2b53c78bf SeongJae Park 2021-09-07  394  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  395  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @396  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  397  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  398  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  399  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  400  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  401  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  402  
75c1c2b53c78bf SeongJae Park 2021-09-07  403  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  404  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  405  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  406  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  407  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  408  
75c1c2b53c78bf SeongJae Park 2021-09-07  409  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  410  	err = dbgfs_mk_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  411  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  412  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  413  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  414  
75c1c2b53c78bf SeongJae Park 2021-09-07  415  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  416  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  417  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  418  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  419  }
75c1c2b53c78bf SeongJae Park 2021-09-07  420  
75c1c2b53c78bf SeongJae Park 2021-09-07  421  /*
75c1c2b53c78bf SeongJae Park 2021-09-07  422   * Remove a context of @name and its debugfs directory.
75c1c2b53c78bf SeongJae Park 2021-09-07  423   *
75c1c2b53c78bf SeongJae Park 2021-09-07  424   * This function should be called while holding damon_dbgfs_lock.
75c1c2b53c78bf SeongJae Park 2021-09-07  425   *
75c1c2b53c78bf SeongJae Park 2021-09-07  426   * Return 0 on success, negative error code otherwise.
75c1c2b53c78bf SeongJae Park 2021-09-07  427   */
75c1c2b53c78bf SeongJae Park 2021-09-07  428  static int dbgfs_rm_context(char *name)
75c1c2b53c78bf SeongJae Park 2021-09-07  429  {
75c1c2b53c78bf SeongJae Park 2021-09-07  430  	struct dentry *root, *dir, **new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  431  	struct damon_ctx **new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  432  	int i, j;
75c1c2b53c78bf SeongJae Park 2021-09-07  433  
75c1c2b53c78bf SeongJae Park 2021-09-07  434  	if (damon_nr_running_ctxs())
75c1c2b53c78bf SeongJae Park 2021-09-07  435  		return -EBUSY;
75c1c2b53c78bf SeongJae Park 2021-09-07  436  
75c1c2b53c78bf SeongJae Park 2021-09-07  437  	root = dbgfs_dirs[0];
75c1c2b53c78bf SeongJae Park 2021-09-07  438  	if (!root)
75c1c2b53c78bf SeongJae Park 2021-09-07  439  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  440  
75c1c2b53c78bf SeongJae Park 2021-09-07  441  	dir = debugfs_lookup(name, root);
75c1c2b53c78bf SeongJae Park 2021-09-07  442  	if (!dir)
75c1c2b53c78bf SeongJae Park 2021-09-07  443  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  444  
75c1c2b53c78bf SeongJae Park 2021-09-07  445  	new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
75c1c2b53c78bf SeongJae Park 2021-09-07  446  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  447  	if (!new_dirs)
75c1c2b53c78bf SeongJae Park 2021-09-07  448  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  449  
75c1c2b53c78bf SeongJae Park 2021-09-07  450  	new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
75c1c2b53c78bf SeongJae Park 2021-09-07  451  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  452  	if (!new_ctxs) {
75c1c2b53c78bf SeongJae Park 2021-09-07  453  		kfree(new_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  454  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  455  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  456  
75c1c2b53c78bf SeongJae Park 2021-09-07  457  	for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
75c1c2b53c78bf SeongJae Park 2021-09-07  458  		if (dbgfs_dirs[i] == dir) {
75c1c2b53c78bf SeongJae Park 2021-09-07  459  			debugfs_remove(dbgfs_dirs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  460  			dbgfs_destroy_ctx(dbgfs_ctxs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  461  			continue;
75c1c2b53c78bf SeongJae Park 2021-09-07  462  		}
75c1c2b53c78bf SeongJae Park 2021-09-07  463  		new_dirs[j] = dbgfs_dirs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  464  		new_ctxs[j++] = dbgfs_ctxs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  465  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  466  
75c1c2b53c78bf SeongJae Park 2021-09-07  467  	kfree(dbgfs_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  468  	kfree(dbgfs_ctxs);
75c1c2b53c78bf SeongJae Park 2021-09-07  469  
75c1c2b53c78bf SeongJae Park 2021-09-07  470  	dbgfs_dirs = new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  471  	dbgfs_ctxs = new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  472  	dbgfs_nr_ctxs--;
75c1c2b53c78bf SeongJae Park 2021-09-07  473  
75c1c2b53c78bf SeongJae Park 2021-09-07  474  	return 0;
75c1c2b53c78bf SeongJae Park 2021-09-07  475  }
75c1c2b53c78bf SeongJae Park 2021-09-07  476  
75c1c2b53c78bf SeongJae Park 2021-09-07  477  static ssize_t dbgfs_rm_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  478  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  479  {
75c1c2b53c78bf SeongJae Park 2021-09-07  480  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  481  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  482  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  483  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  484  
75c1c2b53c78bf SeongJae Park 2021-09-07  485  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  486  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @487  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  488  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  489  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  490  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  491  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  492  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  493  
75c1c2b53c78bf SeongJae Park 2021-09-07  494  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  495  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  496  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  497  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  498  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  499  
75c1c2b53c78bf SeongJae Park 2021-09-07  500  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  501  	err = dbgfs_rm_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  502  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  503  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  504  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  505  
75c1c2b53c78bf SeongJae Park 2021-09-07  506  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  507  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  508  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  509  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  510  }
75c1c2b53c78bf SeongJae Park 2021-09-07  511  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 5+ messages in thread

* mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
@ 2022-03-10 18:57 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2022-03-10 18:57 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9620 bytes --]

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: SeongJae Park <sjpark@amazon.de>
CC: Fernand Sieber <sieberf@amazon.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   1db333d9a51f3459fba1bcaa564d95befe79f0b3
commit: 75c1c2b53c78bf3b3188ebb7b3508dadbf98bba1 mm/damon/dbgfs: support multiple contexts
date:   6 months ago
:::::: branch date: 7 hours ago
:::::: commit date: 6 months ago
config: arc-randconfig-m031-20220310 (https://download.01.org/0day-ci/archive/20220311/202203110217.jYqUl4Ol-lkp(a)intel.com/config)
compiler: arceb-elf-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
mm/damon/dbgfs.c:487 dbgfs_rm_context_write() warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +396 mm/damon/dbgfs.c

75c1c2b53c78bf SeongJae Park 2021-09-07  385  
75c1c2b53c78bf SeongJae Park 2021-09-07  386  static ssize_t dbgfs_mk_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  387  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  388  {
75c1c2b53c78bf SeongJae Park 2021-09-07  389  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  390  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  391  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  392  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  393  
75c1c2b53c78bf SeongJae Park 2021-09-07  394  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  395  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @396  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  397  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  398  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  399  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  400  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  401  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  402  
75c1c2b53c78bf SeongJae Park 2021-09-07  403  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  404  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  405  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  406  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  407  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  408  
75c1c2b53c78bf SeongJae Park 2021-09-07  409  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  410  	err = dbgfs_mk_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  411  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  412  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  413  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  414  
75c1c2b53c78bf SeongJae Park 2021-09-07  415  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  416  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  417  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  418  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  419  }
75c1c2b53c78bf SeongJae Park 2021-09-07  420  
75c1c2b53c78bf SeongJae Park 2021-09-07  421  /*
75c1c2b53c78bf SeongJae Park 2021-09-07  422   * Remove a context of @name and its debugfs directory.
75c1c2b53c78bf SeongJae Park 2021-09-07  423   *
75c1c2b53c78bf SeongJae Park 2021-09-07  424   * This function should be called while holding damon_dbgfs_lock.
75c1c2b53c78bf SeongJae Park 2021-09-07  425   *
75c1c2b53c78bf SeongJae Park 2021-09-07  426   * Return 0 on success, negative error code otherwise.
75c1c2b53c78bf SeongJae Park 2021-09-07  427   */
75c1c2b53c78bf SeongJae Park 2021-09-07  428  static int dbgfs_rm_context(char *name)
75c1c2b53c78bf SeongJae Park 2021-09-07  429  {
75c1c2b53c78bf SeongJae Park 2021-09-07  430  	struct dentry *root, *dir, **new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  431  	struct damon_ctx **new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  432  	int i, j;
75c1c2b53c78bf SeongJae Park 2021-09-07  433  
75c1c2b53c78bf SeongJae Park 2021-09-07  434  	if (damon_nr_running_ctxs())
75c1c2b53c78bf SeongJae Park 2021-09-07  435  		return -EBUSY;
75c1c2b53c78bf SeongJae Park 2021-09-07  436  
75c1c2b53c78bf SeongJae Park 2021-09-07  437  	root = dbgfs_dirs[0];
75c1c2b53c78bf SeongJae Park 2021-09-07  438  	if (!root)
75c1c2b53c78bf SeongJae Park 2021-09-07  439  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  440  
75c1c2b53c78bf SeongJae Park 2021-09-07  441  	dir = debugfs_lookup(name, root);
75c1c2b53c78bf SeongJae Park 2021-09-07  442  	if (!dir)
75c1c2b53c78bf SeongJae Park 2021-09-07  443  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  444  
75c1c2b53c78bf SeongJae Park 2021-09-07  445  	new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
75c1c2b53c78bf SeongJae Park 2021-09-07  446  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  447  	if (!new_dirs)
75c1c2b53c78bf SeongJae Park 2021-09-07  448  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  449  
75c1c2b53c78bf SeongJae Park 2021-09-07  450  	new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
75c1c2b53c78bf SeongJae Park 2021-09-07  451  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  452  	if (!new_ctxs) {
75c1c2b53c78bf SeongJae Park 2021-09-07  453  		kfree(new_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  454  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  455  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  456  
75c1c2b53c78bf SeongJae Park 2021-09-07  457  	for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
75c1c2b53c78bf SeongJae Park 2021-09-07  458  		if (dbgfs_dirs[i] == dir) {
75c1c2b53c78bf SeongJae Park 2021-09-07  459  			debugfs_remove(dbgfs_dirs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  460  			dbgfs_destroy_ctx(dbgfs_ctxs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  461  			continue;
75c1c2b53c78bf SeongJae Park 2021-09-07  462  		}
75c1c2b53c78bf SeongJae Park 2021-09-07  463  		new_dirs[j] = dbgfs_dirs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  464  		new_ctxs[j++] = dbgfs_ctxs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  465  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  466  
75c1c2b53c78bf SeongJae Park 2021-09-07  467  	kfree(dbgfs_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  468  	kfree(dbgfs_ctxs);
75c1c2b53c78bf SeongJae Park 2021-09-07  469  
75c1c2b53c78bf SeongJae Park 2021-09-07  470  	dbgfs_dirs = new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  471  	dbgfs_ctxs = new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  472  	dbgfs_nr_ctxs--;
75c1c2b53c78bf SeongJae Park 2021-09-07  473  
75c1c2b53c78bf SeongJae Park 2021-09-07  474  	return 0;
75c1c2b53c78bf SeongJae Park 2021-09-07  475  }
75c1c2b53c78bf SeongJae Park 2021-09-07  476  
75c1c2b53c78bf SeongJae Park 2021-09-07  477  static ssize_t dbgfs_rm_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  478  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  479  {
75c1c2b53c78bf SeongJae Park 2021-09-07  480  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  481  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  482  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  483  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  484  
75c1c2b53c78bf SeongJae Park 2021-09-07  485  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  486  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @487  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  488  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  489  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  490  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  491  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  492  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  493  
75c1c2b53c78bf SeongJae Park 2021-09-07  494  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  495  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  496  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  497  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  498  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  499  
75c1c2b53c78bf SeongJae Park 2021-09-07  500  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  501  	err = dbgfs_rm_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  502  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  503  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  504  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  505  
75c1c2b53c78bf SeongJae Park 2021-09-07  506  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  507  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  508  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  509  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  510  }
75c1c2b53c78bf SeongJae Park 2021-09-07  511  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 5+ messages in thread

* mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
@ 2021-11-24 10:57 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-11-24 10:57 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9603 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: SeongJae Park <sjpark@amazon.de>
CC: Fernand Sieber <sieberf@amazon.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   5d9f4cf36721aba199975a9be7863a3ff5cd4b59
commit: 75c1c2b53c78bf3b3188ebb7b3508dadbf98bba1 mm/damon/dbgfs: support multiple contexts
date:   3 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 3 months ago
config: nios2-randconfig-m031-20211123 (https://download.01.org/0day-ci/archive/20211124/202111241830.QLGgkn9L-lkp(a)intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
mm/damon/dbgfs.c:487 dbgfs_rm_context_write() warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +396 mm/damon/dbgfs.c

75c1c2b53c78bf SeongJae Park 2021-09-07  385  
75c1c2b53c78bf SeongJae Park 2021-09-07  386  static ssize_t dbgfs_mk_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  387  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  388  {
75c1c2b53c78bf SeongJae Park 2021-09-07  389  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  390  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  391  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  392  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  393  
75c1c2b53c78bf SeongJae Park 2021-09-07  394  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  395  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @396  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  397  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  398  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  399  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  400  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  401  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  402  
75c1c2b53c78bf SeongJae Park 2021-09-07  403  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  404  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  405  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  406  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  407  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  408  
75c1c2b53c78bf SeongJae Park 2021-09-07  409  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  410  	err = dbgfs_mk_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  411  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  412  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  413  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  414  
75c1c2b53c78bf SeongJae Park 2021-09-07  415  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  416  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  417  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  418  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  419  }
75c1c2b53c78bf SeongJae Park 2021-09-07  420  
75c1c2b53c78bf SeongJae Park 2021-09-07  421  /*
75c1c2b53c78bf SeongJae Park 2021-09-07  422   * Remove a context of @name and its debugfs directory.
75c1c2b53c78bf SeongJae Park 2021-09-07  423   *
75c1c2b53c78bf SeongJae Park 2021-09-07  424   * This function should be called while holding damon_dbgfs_lock.
75c1c2b53c78bf SeongJae Park 2021-09-07  425   *
75c1c2b53c78bf SeongJae Park 2021-09-07  426   * Return 0 on success, negative error code otherwise.
75c1c2b53c78bf SeongJae Park 2021-09-07  427   */
75c1c2b53c78bf SeongJae Park 2021-09-07  428  static int dbgfs_rm_context(char *name)
75c1c2b53c78bf SeongJae Park 2021-09-07  429  {
75c1c2b53c78bf SeongJae Park 2021-09-07  430  	struct dentry *root, *dir, **new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  431  	struct damon_ctx **new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  432  	int i, j;
75c1c2b53c78bf SeongJae Park 2021-09-07  433  
75c1c2b53c78bf SeongJae Park 2021-09-07  434  	if (damon_nr_running_ctxs())
75c1c2b53c78bf SeongJae Park 2021-09-07  435  		return -EBUSY;
75c1c2b53c78bf SeongJae Park 2021-09-07  436  
75c1c2b53c78bf SeongJae Park 2021-09-07  437  	root = dbgfs_dirs[0];
75c1c2b53c78bf SeongJae Park 2021-09-07  438  	if (!root)
75c1c2b53c78bf SeongJae Park 2021-09-07  439  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  440  
75c1c2b53c78bf SeongJae Park 2021-09-07  441  	dir = debugfs_lookup(name, root);
75c1c2b53c78bf SeongJae Park 2021-09-07  442  	if (!dir)
75c1c2b53c78bf SeongJae Park 2021-09-07  443  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  444  
75c1c2b53c78bf SeongJae Park 2021-09-07  445  	new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
75c1c2b53c78bf SeongJae Park 2021-09-07  446  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  447  	if (!new_dirs)
75c1c2b53c78bf SeongJae Park 2021-09-07  448  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  449  
75c1c2b53c78bf SeongJae Park 2021-09-07  450  	new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
75c1c2b53c78bf SeongJae Park 2021-09-07  451  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  452  	if (!new_ctxs) {
75c1c2b53c78bf SeongJae Park 2021-09-07  453  		kfree(new_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  454  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  455  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  456  
75c1c2b53c78bf SeongJae Park 2021-09-07  457  	for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
75c1c2b53c78bf SeongJae Park 2021-09-07  458  		if (dbgfs_dirs[i] == dir) {
75c1c2b53c78bf SeongJae Park 2021-09-07  459  			debugfs_remove(dbgfs_dirs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  460  			dbgfs_destroy_ctx(dbgfs_ctxs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  461  			continue;
75c1c2b53c78bf SeongJae Park 2021-09-07  462  		}
75c1c2b53c78bf SeongJae Park 2021-09-07  463  		new_dirs[j] = dbgfs_dirs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  464  		new_ctxs[j++] = dbgfs_ctxs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  465  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  466  
75c1c2b53c78bf SeongJae Park 2021-09-07  467  	kfree(dbgfs_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  468  	kfree(dbgfs_ctxs);
75c1c2b53c78bf SeongJae Park 2021-09-07  469  
75c1c2b53c78bf SeongJae Park 2021-09-07  470  	dbgfs_dirs = new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  471  	dbgfs_ctxs = new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  472  	dbgfs_nr_ctxs--;
75c1c2b53c78bf SeongJae Park 2021-09-07  473  
75c1c2b53c78bf SeongJae Park 2021-09-07  474  	return 0;
75c1c2b53c78bf SeongJae Park 2021-09-07  475  }
75c1c2b53c78bf SeongJae Park 2021-09-07  476  
75c1c2b53c78bf SeongJae Park 2021-09-07  477  static ssize_t dbgfs_rm_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  478  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  479  {
75c1c2b53c78bf SeongJae Park 2021-09-07  480  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  481  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  482  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  483  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  484  
75c1c2b53c78bf SeongJae Park 2021-09-07  485  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  486  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @487  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  488  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  489  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  490  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  491  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  492  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  493  
75c1c2b53c78bf SeongJae Park 2021-09-07  494  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  495  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  496  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  497  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  498  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  499  
75c1c2b53c78bf SeongJae Park 2021-09-07  500  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  501  	err = dbgfs_rm_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  502  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  503  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  504  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  505  
75c1c2b53c78bf SeongJae Park 2021-09-07  506  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  507  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  508  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  509  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  510  }
75c1c2b53c78bf SeongJae Park 2021-09-07  511  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 5+ messages in thread

* mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
@ 2021-09-10 13:00 kernel test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-09-10 13:00 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9527 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: SeongJae Park <sjpark@amazon.de>
CC: Fernand Sieber <sieberf@amazon.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   bf9f243f23e6623f310ba03fbb14e10ec3a61290
commit: 75c1c2b53c78bf3b3188ebb7b3508dadbf98bba1 mm/damon/dbgfs: support multiple contexts
date:   2 days ago
:::::: branch date: 14 hours ago
:::::: commit date: 2 days ago
config: i386-randconfig-m031-20210910 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR'
mm/damon/dbgfs.c:487 dbgfs_rm_context_write() warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +396 mm/damon/dbgfs.c

75c1c2b53c78bf SeongJae Park 2021-09-07  385  
75c1c2b53c78bf SeongJae Park 2021-09-07  386  static ssize_t dbgfs_mk_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  387  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  388  {
75c1c2b53c78bf SeongJae Park 2021-09-07  389  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  390  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  391  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  392  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  393  
75c1c2b53c78bf SeongJae Park 2021-09-07  394  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  395  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @396  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  397  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  398  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  399  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  400  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  401  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  402  
75c1c2b53c78bf SeongJae Park 2021-09-07  403  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  404  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  405  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  406  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  407  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  408  
75c1c2b53c78bf SeongJae Park 2021-09-07  409  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  410  	err = dbgfs_mk_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  411  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  412  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  413  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  414  
75c1c2b53c78bf SeongJae Park 2021-09-07  415  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  416  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  417  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  418  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  419  }
75c1c2b53c78bf SeongJae Park 2021-09-07  420  
75c1c2b53c78bf SeongJae Park 2021-09-07  421  /*
75c1c2b53c78bf SeongJae Park 2021-09-07  422   * Remove a context of @name and its debugfs directory.
75c1c2b53c78bf SeongJae Park 2021-09-07  423   *
75c1c2b53c78bf SeongJae Park 2021-09-07  424   * This function should be called while holding damon_dbgfs_lock.
75c1c2b53c78bf SeongJae Park 2021-09-07  425   *
75c1c2b53c78bf SeongJae Park 2021-09-07  426   * Return 0 on success, negative error code otherwise.
75c1c2b53c78bf SeongJae Park 2021-09-07  427   */
75c1c2b53c78bf SeongJae Park 2021-09-07  428  static int dbgfs_rm_context(char *name)
75c1c2b53c78bf SeongJae Park 2021-09-07  429  {
75c1c2b53c78bf SeongJae Park 2021-09-07  430  	struct dentry *root, *dir, **new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  431  	struct damon_ctx **new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  432  	int i, j;
75c1c2b53c78bf SeongJae Park 2021-09-07  433  
75c1c2b53c78bf SeongJae Park 2021-09-07  434  	if (damon_nr_running_ctxs())
75c1c2b53c78bf SeongJae Park 2021-09-07  435  		return -EBUSY;
75c1c2b53c78bf SeongJae Park 2021-09-07  436  
75c1c2b53c78bf SeongJae Park 2021-09-07  437  	root = dbgfs_dirs[0];
75c1c2b53c78bf SeongJae Park 2021-09-07  438  	if (!root)
75c1c2b53c78bf SeongJae Park 2021-09-07  439  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  440  
75c1c2b53c78bf SeongJae Park 2021-09-07  441  	dir = debugfs_lookup(name, root);
75c1c2b53c78bf SeongJae Park 2021-09-07  442  	if (!dir)
75c1c2b53c78bf SeongJae Park 2021-09-07  443  		return -ENOENT;
75c1c2b53c78bf SeongJae Park 2021-09-07  444  
75c1c2b53c78bf SeongJae Park 2021-09-07  445  	new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs),
75c1c2b53c78bf SeongJae Park 2021-09-07  446  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  447  	if (!new_dirs)
75c1c2b53c78bf SeongJae Park 2021-09-07  448  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  449  
75c1c2b53c78bf SeongJae Park 2021-09-07  450  	new_ctxs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_ctxs),
75c1c2b53c78bf SeongJae Park 2021-09-07  451  			GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  452  	if (!new_ctxs) {
75c1c2b53c78bf SeongJae Park 2021-09-07  453  		kfree(new_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  454  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  455  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  456  
75c1c2b53c78bf SeongJae Park 2021-09-07  457  	for (i = 0, j = 0; i < dbgfs_nr_ctxs; i++) {
75c1c2b53c78bf SeongJae Park 2021-09-07  458  		if (dbgfs_dirs[i] == dir) {
75c1c2b53c78bf SeongJae Park 2021-09-07  459  			debugfs_remove(dbgfs_dirs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  460  			dbgfs_destroy_ctx(dbgfs_ctxs[i]);
75c1c2b53c78bf SeongJae Park 2021-09-07  461  			continue;
75c1c2b53c78bf SeongJae Park 2021-09-07  462  		}
75c1c2b53c78bf SeongJae Park 2021-09-07  463  		new_dirs[j] = dbgfs_dirs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  464  		new_ctxs[j++] = dbgfs_ctxs[i];
75c1c2b53c78bf SeongJae Park 2021-09-07  465  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  466  
75c1c2b53c78bf SeongJae Park 2021-09-07  467  	kfree(dbgfs_dirs);
75c1c2b53c78bf SeongJae Park 2021-09-07  468  	kfree(dbgfs_ctxs);
75c1c2b53c78bf SeongJae Park 2021-09-07  469  
75c1c2b53c78bf SeongJae Park 2021-09-07  470  	dbgfs_dirs = new_dirs;
75c1c2b53c78bf SeongJae Park 2021-09-07  471  	dbgfs_ctxs = new_ctxs;
75c1c2b53c78bf SeongJae Park 2021-09-07  472  	dbgfs_nr_ctxs--;
75c1c2b53c78bf SeongJae Park 2021-09-07  473  
75c1c2b53c78bf SeongJae Park 2021-09-07  474  	return 0;
75c1c2b53c78bf SeongJae Park 2021-09-07  475  }
75c1c2b53c78bf SeongJae Park 2021-09-07  476  
75c1c2b53c78bf SeongJae Park 2021-09-07  477  static ssize_t dbgfs_rm_context_write(struct file *file,
75c1c2b53c78bf SeongJae Park 2021-09-07  478  		const char __user *buf, size_t count, loff_t *ppos)
75c1c2b53c78bf SeongJae Park 2021-09-07  479  {
75c1c2b53c78bf SeongJae Park 2021-09-07  480  	char *kbuf;
75c1c2b53c78bf SeongJae Park 2021-09-07  481  	ssize_t ret = count;
75c1c2b53c78bf SeongJae Park 2021-09-07  482  	int err;
75c1c2b53c78bf SeongJae Park 2021-09-07  483  	char *ctx_name;
75c1c2b53c78bf SeongJae Park 2021-09-07  484  
75c1c2b53c78bf SeongJae Park 2021-09-07  485  	kbuf = user_input_str(buf, count, ppos);
75c1c2b53c78bf SeongJae Park 2021-09-07  486  	if (IS_ERR(kbuf))
75c1c2b53c78bf SeongJae Park 2021-09-07 @487  		return PTR_ERR(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  488  	ctx_name = kmalloc(count + 1, GFP_KERNEL);
75c1c2b53c78bf SeongJae Park 2021-09-07  489  	if (!ctx_name) {
75c1c2b53c78bf SeongJae Park 2021-09-07  490  		kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  491  		return -ENOMEM;
75c1c2b53c78bf SeongJae Park 2021-09-07  492  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  493  
75c1c2b53c78bf SeongJae Park 2021-09-07  494  	/* Trim white space */
75c1c2b53c78bf SeongJae Park 2021-09-07  495  	if (sscanf(kbuf, "%s", ctx_name) != 1) {
75c1c2b53c78bf SeongJae Park 2021-09-07  496  		ret = -EINVAL;
75c1c2b53c78bf SeongJae Park 2021-09-07  497  		goto out;
75c1c2b53c78bf SeongJae Park 2021-09-07  498  	}
75c1c2b53c78bf SeongJae Park 2021-09-07  499  
75c1c2b53c78bf SeongJae Park 2021-09-07  500  	mutex_lock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  501  	err = dbgfs_rm_context(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  502  	if (err)
75c1c2b53c78bf SeongJae Park 2021-09-07  503  		ret = err;
75c1c2b53c78bf SeongJae Park 2021-09-07  504  	mutex_unlock(&damon_dbgfs_lock);
75c1c2b53c78bf SeongJae Park 2021-09-07  505  
75c1c2b53c78bf SeongJae Park 2021-09-07  506  out:
75c1c2b53c78bf SeongJae Park 2021-09-07  507  	kfree(kbuf);
75c1c2b53c78bf SeongJae Park 2021-09-07  508  	kfree(ctx_name);
75c1c2b53c78bf SeongJae Park 2021-09-07  509  	return ret;
75c1c2b53c78bf SeongJae Park 2021-09-07  510  }
75c1c2b53c78bf SeongJae Park 2021-09-07  511  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34146 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-08-21  7:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-05  2:33 mm/damon/dbgfs.c:396 dbgfs_mk_context_write() warn: passing a valid pointer to 'PTR_ERR' kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2022-08-21  7:02 kernel test robot
2022-03-10 18:57 kernel test robot
2021-11-24 10:57 kernel test robot
2021-09-10 13:00 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.