From: Dan Carpenter <dan.carpenter@oracle.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [gfs2:for-next.bob7e 4/13] fs/gfs2/super.c:1494 gfs2_evict_inode() warn: variable dereferenced before check 'ip->i_gl' (see line 1444)
Date: Thu, 3 Sep 2020 15:16:35 +0300 [thread overview]
Message-ID: <20200903121635.GC8299@kadam> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git for-next.bob7e
head: 3bf4dea2e4dafeb54864937fbc2209cc5760d06b
commit: 702eb236642082541af33b509af9f046a0152a65 [4/13] gfs2: truncate glock address space pages during evict
config: x86_64-randconfig-m001-20200902 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 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:
fs/gfs2/super.c:1494 gfs2_evict_inode() warn: variable dereferenced before check 'ip->i_gl' (see line 1444)
# https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git/commit/?id=702eb236642082541af33b509af9f046a0152a65
git remote add gfs2 https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
git fetch --no-tags gfs2 for-next.bob7e
git checkout 702eb236642082541af33b509af9f046a0152a65
vim +1494 fs/gfs2/super.c
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1430 static void gfs2_evict_inode(struct inode *inode)
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1431 {
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1432 struct super_block *sb = inode->i_sb;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1433 struct gfs2_sbd *sdp = sb->s_fs_info;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1434 struct gfs2_inode *ip = GFS2_I(inode);
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1435 struct gfs2_holder gh;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1436 struct address_space *metamapping;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1437 int error;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1438
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1439 if (test_bit(GIF_FREE_VFS_INODE, &ip->i_flags)) {
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1440 clear_inode(inode);
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1441 return;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1442 }
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1443
702eb236642082 Bob Peterson 2020-09-01 @1444 metamapping = gfs2_glock2aspace(ip->i_gl);
^^^^^^^^
Unchecked dereference in new code.
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1445 if (inode->i_nlink || sb_rdonly(sb))
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1446 goto out;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1447
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1448 gfs2_holder_mark_uninitialized(&gh);
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1449 error = evict_unlinked(inode, &gh);
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1450 if (error == -EEXIST) /* this gets ignored */
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1451 goto out;
f1aeb35cc28dc6 Bob Peterson 2020-09-01 1452 if (error)
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1453 goto out_unlock;
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1454
805c090750a315 Bob Peterson 2018-01-08 1455 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL |
805c090750a315 Bob Peterson 2018-01-08 1456 GFS2_LFC_EVICT_INODE);
2216db70c95a96 Benjamin Marzinski 2012-09-20 1457 if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) {
2216db70c95a96 Benjamin Marzinski 2012-09-20 1458 filemap_fdatawrite(metamapping);
2216db70c95a96 Benjamin Marzinski 2012-09-20 1459 filemap_fdatawait(metamapping);
2216db70c95a96 Benjamin Marzinski 2012-09-20 1460 }
40ac218f52aa5c Steven Whitehouse 2011-08-02 1461 write_inode_now(inode, 1);
b5b24d7aeb9608 Steven Whitehouse 2011-09-07 1462 gfs2_ail_flush(ip->i_gl, 0);
40ac218f52aa5c Steven Whitehouse 2011-08-02 1463
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1464 error = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1465 if (error)
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1466 goto out_unlock;
380f7c65a7eb32 Steven Whitehouse 2011-07-14 1467 /* Needs to be done before glock release & also in a transaction */
380f7c65a7eb32 Steven Whitehouse 2011-07-14 1468 truncate_inode_pages(&inode->i_data, 0);
ee530beafeca98 Bob Peterson 2015-12-07 1469 truncate_inode_pages(metamapping, 0);
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1470 gfs2_trans_end(sdp);
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1471
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1472 out_unlock:
a097dc7e24cba7 Bob Peterson 2015-07-16 1473 if (gfs2_rs_active(&ip->i_res))
a097dc7e24cba7 Bob Peterson 2015-07-16 1474 gfs2_rs_deltree(&ip->i_res);
8e2e00473598dd Bob Peterson 2012-07-19 1475
240c6235dfe4fe Bob Peterson 2017-07-18 1476 if (gfs2_holder_initialized(&gh)) {
240c6235dfe4fe Bob Peterson 2017-07-18 1477 glock_clear_object(ip->i_gl, ip);
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1478 gfs2_glock_dq_uninit(&gh);
240c6235dfe4fe Bob Peterson 2017-07-18 1479 }
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1480 if (error && error != GLR_TRYFAILED && error != -EROFS)
d5c1515cf37495 Al Viro 2010-06-07 1481 fs_warn(sdp, "gfs2_evict_inode: %d\n", error);
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1482 out:
702eb236642082 Bob Peterson 2020-09-01 1483 /* The following calls to truncate_inode_pages_final are not within
702eb236642082 Bob Peterson 2020-09-01 1484 * a transaction, so it's a bug if the inode still has dirty pages. */
702eb236642082 Bob Peterson 2020-09-01 1485 BUG_ON(!gfs2_withdrawn(sdp) && inode->i_state & I_DIRTY);
91b0abe36a7b2b Johannes Weiner 2014-04-03 1486 truncate_inode_pages_final(&inode->i_data);
702eb236642082 Bob Peterson 2020-09-01 1487 truncate_inode_pages_final(metamapping);
2fba46a04c383f Bob Peterson 2020-02-27 1488 if (ip->i_qadata)
2fba46a04c383f Bob Peterson 2020-02-27 1489 gfs2_assert_warn(sdp, ip->i_qadata->qa_ref == 0);
1595548fe72ca8 Andreas Gruenbacher 2020-03-06 1490 gfs2_rs_delete(ip, NULL);
4513899092b325 Steven Whitehouse 2013-01-28 1491 gfs2_ordered_del_inode(ip);
dbd5768f87ff6f Jan Kara 2012-05-03 1492 clear_inode(inode);
17d539f0499fa2 Steven Whitehouse 2011-06-15 1493 gfs2_dir_hash_inval(ip);
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 @1494 if (ip->i_gl) {
^^^^^^^^
January code assumes it can be NULL.
df3d87bde12121 Bob Peterson 2017-07-18 1495 glock_clear_object(ip->i_gl, ip);
4fd1a5795214bc Andreas Gruenbacher 2017-06-30 1496 wait_on_bit_io(&ip->i_flags, GIF_GLOP_PENDING, TASK_UNINTERRUPTIBLE);
29687a2ac8dfcd Steven Whitehouse 2011-03-30 1497 gfs2_glock_add_to_lru(ip->i_gl);
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1498 gfs2_glock_put_eventually(ip->i_gl);
d5c1515cf37495 Al Viro 2010-06-07 1499 ip->i_gl = NULL;
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 1500 }
6df9f9a253c7dc Andreas Gruenbacher 2016-06-17 1501 if (gfs2_holder_initialized(&ip->i_iopen_gh)) {
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1502 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1503
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1504 glock_clear_object(gl, ip);
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 1505 if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) {
a6a4d98b0124b5 Bob Peterson 2013-05-29 1506 ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 1507 gfs2_glock_dq(&ip->i_iopen_gh);
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 1508 }
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1509 gfs2_glock_hold(gl);
40e7e86ef16550 Andreas Gruenbacher 2020-01-24 1510 gfs2_holder_uninit(&ip->i_iopen_gh);
71c1b2136835c8 Andreas Gruenbacher 2017-08-01 1511 gfs2_glock_put_eventually(gl);
d5c1515cf37495 Al Viro 2010-06-07 1512 }
9e6e0a128bca0a Steven Whitehouse 2009-05-22 1513 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 29174 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20200903/719665eb/attachment.gz>
reply other threads:[~2020-09-03 12:16 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20200903121635.GC8299@kadam \
--to=dan.carpenter@oracle.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).