Hi Christian,
url:
https://github.com/0day-ci/linux/commits/Christian-Brauner/cachefiles-do-...
base: 1e28eed17697bcf343c6743f0028cc3b5dd88bf0
config: x86_64-randconfig-m001-20210317 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
New smatch warnings:
fs/cachefiles/bind.c:247 cachefiles_daemon_add_cache() error: uninitialized symbol
'root'.
vim +/root +247 fs/cachefiles/bind.c
9ae326a69004de David Howells 2009-04-03 81 static int
cachefiles_daemon_add_cache(struct cachefiles_cache *cache)
9ae326a69004de David Howells 2009-04-03 82 {
9ae326a69004de David Howells 2009-04-03 83 struct cachefiles_object *fsdef;
b0446be4be4476 Al Viro 2009-08-09 84 struct path path;
9ae326a69004de David Howells 2009-04-03 85 struct kstatfs stats;
9ae326a69004de David Howells 2009-04-03 86 struct dentry *graveyard, *cachedir,
*root;
9ae326a69004de David Howells 2009-04-03 87 const struct cred *saved_cred;
9ae326a69004de David Howells 2009-04-03 88 int ret;
9ae326a69004de David Howells 2009-04-03 89
9ae326a69004de David Howells 2009-04-03 90 _enter("");
9ae326a69004de David Howells 2009-04-03 91
9ae326a69004de David Howells 2009-04-03 92 /* we want to work under the
module's security ID */
9ae326a69004de David Howells 2009-04-03 93 ret =
cachefiles_get_security_ID(cache);
9ae326a69004de David Howells 2009-04-03 94 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 95 return ret;
9ae326a69004de David Howells 2009-04-03 96
9ae326a69004de David Howells 2009-04-03 97 cachefiles_begin_secure(cache,
&saved_cred);
9ae326a69004de David Howells 2009-04-03 98
9ae326a69004de David Howells 2009-04-03 99 /* allocate the root index object
*/
9ae326a69004de David Howells 2009-04-03 100 ret = -ENOMEM;
9ae326a69004de David Howells 2009-04-03 101
9ae326a69004de David Howells 2009-04-03 102 fsdef =
kmem_cache_alloc(cachefiles_object_jar, GFP_KERNEL);
9ae326a69004de David Howells 2009-04-03 103 if (!fsdef)
9ae326a69004de David Howells 2009-04-03 104 goto error_root_object;
9ae326a69004de David Howells 2009-04-03 105
9ae326a69004de David Howells 2009-04-03 106 ASSERTCMP(fsdef->backer, ==,
NULL);
9ae326a69004de David Howells 2009-04-03 107
9ae326a69004de David Howells 2009-04-03 108 atomic_set(&fsdef->usage,
1);
9ae326a69004de David Howells 2009-04-03 109 fsdef->type =
FSCACHE_COOKIE_TYPE_INDEX;
9ae326a69004de David Howells 2009-04-03 110
9ae326a69004de David Howells 2009-04-03 111 _debug("- fsdef %p",
fsdef);
9ae326a69004de David Howells 2009-04-03 112
9ae326a69004de David Howells 2009-04-03 113 /* look up the directory at the root
of the cache */
b0446be4be4476 Al Viro 2009-08-09 114 ret =
kern_path(cache->rootdirname, LOOKUP_DIRECTORY, &path);
9ae326a69004de David Howells 2009-04-03 115 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 116 goto error_open_root;
9ae326a69004de David Howells 2009-04-03 117
b2653f9eca0ed7 Christian Brauner 2021-03-16 118 ret = -EINVAL;
b2653f9eca0ed7 Christian Brauner 2021-03-16 119 if (mnt_user_ns(path.mnt) !=
&init_user_ns)
b2653f9eca0ed7 Christian Brauner 2021-03-16 120 goto error_unsupported;
^^^^^^^^^^^^^^^^^^^^^^^
Needs to be moved after we initialize root.
b2653f9eca0ed7 Christian Brauner 2021-03-16 121
b0446be4be4476 Al Viro 2009-08-09 122 cache->mnt = path.mnt;
b0446be4be4476 Al Viro 2009-08-09 123 root = path.dentry;
^^^^^^^^^^^^^^^^^^
Here
9ae326a69004de David Howells 2009-04-03 124
9ae326a69004de David Howells 2009-04-03 125 /* check parameters */
9ae326a69004de David Howells 2009-04-03 126 ret = -EOPNOTSUPP;
466b77bc954c23 David Howells 2015-03-17 127 if (d_is_negative(root) ||
466b77bc954c23 David Howells 2015-03-17 128
!d_backing_inode(root)->i_op->lookup ||
466b77bc954c23 David Howells 2015-03-17 129
!d_backing_inode(root)->i_op->mkdir ||
5d6c31910bc071 Andreas Gruenbacher 2016-09-29 130
!(d_backing_inode(root)->i_opflags & IOP_XATTR) ||
9ae326a69004de David Howells 2009-04-03 131
!root->d_sb->s_op->statfs ||
9ae326a69004de David Howells 2009-04-03 132
!root->d_sb->s_op->sync_fs)
9ae326a69004de David Howells 2009-04-03 133 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 134
9ae326a69004de David Howells 2009-04-03 135 ret = -EROFS;
bc98a42c1f7d0f David Howells 2017-07-17 136 if (sb_rdonly(root->d_sb))
9ae326a69004de David Howells 2009-04-03 137 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 138
9ae326a69004de David Howells 2009-04-03 139 /* determine the security of the
on-disk cache as this governs
9ae326a69004de David Howells 2009-04-03 140 * security ID of files we create
*/
9ae326a69004de David Howells 2009-04-03 141 ret =
cachefiles_determine_cache_security(cache, root, &saved_cred);
9ae326a69004de David Howells 2009-04-03 142 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 143 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 144
9ae326a69004de David Howells 2009-04-03 145 /* get the cache size and blocksize
*/
ebabe9a9001af0 Christoph Hellwig 2010-07-07 146 ret = vfs_statfs(&path,
&stats);
9ae326a69004de David Howells 2009-04-03 147 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 148 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 149
9ae326a69004de David Howells 2009-04-03 150 ret = -ERANGE;
9ae326a69004de David Howells 2009-04-03 151 if (stats.f_bsize <= 0)
9ae326a69004de David Howells 2009-04-03 152 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 153
9ae326a69004de David Howells 2009-04-03 154 ret = -EOPNOTSUPP;
9ae326a69004de David Howells 2009-04-03 155 if (stats.f_bsize > PAGE_SIZE)
9ae326a69004de David Howells 2009-04-03 156 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 157
9ae326a69004de David Howells 2009-04-03 158 cache->bsize = stats.f_bsize;
9ae326a69004de David Howells 2009-04-03 159 cache->bshift = 0;
9ae326a69004de David Howells 2009-04-03 160 if (stats.f_bsize < PAGE_SIZE)
9ae326a69004de David Howells 2009-04-03 161 cache->bshift = PAGE_SHIFT -
ilog2(stats.f_bsize);
9ae326a69004de David Howells 2009-04-03 162
9ae326a69004de David Howells 2009-04-03 163 _debug("blksize %u (shift
%u)",
9ae326a69004de David Howells 2009-04-03 164 cache->bsize,
cache->bshift);
9ae326a69004de David Howells 2009-04-03 165
9ae326a69004de David Howells 2009-04-03 166 _debug("size %llu, avail
%llu",
9ae326a69004de David Howells 2009-04-03 167 (unsigned long long)
stats.f_blocks,
9ae326a69004de David Howells 2009-04-03 168 (unsigned long long)
stats.f_bavail);
9ae326a69004de David Howells 2009-04-03 169
9ae326a69004de David Howells 2009-04-03 170 /* set up caching limits */
9ae326a69004de David Howells 2009-04-03 171 do_div(stats.f_files, 100);
9ae326a69004de David Howells 2009-04-03 172 cache->fstop = stats.f_files *
cache->fstop_percent;
9ae326a69004de David Howells 2009-04-03 173 cache->fcull = stats.f_files *
cache->fcull_percent;
9ae326a69004de David Howells 2009-04-03 174 cache->frun = stats.f_files *
cache->frun_percent;
9ae326a69004de David Howells 2009-04-03 175
9ae326a69004de David Howells 2009-04-03 176 _debug("limits {%llu,%llu,%llu}
files",
9ae326a69004de David Howells 2009-04-03 177 (unsigned long long)
cache->frun,
9ae326a69004de David Howells 2009-04-03 178 (unsigned long long)
cache->fcull,
9ae326a69004de David Howells 2009-04-03 179 (unsigned long long)
cache->fstop);
9ae326a69004de David Howells 2009-04-03 180
9ae326a69004de David Howells 2009-04-03 181 stats.f_blocks >>=
cache->bshift;
9ae326a69004de David Howells 2009-04-03 182 do_div(stats.f_blocks, 100);
9ae326a69004de David Howells 2009-04-03 183 cache->bstop = stats.f_blocks *
cache->bstop_percent;
9ae326a69004de David Howells 2009-04-03 184 cache->bcull = stats.f_blocks *
cache->bcull_percent;
9ae326a69004de David Howells 2009-04-03 185 cache->brun = stats.f_blocks *
cache->brun_percent;
9ae326a69004de David Howells 2009-04-03 186
9ae326a69004de David Howells 2009-04-03 187 _debug("limits {%llu,%llu,%llu}
blocks",
9ae326a69004de David Howells 2009-04-03 188 (unsigned long long)
cache->brun,
9ae326a69004de David Howells 2009-04-03 189 (unsigned long long)
cache->bcull,
9ae326a69004de David Howells 2009-04-03 190 (unsigned long long)
cache->bstop);
9ae326a69004de David Howells 2009-04-03 191
9ae326a69004de David Howells 2009-04-03 192 /* get the cache directory and check
its type */
9ae326a69004de David Howells 2009-04-03 193 cachedir =
cachefiles_get_directory(cache, root, "cache");
9ae326a69004de David Howells 2009-04-03 194 if (IS_ERR(cachedir)) {
9ae326a69004de David Howells 2009-04-03 195 ret = PTR_ERR(cachedir);
9ae326a69004de David Howells 2009-04-03 196 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 197 }
9ae326a69004de David Howells 2009-04-03 198
9ae326a69004de David Howells 2009-04-03 199 fsdef->dentry = cachedir;
9ae326a69004de David Howells 2009-04-03 200 fsdef->fscache.cookie = NULL;
9ae326a69004de David Howells 2009-04-03 201
9ae326a69004de David Howells 2009-04-03 202 ret =
cachefiles_check_object_type(fsdef);
9ae326a69004de David Howells 2009-04-03 203 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 204 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 205
9ae326a69004de David Howells 2009-04-03 206 /* get the graveyard directory */
9ae326a69004de David Howells 2009-04-03 207 graveyard =
cachefiles_get_directory(cache, root, "graveyard");
9ae326a69004de David Howells 2009-04-03 208 if (IS_ERR(graveyard)) {
9ae326a69004de David Howells 2009-04-03 209 ret = PTR_ERR(graveyard);
9ae326a69004de David Howells 2009-04-03 210 goto error_unsupported;
9ae326a69004de David Howells 2009-04-03 211 }
9ae326a69004de David Howells 2009-04-03 212
9ae326a69004de David Howells 2009-04-03 213 cache->graveyard = graveyard;
9ae326a69004de David Howells 2009-04-03 214
9ae326a69004de David Howells 2009-04-03 215 /* publish the cache */
9ae326a69004de David Howells 2009-04-03 216
fscache_init_cache(&cache->cache,
9ae326a69004de David Howells 2009-04-03 217 &cachefiles_cache_ops,
9ae326a69004de David Howells 2009-04-03 218 "%s",
9ae326a69004de David Howells 2009-04-03 219
fsdef->dentry->d_sb->s_id);
9ae326a69004de David Howells 2009-04-03 220
f29507ce667010 Kiran Kumar Modukuri 2018-06-21 221
fscache_object_init(&fsdef->fscache, &fscache_fsdef_index,
f29507ce667010 Kiran Kumar Modukuri 2018-06-21 222 &cache->cache);
9ae326a69004de David Howells 2009-04-03 223
9ae326a69004de David Howells 2009-04-03 224 ret =
fscache_add_cache(&cache->cache, &fsdef->fscache, cache->tag);
9ae326a69004de David Howells 2009-04-03 225 if (ret < 0)
9ae326a69004de David Howells 2009-04-03 226 goto error_add_cache;
9ae326a69004de David Howells 2009-04-03 227
9ae326a69004de David Howells 2009-04-03 228 /* done */
9ae326a69004de David Howells 2009-04-03 229 set_bit(CACHEFILES_READY,
&cache->flags);
9ae326a69004de David Howells 2009-04-03 230 dput(root);
9ae326a69004de David Howells 2009-04-03 231
0227d6abb37845 Fabian Frederick 2014-06-06 232 pr_info("File cache on %s
registered\n", cache->cache.identifier);
9ae326a69004de David Howells 2009-04-03 233
9ae326a69004de David Howells 2009-04-03 234 /* check how much space the cache
has */
9ae326a69004de David Howells 2009-04-03 235 cachefiles_has_space(cache, 0, 0);
9ae326a69004de David Howells 2009-04-03 236 cachefiles_end_secure(cache,
saved_cred);
9ae326a69004de David Howells 2009-04-03 237 return 0;
9ae326a69004de David Howells 2009-04-03 238
9ae326a69004de David Howells 2009-04-03 239 error_add_cache:
9ae326a69004de David Howells 2009-04-03 240 dput(cache->graveyard);
9ae326a69004de David Howells 2009-04-03 241 cache->graveyard = NULL;
9ae326a69004de David Howells 2009-04-03 242 error_unsupported:
9ae326a69004de David Howells 2009-04-03 243 mntput(cache->mnt);
9ae326a69004de David Howells 2009-04-03 244 cache->mnt = NULL;
9ae326a69004de David Howells 2009-04-03 245 dput(fsdef->dentry);
9ae326a69004de David Howells 2009-04-03 246 fsdef->dentry = NULL;
9ae326a69004de David Howells 2009-04-03 @247 dput(root);
^^^^^^^^^^
9ae326a69004de David Howells 2009-04-03 248 error_open_root:
9ae326a69004de David Howells 2009-04-03 249
kmem_cache_free(cachefiles_object_jar, fsdef);
9ae326a69004de David Howells 2009-04-03 250 error_root_object:
9ae326a69004de David Howells 2009-04-03 251 cachefiles_end_secure(cache,
saved_cred);
6ff66ac77aeaa9 Fabian Frederick 2014-09-25 252 pr_err("Failed to register:
%d\n", ret);
9ae326a69004de David Howells 2009-04-03 253 return ret;
9ae326a69004de David Howells 2009-04-03 254 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org