From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: [kdave-btrfs-devel:misc-next 128/167] fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
Date: Sat, 08 Feb 2020 11:18:33 +0300 [thread overview]
Message-ID: <20200208081832.GP24804@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 14126 bytes --]
tree: https://github.com/kdave/btrfs-devel.git misc-next
head: 23ba1a90f0571d91b55bdfef7f06f380a74e8475
commit: b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5 [128/167] btrfs: hold a ref on the root in btrfs_search_path_in_tree_user
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
Old smatch warnings:
fs/btrfs/ioctl.c:1566 btrfs_defrag_file() warn: should 'ret << 12' be a 64 bit type?
fs/btrfs/ioctl.c:3326 btrfs_extent_same() error: uninitialized symbol 'ret'.
fs/btrfs/ioctl.c:3738 btrfs_clone() error: uninitialized symbol 'trans'.
# https://github.com/kdave/btrfs-devel/commit/b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5
git remote add kdave-btrfs-devel https://github.com/kdave/btrfs-devel.git
git remote update kdave-btrfs-devel
git checkout b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5
vim +/root +2556 fs/btrfs/ioctl.c
ac8e9819d71f907 Chris Mason 2010-02-28 2391
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2392 static int btrfs_search_path_in_tree_user(struct inode *inode,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2393 struct btrfs_ioctl_ino_lookup_user_args *args)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2394 {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2395 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2396 struct super_block *sb = inode->i_sb;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2397 struct btrfs_key upper_limit = BTRFS_I(inode)->location;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2398 u64 treeid = BTRFS_I(inode)->root->root_key.objectid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2399 u64 dirid = args->dirid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2400 unsigned long item_off;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2401 unsigned long item_len;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2402 struct btrfs_inode_ref *iref;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2403 struct btrfs_root_ref *rref;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2404 struct btrfs_root *root;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2405 struct btrfs_path *path;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2406 struct btrfs_key key, key2;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2407 struct extent_buffer *leaf;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2408 struct inode *temp_inode;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2409 char *ptr;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2410 int slot;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2411 int len;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2412 int total_len = 0;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2413 int ret;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2414
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2415 path = btrfs_alloc_path();
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2416 if (!path)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2417 return -ENOMEM;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2418
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2419 /*
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2420 * If the bottom subvolume does not exist directly under upper_limit,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2421 * construct the path in from the bottom up.
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2422 */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2423 if (dirid != upper_limit.objectid) {
"root" not initialized on the == path.
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2424 ptr = &args->path[BTRFS_INO_LOOKUP_USER_PATH_MAX - 1];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2425
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2426 key.objectid = treeid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2427 key.type = BTRFS_ROOT_ITEM_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2428 key.offset = (u64)-1;
5312026004a7157 Josef Bacik 2020-01-24 2429 root = btrfs_get_fs_root(fs_info, &key, true);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2430 if (IS_ERR(root)) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2431 ret = PTR_ERR(root);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2432 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2433 }
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2434 if (!btrfs_grab_fs_root(root)) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2435 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2436 goto out;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2437 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2438
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2439 key.objectid = dirid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2440 key.type = BTRFS_INODE_REF_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2441 key.offset = (u64)-1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2442 while (1) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2443 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2444 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2445 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2446 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2447 ret = btrfs_previous_item(root, path, dirid,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2448 BTRFS_INODE_REF_KEY);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2449 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2450 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2451 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2452 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2453 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2454 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2455 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2456
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2457 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2458 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2459 btrfs_item_key_to_cpu(leaf, &key, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2460
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2461 iref = btrfs_item_ptr(leaf, slot, struct btrfs_inode_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2462 len = btrfs_inode_ref_name_len(leaf, iref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2463 ptr -= len + 1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2464 total_len += len + 1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2465 if (ptr < args->path) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2466 ret = -ENAMETOOLONG;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2467 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2468 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2469
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2470 *(ptr + len) = '/';
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2471 read_extent_buffer(leaf, ptr,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2472 (unsigned long)(iref + 1), len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2473
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2474 /* Check the read+exec permission of this directory */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2475 ret = btrfs_previous_item(root, path, dirid,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2476 BTRFS_INODE_ITEM_KEY);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2477 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2478 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2479 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2480 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2481 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2482 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2483
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2484 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2485 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2486 btrfs_item_key_to_cpu(leaf, &key2, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2487 if (key2.objectid != dirid) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2488 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2489 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2490 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2491
4c66e0d4243bb88 David Sterba 2019-10-03 2492 temp_inode = btrfs_iget(sb, &key2, root);
3ca57bd620639ee Misono Tomohiro 2018-06-04 2493 if (IS_ERR(temp_inode)) {
3ca57bd620639ee Misono Tomohiro 2018-06-04 2494 ret = PTR_ERR(temp_inode);
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2495 goto out_put;
3ca57bd620639ee Misono Tomohiro 2018-06-04 2496 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2497 ret = inode_permission(temp_inode, MAY_READ | MAY_EXEC);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2498 iput(temp_inode);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2499 if (ret) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2500 ret = -EACCES;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2501 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2502 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2503
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2504 if (key.offset == upper_limit.objectid)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2505 break;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2506 if (key.objectid == BTRFS_FIRST_FREE_OBJECTID) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2507 ret = -EACCES;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2508 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2509 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2510
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2511 btrfs_release_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2512 key.objectid = key.offset;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2513 key.offset = (u64)-1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2514 dirid = key.objectid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2515 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2516
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2517 memmove(args->path, ptr, total_len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2518 args->path[total_len] = '\0';
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2519 btrfs_put_fs_root(root);
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2520 root = NULL;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2521 btrfs_release_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2522 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2523
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2524 /* Get the bottom subvolume's name from ROOT_REF */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2525 key.objectid = treeid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2526 key.type = BTRFS_ROOT_REF_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2527 key.offset = args->treeid;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2528 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2529 if (ret < 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2530 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2531 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2532 ret = -ENOENT;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2533 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2534 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2535
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2536 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2537 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2538 btrfs_item_key_to_cpu(leaf, &key, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2539
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2540 item_off = btrfs_item_ptr_offset(leaf, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2541 item_len = btrfs_item_size_nr(leaf, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2542 /* Check if dirid in ROOT_REF corresponds to passed dirid */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2543 rref = btrfs_item_ptr(leaf, slot, struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2544 if (args->dirid != btrfs_root_ref_dirid(leaf, rref)) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2545 ret = -EINVAL;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2546 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2547 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2548
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2549 /* Copy subvolume's name */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2550 item_off += sizeof(struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2551 item_len -= sizeof(struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2552 read_extent_buffer(leaf, args->name, item_off, item_len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2553 args->name[item_len] = 0;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2554
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2555 out_put:
b84c85bbf5fc9bc Josef Bacik 2020-01-24 @2556 btrfs_put_fs_root(root);
^^^^
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2557 out:
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2558 btrfs_free_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2559 return ret;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2560 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2561
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [kdave-btrfs-devel:misc-next 128/167] fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
Date: Sat, 08 Feb 2020 11:18:33 +0300 [thread overview]
Message-ID: <20200208081832.GP24804@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 14126 bytes --]
tree: https://github.com/kdave/btrfs-devel.git misc-next
head: 23ba1a90f0571d91b55bdfef7f06f380a74e8475
commit: b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5 [128/167] btrfs: hold a ref on the root in btrfs_search_path_in_tree_user
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
Old smatch warnings:
fs/btrfs/ioctl.c:1566 btrfs_defrag_file() warn: should 'ret << 12' be a 64 bit type?
fs/btrfs/ioctl.c:3326 btrfs_extent_same() error: uninitialized symbol 'ret'.
fs/btrfs/ioctl.c:3738 btrfs_clone() error: uninitialized symbol 'trans'.
# https://github.com/kdave/btrfs-devel/commit/b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5
git remote add kdave-btrfs-devel https://github.com/kdave/btrfs-devel.git
git remote update kdave-btrfs-devel
git checkout b84c85bbf5fc9bce14edeb33768d0cc1d8bc91d5
vim +/root +2556 fs/btrfs/ioctl.c
ac8e9819d71f907 Chris Mason 2010-02-28 2391
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2392 static int btrfs_search_path_in_tree_user(struct inode *inode,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2393 struct btrfs_ioctl_ino_lookup_user_args *args)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2394 {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2395 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2396 struct super_block *sb = inode->i_sb;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2397 struct btrfs_key upper_limit = BTRFS_I(inode)->location;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2398 u64 treeid = BTRFS_I(inode)->root->root_key.objectid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2399 u64 dirid = args->dirid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2400 unsigned long item_off;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2401 unsigned long item_len;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2402 struct btrfs_inode_ref *iref;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2403 struct btrfs_root_ref *rref;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2404 struct btrfs_root *root;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2405 struct btrfs_path *path;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2406 struct btrfs_key key, key2;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2407 struct extent_buffer *leaf;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2408 struct inode *temp_inode;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2409 char *ptr;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2410 int slot;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2411 int len;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2412 int total_len = 0;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2413 int ret;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2414
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2415 path = btrfs_alloc_path();
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2416 if (!path)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2417 return -ENOMEM;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2418
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2419 /*
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2420 * If the bottom subvolume does not exist directly under upper_limit,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2421 * construct the path in from the bottom up.
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2422 */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2423 if (dirid != upper_limit.objectid) {
"root" not initialized on the == path.
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2424 ptr = &args->path[BTRFS_INO_LOOKUP_USER_PATH_MAX - 1];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2425
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2426 key.objectid = treeid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2427 key.type = BTRFS_ROOT_ITEM_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2428 key.offset = (u64)-1;
5312026004a7157 Josef Bacik 2020-01-24 2429 root = btrfs_get_fs_root(fs_info, &key, true);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2430 if (IS_ERR(root)) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2431 ret = PTR_ERR(root);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2432 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2433 }
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2434 if (!btrfs_grab_fs_root(root)) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2435 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2436 goto out;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2437 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2438
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2439 key.objectid = dirid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2440 key.type = BTRFS_INODE_REF_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2441 key.offset = (u64)-1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2442 while (1) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2443 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2444 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2445 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2446 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2447 ret = btrfs_previous_item(root, path, dirid,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2448 BTRFS_INODE_REF_KEY);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2449 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2450 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2451 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2452 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2453 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2454 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2455 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2456
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2457 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2458 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2459 btrfs_item_key_to_cpu(leaf, &key, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2460
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2461 iref = btrfs_item_ptr(leaf, slot, struct btrfs_inode_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2462 len = btrfs_inode_ref_name_len(leaf, iref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2463 ptr -= len + 1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2464 total_len += len + 1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2465 if (ptr < args->path) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2466 ret = -ENAMETOOLONG;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2467 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2468 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2469
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2470 *(ptr + len) = '/';
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2471 read_extent_buffer(leaf, ptr,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2472 (unsigned long)(iref + 1), len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2473
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2474 /* Check the read+exec permission of this directory */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2475 ret = btrfs_previous_item(root, path, dirid,
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2476 BTRFS_INODE_ITEM_KEY);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2477 if (ret < 0) {
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2478 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2479 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2480 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2481 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2482 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2483
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2484 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2485 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2486 btrfs_item_key_to_cpu(leaf, &key2, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2487 if (key2.objectid != dirid) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2488 ret = -ENOENT;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2489 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2490 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2491
4c66e0d4243bb88 David Sterba 2019-10-03 2492 temp_inode = btrfs_iget(sb, &key2, root);
3ca57bd620639ee Misono Tomohiro 2018-06-04 2493 if (IS_ERR(temp_inode)) {
3ca57bd620639ee Misono Tomohiro 2018-06-04 2494 ret = PTR_ERR(temp_inode);
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2495 goto out_put;
3ca57bd620639ee Misono Tomohiro 2018-06-04 2496 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2497 ret = inode_permission(temp_inode, MAY_READ | MAY_EXEC);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2498 iput(temp_inode);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2499 if (ret) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2500 ret = -EACCES;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2501 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2502 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2503
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2504 if (key.offset == upper_limit.objectid)
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2505 break;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2506 if (key.objectid == BTRFS_FIRST_FREE_OBJECTID) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2507 ret = -EACCES;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2508 goto out_put;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2509 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2510
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2511 btrfs_release_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2512 key.objectid = key.offset;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2513 key.offset = (u64)-1;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2514 dirid = key.objectid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2515 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2516
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2517 memmove(args->path, ptr, total_len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2518 args->path[total_len] = '\0';
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2519 btrfs_put_fs_root(root);
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2520 root = NULL;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2521 btrfs_release_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2522 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2523
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2524 /* Get the bottom subvolume's name from ROOT_REF */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2525 key.objectid = treeid;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2526 key.type = BTRFS_ROOT_REF_KEY;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2527 key.offset = args->treeid;
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2528 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2529 if (ret < 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2530 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2531 } else if (ret > 0) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2532 ret = -ENOENT;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2533 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2534 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2535
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2536 leaf = path->nodes[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2537 slot = path->slots[0];
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2538 btrfs_item_key_to_cpu(leaf, &key, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2539
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2540 item_off = btrfs_item_ptr_offset(leaf, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2541 item_len = btrfs_item_size_nr(leaf, slot);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2542 /* Check if dirid in ROOT_REF corresponds to passed dirid */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2543 rref = btrfs_item_ptr(leaf, slot, struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2544 if (args->dirid != btrfs_root_ref_dirid(leaf, rref)) {
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2545 ret = -EINVAL;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2546 goto out;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2547 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2548
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2549 /* Copy subvolume's name */
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2550 item_off += sizeof(struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2551 item_len -= sizeof(struct btrfs_root_ref);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2552 read_extent_buffer(leaf, args->name, item_off, item_len);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2553 args->name[item_len] = 0;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2554
b84c85bbf5fc9bc Josef Bacik 2020-01-24 2555 out_put:
b84c85bbf5fc9bc Josef Bacik 2020-01-24 @2556 btrfs_put_fs_root(root);
^^^^
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2557 out:
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2558 btrfs_free_path(path);
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2559 return ret;
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2560 }
23d0b79dfaed230 Tomohiro Misono 2018-05-21 2561
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2020-02-08 8:18 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-08 8:18 Dan Carpenter [this message]
2020-02-08 8:18 ` [kdave-btrfs-devel:misc-next 128/167] fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root' Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200208081832.GP24804@kadam \
--to=dan.carpenter@oracle.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.