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