Messages in this thread |  | | Date | Thu, 14 Jul 2022 20:23:59 +0800 | From | kernel test robot <> | Subject | [tglx-devel:depthtracking 35/38] arch/x86/kernel/callthunks.c:411:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true |
| |
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git depthtracking head: 81d2c1b17a61bfeca4b92a5d6e1fb6f5ff464826 commit: 57b6f2ca7edda679f0a9fe58087ecc9dd9f8dafb [35/38] kprobes: Add callthunk blacklisting config: x86_64-randconfig-a005 (https://download.01.org/0day-ci/archive/20220714/202207142029.dpdKYPLD-lkp@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 5e61b9c556267086ef9b743a0b57df302eef831b) 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/tglx/devel.git/commit/?id=57b6f2ca7edda679f0a9fe58087ecc9dd9f8dafb git remote add tglx-devel https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git git fetch --no-tags tglx-devel depthtracking git checkout 57b6f2ca7edda679f0a9fe58087ecc9dd9f8dafb # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/
If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> arch/x86/kernel/callthunks.c:411:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] if (!vbuf) ^~~~~ arch/x86/kernel/callthunks.c:475:9: note: uninitialized use occurs here return ret; ^~~ arch/x86/kernel/callthunks.c:411:3: note: remove the 'if' if its condition is always false if (!vbuf) ^~~~~~~~~~ arch/x86/kernel/callthunks.c:375:9: note: initialize the variable 'ret' to silence this warning int ret, text_size, size; ^ = 0 1 warning generated.
vim +411 arch/x86/kernel/callthunks.c
25cd68b763b44e Thomas Gleixner 2022-06-18 367 02b09aaafc9a43 Thomas Gleixner 2022-06-18 368 static __init_or_module int callthunks_setup(struct callthunk_sites *cs, 02b09aaafc9a43 Thomas Gleixner 2022-06-18 369 struct module_layout *layout) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 370 { 02b09aaafc9a43 Thomas Gleixner 2022-06-18 371 u8 *tp, *thunk, *buffer, *vbuf = NULL; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 372 struct paravirt_patch_site *pv; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 373 unsigned int nthunks, bitpos; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 374 struct thunk_mem_area *area; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 375 int ret, text_size, size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 376 s32 *s; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 377 02b09aaafc9a43 Thomas Gleixner 2022-06-18 378 lockdep_assert_held(&text_mutex); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 379 02b09aaafc9a43 Thomas Gleixner 2022-06-18 380 prdbg("Setup %s\n", layout_getname(layout)); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 381 /* Calculate the number of thunks required */ 02b09aaafc9a43 Thomas Gleixner 2022-06-18 382 nthunks = cs->syms_end - cs->syms_start; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 383 nthunks += cs->pv_end - cs->pv_start; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 384 02b09aaafc9a43 Thomas Gleixner 2022-06-18 385 /* 02b09aaafc9a43 Thomas Gleixner 2022-06-18 386 * thunk_size can be 0 when there are no intra module calls, 02b09aaafc9a43 Thomas Gleixner 2022-06-18 387 * but there might be still sites to patch. 02b09aaafc9a43 Thomas Gleixner 2022-06-18 388 */ 02b09aaafc9a43 Thomas Gleixner 2022-06-18 389 if (!nthunks) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 390 goto patch; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 391 02b09aaafc9a43 Thomas Gleixner 2022-06-18 392 area = callthunks_alloc(nthunks); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 393 if (!area) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 394 return -ENOMEM; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 395 02b09aaafc9a43 Thomas Gleixner 2022-06-18 396 bitpos = area->start; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 397 thunk = area->tmem->base + bitpos * callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 398 tp = thunk; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 399 02b09aaafc9a43 Thomas Gleixner 2022-06-18 400 prdbg("Thunk %px\n", tp); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 401 /* 02b09aaafc9a43 Thomas Gleixner 2022-06-18 402 * If the memory area is already RX, use a temporary 02b09aaafc9a43 Thomas Gleixner 2022-06-18 403 * buffer. Otherwise just copy into the unused area 02b09aaafc9a43 Thomas Gleixner 2022-06-18 404 */ 02b09aaafc9a43 Thomas Gleixner 2022-06-18 405 if (!area->tmem->is_rx) { 02b09aaafc9a43 Thomas Gleixner 2022-06-18 406 prdbg("Using thunk direct\n"); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 407 buffer = thunk; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 408 } else { 02b09aaafc9a43 Thomas Gleixner 2022-06-18 409 size = nthunks * callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 410 vbuf = vmalloc(size); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 @411 if (!vbuf) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 412 goto fail; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 413 memset(vbuf, INT3_INSN_OPCODE, size); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 414 buffer = vbuf; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 415 prdbg("Using thunk vbuf %px\n", vbuf); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 416 } 02b09aaafc9a43 Thomas Gleixner 2022-06-18 417 02b09aaafc9a43 Thomas Gleixner 2022-06-18 418 for (s = cs->syms_start; s < cs->syms_end; s++, bitpos++) { 02b09aaafc9a43 Thomas Gleixner 2022-06-18 419 void *dest = (void *)s + *s; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 420 02b09aaafc9a43 Thomas Gleixner 2022-06-18 421 ret = callthunk_setup_one(dest, tp, buffer, layout); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 422 if (ret) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 423 goto fail; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 424 buffer += callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 425 tp += callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 426 bitmap_set(area->tmem->map, bitpos, 1); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 427 area->nthunks++; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 428 } 02b09aaafc9a43 Thomas Gleixner 2022-06-18 429 02b09aaafc9a43 Thomas Gleixner 2022-06-18 430 for (pv = cs->pv_start; pv < cs->pv_end; pv++, bitpos++) { 02b09aaafc9a43 Thomas Gleixner 2022-06-18 431 ret = callthunk_setup_one(pv->instr, tp, buffer, layout); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 432 if (ret) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 433 goto fail; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 434 buffer += callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 435 tp += callthunk_desc.thunk_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 436 bitmap_set(area->tmem->map, bitpos, 1); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 437 area->nthunks++; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 438 } 02b09aaafc9a43 Thomas Gleixner 2022-06-18 439 02b09aaafc9a43 Thomas Gleixner 2022-06-18 440 text_size = tp - thunk; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 441 prdbg("Thunk %px .. %px 0x%x\n", thunk, tp, text_size); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 442 02b09aaafc9a43 Thomas Gleixner 2022-06-18 443 /* 02b09aaafc9a43 Thomas Gleixner 2022-06-18 444 * If thunk memory is already RX, poke the buffer into it. 02b09aaafc9a43 Thomas Gleixner 2022-06-18 445 * Otherwise make the memory RX. 02b09aaafc9a43 Thomas Gleixner 2022-06-18 446 */ 02b09aaafc9a43 Thomas Gleixner 2022-06-18 447 if (vbuf) 02b09aaafc9a43 Thomas Gleixner 2022-06-18 448 text_poke_copy_locked(thunk, vbuf, text_size); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 449 else 02b09aaafc9a43 Thomas Gleixner 2022-06-18 450 callthunk_area_set_rx(area); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 451 sync_core(); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 452 25cd68b763b44e Thomas Gleixner 2022-06-18 453 ret = callthunk_set_modname(layout); 25cd68b763b44e Thomas Gleixner 2022-06-18 454 if (ret) 25cd68b763b44e Thomas Gleixner 2022-06-18 455 goto fail; 25cd68b763b44e Thomas Gleixner 2022-06-18 456 02b09aaafc9a43 Thomas Gleixner 2022-06-18 457 layout->base = thunk; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 458 layout->size = text_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 459 layout->text_size = text_size; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 460 layout->arch_data = area; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 461 02b09aaafc9a43 Thomas Gleixner 2022-06-18 462 vfree(vbuf); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 463 02b09aaafc9a43 Thomas Gleixner 2022-06-18 464 patch: 02b09aaafc9a43 Thomas Gleixner 2022-06-18 465 prdbg("Patching call sites %s\n", layout_getname(layout)); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 466 patch_call_sites(cs->call_start, cs->call_end, layout); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 467 patch_paravirt_call_sites(cs->pv_start, cs->pv_end, layout); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 468 prdbg("Patching call sites done%s\n", layout_getname(layout)); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 469 return 0; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 470 02b09aaafc9a43 Thomas Gleixner 2022-06-18 471 fail: 02b09aaafc9a43 Thomas Gleixner 2022-06-18 472 WARN_ON_ONCE(ret); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 473 callthunk_free(area, false); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 474 vfree(vbuf); 02b09aaafc9a43 Thomas Gleixner 2022-06-18 475 return ret; 02b09aaafc9a43 Thomas Gleixner 2022-06-18 476 } 02b09aaafc9a43 Thomas Gleixner 2022-06-18 477
:::::: The code at line 411 was first introduced by commit :::::: 02b09aaafc9a439ca50cc049e98f7cc945e5b294 x86/callthunks: Add call patching for call depth tracking
:::::: TO: Thomas Gleixner <tglx@linutronix.de> :::::: CC: Thomas Gleixner <tglx@linutronix.de>
-- 0-DAY CI Kernel Test Service https://01.org/lkp
|  |