All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.