:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check warning: security/loadpin/loadpin.c:264:15: warning: use of uninitialized value '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]" ::::::
CC: [email protected] BCC: [email protected] CC: [email protected] TO: Matthias Kaehlcke <[email protected]> CC: Kees Cook <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/kspp head: 27603a606fda0806d7c08914bc976931aa42020e commit: 3f805f8cc23ba35679dd01446929292911c2b469 [6/11] LoadPin: Enable loading from trusted dm-verity devices :::::: branch date: 4 days ago :::::: commit date: 4 weeks ago config: arm-randconfig-c002-20220731 (https://download.01.org/0day-ci/archive/20220802/[email protected]/config) compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?id=3f805f8cc23ba35679dd01446929292911c2b469 git remote add kees https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git git fetch --no-tags kees for-next/kspp git checkout 3f805f8cc23ba35679dd01446929292911c2b469 # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> gcc-analyzer warnings: (new ones prefixed by >>) security/loadpin/loadpin.c: In function 'read_trusted_verity_root_digests': >> security/loadpin/loadpin.c:264:15: warning: use of uninitialized value >> '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 264 | void *data; | ^~~~ 'read_trusted_verity_root_digests': event 1 | | 264 | void *data; | | ^~~~ | | | | | (1) use of uninitialized value '<unknown>' here | security/loadpin/loadpin.c:266:15: warning: use of uninitialized value '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 266 | char *p, *d; | ^ 'read_trusted_verity_root_digests': event 1 | | 266 | char *p, *d; | | ^ | | | | | (1) use of uninitialized value '<unknown>' here | security/loadpin/loadpin.c: In function 'dm_verity_ioctl': security/loadpin/loadpin.c:358:22: warning: use of uninitialized value '<unknown>' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 358 | unsigned int fd; | ^~ 'dm_verity_ioctl': event 1 | | 358 | unsigned int fd; | | ^~ | | | | | (1) use of uninitialized value '<unknown>' here | vim +264 security/loadpin/loadpin.c 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 260 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 261 static int read_trusted_verity_root_digests(unsigned int fd) 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 262 { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 263 struct fd f; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 @264 void *data; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 265 int rc; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 266 char *p, *d; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 267 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 268 if (deny_reading_verity_digests) 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 269 return -EPERM; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 270 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 271 /* The list of trusted root digests can only be set up once */ 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 272 if (!list_empty(&dm_verity_loadpin_trusted_root_digests)) 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 273 return -EPERM; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 274 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 275 f = fdget(fd); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 276 if (!f.file) 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 277 return -EINVAL; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 278 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 279 data = kzalloc(SZ_4K, GFP_KERNEL); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 280 if (!data) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 281 rc = -ENOMEM; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 282 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 283 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 284 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 285 rc = kernel_read_file(f.file, 0, (void **)&data, SZ_4K - 1, NULL, READING_POLICY); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 286 if (rc < 0) 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 287 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 288 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 289 p = data; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 290 p[rc] = '\0'; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 291 p = strim(p); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 292 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 293 p = strim(data); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 294 while ((d = strsep(&p, "\n")) != NULL) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 295 int len = strlen(d); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 296 struct dm_verity_loadpin_trusted_root_digest *trd; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 297 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 298 if (len % 2) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 299 rc = -EPROTO; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 300 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 301 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 302 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 303 len /= 2; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 304 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 305 trd = kzalloc(struct_size(trd, data, len), GFP_KERNEL); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 306 if (!trd) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 307 rc = -ENOMEM; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 308 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 309 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 310 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 311 if (hex2bin(trd->data, d, len)) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 312 kfree(trd); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 313 rc = -EPROTO; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 314 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 315 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 316 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 317 trd->len = len; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 318 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 319 list_add_tail(&trd->node, &dm_verity_loadpin_trusted_root_digests); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 320 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 321 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 322 if (list_empty(&dm_verity_loadpin_trusted_root_digests)) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 323 rc = -EPROTO; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 324 goto err; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 325 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 326 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 327 kfree(data); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 328 fdput(f); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 329 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 330 return 0; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 331 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 332 err: 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 333 kfree(data); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 334 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 335 /* any failure in loading/parsing invalidates the entire list */ 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 336 { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 337 struct dm_verity_loadpin_trusted_root_digest *trd, *tmp; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 338 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 339 list_for_each_entry_safe(trd, tmp, &dm_verity_loadpin_trusted_root_digests, node) { 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 340 list_del(&trd->node); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 341 kfree(trd); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 342 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 343 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 344 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 345 /* disallow further attempts after reading a corrupt/invalid file */ 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 346 deny_reading_verity_digests = true; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 347 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 348 fdput(f); 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 349 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 350 return rc; 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 351 } 3f805f8cc23ba3 Matthias Kaehlcke 2022-06-27 352 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
