* [kdave-btrfs-devel:misc-next 128/167] fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
@ 2020-02-08 8:18 ` Dan Carpenter
0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2020-02-08 8:18 UTC (permalink / raw)
To: kbuild
[-- 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
^ permalink raw reply [flat|nested] 2+ messages in thread* [kdave-btrfs-devel:misc-next 128/167] fs/btrfs/ioctl.c:2556 btrfs_search_path_in_tree_user() error: uninitialized symbol 'root'.
@ 2020-02-08 8:18 ` Dan Carpenter
0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2020-02-08 8:18 UTC (permalink / raw)
To: kbuild-all
[-- 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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-02-08 8:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2020-02-08 8:18 ` Dan Carpenter
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.