All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.