All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [tglx-devel:depthtracking 35/38] arch/x86/kernel/callthunks.c:411:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true
Date: Thu, 14 Jul 2022 20:23:59 +0800	[thread overview]
Message-ID: <202207142029.dpdKYPLD-lkp@intel.com> (raw)

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

             reply	other threads:[~2022-07-14 12:24 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-14 12:23 kernel test robot [this message]
2022-08-02 16:13 ` [tglx-devel:depthtracking 35/38] arch/x86/kernel/callthunks.c:411:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true Nick Desaulniers
2022-08-02 16:13   ` Nick Desaulniers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202207142029.dpdKYPLD-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.