Skip to contentSkip to conversation

btrfs: root->fs_info cleanup, add fs_info convenience variables

bug report Dan Carpenter 2 participants 2 messages Dec 22, 2016 Btrfs file system

lore
Share & tools
lore
#0 lore raw

Hello Jeff Mahoney,

This is a semi-automatic email about new static checker warnings.

The patch 0b246afa62b0: "btrfs: root->fs_info cleanup, add fs_info convenience variables" from Jun 22, 2016, leads to the following Smatch complaint:

fs/btrfs/export.c:238 btrfs_get_name()
warn: variable dereferenced before check 'inode' (see line 226)

fs/btrfs/export.c
225 struct inode *dir = d_inode(parent);

   226		struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
                                                         ^^^^^^^^^^^

Patch adds dereference.

227 struct btrfs_path *path;
228 struct btrfs_root *root = BTRFS_I(dir)->root;
229 struct btrfs_inode_ref *iref;
230 struct btrfs_root_ref *rref;
231 struct extent_buffer *leaf;
232 unsigned long name_ptr;
233 struct btrfs_key key;
234 int name_len;
235 int ret;
236 u64 ino;
237
238 if (!dir || !inode)

                             ^^^^^

Old code checked for NULL.

239 return -EINVAL;
240

regards,
dan carpenter

#1 lore raw
Quoted 3 lines · Dan Carpenter

Hello Jeff Mahoney,

This is a semi-automatic email about new static checker warnings.

Hi Dan -

Thanks for the report. We've already seen this one and the right fix is to remove the checks in btrfs_get_name since exportfs won't pass negative dentries. The original reporter has submitted a patch for that.

-Jeff

Quoted 34 lines

The patch 0b246afa62b0: "btrfs: root->fs_info cleanup, add fs_info convenience variables" from Jun 22, 2016, leads to the following Smatch complaint:

fs/btrfs/export.c:238 btrfs_get_name()
warn: variable dereferenced before check 'inode' (see line 226)

fs/btrfs/export.c

   225		struct inode *dir = d_inode(parent);
   226		struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
                                                         ^^^^^^^^^^^

Patch adds dereference.

   227		struct btrfs_path *path;
   228		struct btrfs_root *root = BTRFS_I(dir)->root;
   229		struct btrfs_inode_ref *iref;
   230		struct btrfs_root_ref *rref;
   231		struct extent_buffer *leaf;
   232		unsigned long name_ptr;
   233		struct btrfs_key key;
   234		int name_len;
   235		int ret;
   236		u64 ino;
   237	
   238		if (!dir || !inode)
                             ^^^^^

Old code checked for NULL.

   239			return -EINVAL;
   240	

regards,
dan carpenter

Signature · 2 lines
Jeff Mahoney
SUSE Labs