* [rppt:perm_alloc/v0 9/13] arch/x86/kernel/ftrace.c:418:44: warning: variable 'npages' is uninitialized when used here
@ 2023-05-31 18:41 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-05-31 18:41 UTC (permalink / raw)
To: Song Liu; +Cc: llvm, oe-kbuild-all, Mike Rapoport
tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git perm_alloc/v0
head: a92ef5aa5306aeaadefc1625e1a48c6832aa0a26
commit: b99e562f2ff2ff567b283d6502986246ab698544 [9/13] x86: prepare to allocate exectuatble memory as ROX
config: x86_64-randconfig-a011-20230531 (https://download.01.org/0day-ci/archive/20230601/202306010220.wZPmbp7W-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
mkdir -p ~/bin
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/rppt/linux.git/commit/?id=b99e562f2ff2ff567b283d6502986246ab698544
git remote add rppt https://git.kernel.org/pub/scm/linux/kernel/git/rppt/linux.git
git fetch --no-tags rppt perm_alloc/v0
git checkout b99e562f2ff2ff567b283d6502986246ab698544
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/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>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306010220.wZPmbp7W-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> arch/x86/kernel/ftrace.c:418:44: warning: variable 'npages' is uninitialized when used here [-Wuninitialized]
set_memory_rox((unsigned long)trampoline, npages);
^~~~~~
arch/x86/kernel/ftrace.c:316:22: note: initialize the variable 'npages' to silence this warning
unsigned long npages;
^
= 0
1 warning generated.
vim +/npages +418 arch/x86/kernel/ftrace.c
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 306)
aec0be2d6e9f02 Steven Rostedt (Red Hat 2014-11-18 307) static unsigned long
aec0be2d6e9f02 Steven Rostedt (Red Hat 2014-11-18 308) create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 309) {
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 310) unsigned long start_offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 311) unsigned long end_offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 312) unsigned long op_offset;
768ae4406a5cab Peter Zijlstra 2019-08-26 313 unsigned long call_offset;
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 314) unsigned long jmp_offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 315) unsigned long offset;
3c0dab44e22782 Nadav Amit 2019-04-25 316 unsigned long npages;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 317) unsigned long size;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 318) unsigned long *ptr;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 319) void *trampoline;
ee3e2469b3463d Peter Zijlstra 2022-09-15 320 void *ip, *dest;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 321) /* 48 8b 15 <offset> is movq <offset>(%rip), %rdx */
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 322) unsigned const char op_ref[] = { 0x48, 0x8b, 0x15 };
e52fc2cf3f6628 Peter Zijlstra 2022-03-08 323 unsigned const char retq[] = { RET_INSN_OPCODE, INT3_INSN_OPCODE };
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 324) union ftrace_op_code_union op_ptr;
b99e562f2ff2ff Song Liu 2023-05-25 325 void *ret;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 326)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 327) if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 328) start_offset = (unsigned long)ftrace_regs_caller;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 329) end_offset = (unsigned long)ftrace_regs_caller_end;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 330) op_offset = (unsigned long)ftrace_regs_caller_op_ptr;
768ae4406a5cab Peter Zijlstra 2019-08-26 331 call_offset = (unsigned long)ftrace_regs_call;
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 332) jmp_offset = (unsigned long)ftrace_regs_caller_jmp;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 333) } else {
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 334) start_offset = (unsigned long)ftrace_caller;
0298739b7983cf Peter Zijlstra 2020-04-01 335 end_offset = (unsigned long)ftrace_caller_end;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 336) op_offset = (unsigned long)ftrace_caller_op_ptr;
768ae4406a5cab Peter Zijlstra 2019-08-26 337 call_offset = (unsigned long)ftrace_call;
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 338) jmp_offset = 0;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 339) }
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 340)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 341) size = end_offset - start_offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 342)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 343) /*
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 344) * Allocate enough size to store the ftrace_caller code,
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 345) * the iret , as well as the address of the ftrace_ops this
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 346) * trampoline is used for.
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 347) */
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 348) trampoline = alloc_tramp(size + RET_SIZE + sizeof(void *));
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 349) if (!trampoline)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 350) return 0;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 351)
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 352) *tramp_size = size + RET_SIZE + sizeof(void *);
aec0be2d6e9f02 Steven Rostedt (Red Hat 2014-11-18 353)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 354) /* Copy ftrace_caller onto the trampoline memory */
b99e562f2ff2ff Song Liu 2023-05-25 355 ret = text_poke_copy(trampoline, (void *)start_offset, size);
b99e562f2ff2ff Song Liu 2023-05-25 356 if (WARN_ON(!ret))
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 357) goto fail;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 358)
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 359) ip = trampoline + size;
1f001e9da6bbf4 Peter Zijlstra 2022-06-14 360 if (cpu_feature_enabled(X86_FEATURE_RETHUNK))
770ae1b709528a Peter Zijlstra 2022-09-15 361 __text_gen_insn(ip, JMP32_INSN_OPCODE, ip, x86_return_thunk, JMP32_INSN_SIZE);
1f001e9da6bbf4 Peter Zijlstra 2022-06-14 362 else
b99e562f2ff2ff Song Liu 2023-05-25 363 text_poke_copy(ip, retq, sizeof(retq));
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 364)
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 365) /* No need to test direct calls on created trampolines */
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 366) if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 367) /* NOP the jnz 1f; but make sure it's a 2 byte jnz */
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 368) ip = trampoline + (jmp_offset - start_offset);
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 369) if (WARN_ON(*(char *)ip != 0x75))
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 370) goto fail;
b99e562f2ff2ff Song Liu 2023-05-25 371 if (!text_poke_copy(ip, x86_nops[2], 2))
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 372) goto fail;
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 373) }
fe58acefd5a66d Steven Rostedt (VMware 2020-04-22 374)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 375) /*
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 376) * The address of the ftrace_ops that is used for this trampoline
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 377) * is stored at the end of the trampoline. This will be used to
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 378) * load the third parameter for the callback. Basically, that
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 379) * location at the end of the trampoline takes the place of
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 380) * the global function_trace_op variable.
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 381) */
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 382)
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 383) ptr = (unsigned long *)(trampoline + size + RET_SIZE);
b99e562f2ff2ff Song Liu 2023-05-25 384 text_poke_copy(ptr, &ops, sizeof(unsigned long));
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 385)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 386) op_offset -= start_offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 387) memcpy(&op_ptr, trampoline + op_offset, OP_REF_SIZE);
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 388)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 389) /* Are we pointing to the reference? */
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 390) if (WARN_ON(memcmp(op_ptr.op, op_ref, 3) != 0))
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 391) goto fail;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 392)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 393) /* Load the contents of ptr into the callback parameter */
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 394) offset = (unsigned long)ptr;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 395) offset -= (unsigned long)trampoline + op_offset + OP_REF_SIZE;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 396)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 397) op_ptr.offset = offset;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 398)
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 399) /* put in the new offset to the ftrace_ops */
b99e562f2ff2ff Song Liu 2023-05-25 400 text_poke_copy(trampoline + op_offset, &op_ptr, OP_REF_SIZE);
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 401)
768ae4406a5cab Peter Zijlstra 2019-08-26 402 /* put in the call to the function */
768ae4406a5cab Peter Zijlstra 2019-08-26 403 mutex_lock(&text_mutex);
768ae4406a5cab Peter Zijlstra 2019-08-26 404 call_offset -= start_offset;
ee3e2469b3463d Peter Zijlstra 2022-09-15 405 /*
ee3e2469b3463d Peter Zijlstra 2022-09-15 406 * No need to translate into a callthunk. The trampoline does
ee3e2469b3463d Peter Zijlstra 2022-09-15 407 * the depth accounting before the call already.
ee3e2469b3463d Peter Zijlstra 2022-09-15 408 */
ee3e2469b3463d Peter Zijlstra 2022-09-15 409 dest = ftrace_ops_get_func(ops);
b99e562f2ff2ff Song Liu 2023-05-25 410 text_poke_copy_locked(trampoline + call_offset,
ee3e2469b3463d Peter Zijlstra 2022-09-15 411 text_gen_insn(CALL_INSN_OPCODE, trampoline + call_offset, dest),
b99e562f2ff2ff Song Liu 2023-05-25 412 CALL_INSN_SIZE, false);
768ae4406a5cab Peter Zijlstra 2019-08-26 413 mutex_unlock(&text_mutex);
768ae4406a5cab Peter Zijlstra 2019-08-26 414
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 415) /* ALLOC_TRAMP flags lets us know we created it */
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 416) ops->flags |= FTRACE_OPS_FL_ALLOC_TRAMP;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 417)
d48567c9a0d1e6 Peter Zijlstra 2022-10-26 @418 set_memory_rox((unsigned long)trampoline, npages);
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 419) return (unsigned long)trampoline;
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 420) fail:
7fdfe1e40b225b Rick Edgecombe 2019-04-25 421 tramp_free(trampoline);
d2a68c4effd821 Steven Rostedt (VMware 2018-12-08 422) return 0;
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 423) }
f3bea49115b21e Steven Rostedt (Red Hat 2014-07-02 424)
:::::: The code at line 418 was first introduced by commit
:::::: d48567c9a0d1e605639f8a8705a61bbb55fb4e84 mm: Introduce set_memory_rox()
:::::: TO: Peter Zijlstra <peterz@infradead.org>
:::::: CC: Dave Hansen <dave.hansen@linux.intel.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-05-31 18:42 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-31 18:41 [rppt:perm_alloc/v0 9/13] arch/x86/kernel/ftrace.c:418:44: warning: variable 'npages' is uninitialized when used here kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.