All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Florian Westphal <fw@strlen.de>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [netfilter-nf-next:testing 9/12] net/netfilter/core.c:130:26: warning: variable 'hook_bpf_prog' set but not used
Date: Fri, 20 May 2022 05:54:03 +0800	[thread overview]
Message-ID: <202205200540.Em86BBF9-lkp@intel.com> (raw)

tree:   git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git testing
head:   4456ac35299c131e2ac26b4dc025b257d810277b
commit: 11b2910d788799e8c68df305994260fd79a61e10 [9/12] netfilter: add bpf base hook program generator
config: i386-randconfig-a005 (https://download.01.org/0day-ci/archive/20220520/202205200540.Em86BBF9-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git/commit/?id=11b2910d788799e8c68df305994260fd79a61e10
        git remote add netfilter-nf-next git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git
        git fetch --no-tags netfilter-nf-next testing
        git checkout 11b2910d788799e8c68df305994260fd79a61e10
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash net/netfilter/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   net/netfilter/core.c: In function 'nf_hook_entries_grow':
>> net/netfilter/core.c:130:26: warning: variable 'hook_bpf_prog' set but not used [-Wunused-but-set-variable]
     130 |         struct bpf_prog *hook_bpf_prog;
         |                          ^~~~~~~~~~~~~
   net/netfilter/core.c: In function '__nf_hook_entries_try_shrink':
>> net/netfilter/core.c:269:26: warning: unused variable 'hook_bpf_prog' [-Wunused-variable]
     269 |         struct bpf_prog *hook_bpf_prog = NULL;
         |                          ^~~~~~~~~~~~~


vim +/hook_bpf_prog +130 net/netfilter/core.c

   123	
   124	static struct nf_hook_entries *
   125	nf_hook_entries_grow(const struct nf_hook_entries *old,
   126			     const struct nf_hook_ops *reg)
   127	{
   128		unsigned int i, alloc_entries, nhooks, old_entries;
   129		struct nf_hook_ops **orig_ops = NULL;
 > 130		struct bpf_prog *hook_bpf_prog;
   131		struct nf_hook_ops **new_ops;
   132		struct nf_hook_entries *new;
   133		bool inserted = false;
   134	
   135		alloc_entries = 1;
   136		old_entries = old ? old->num_hook_entries : 0;
   137	
   138		if (old) {
   139			orig_ops = nf_hook_entries_get_hook_ops(old);
   140	
   141			for (i = 0; i < old_entries; i++) {
   142				if (orig_ops[i] != &dummy_ops)
   143					alloc_entries++;
   144			}
   145		}
   146	
   147		if (alloc_entries > MAX_HOOK_COUNT)
   148			return ERR_PTR(-E2BIG);
   149	
   150		new = allocate_hook_entries_size(alloc_entries);
   151		if (!new)
   152			return ERR_PTR(-ENOMEM);
   153	
   154		new_ops = nf_hook_entries_get_hook_ops(new);
   155	
   156		i = 0;
   157		nhooks = 0;
   158		while (i < old_entries) {
   159			if (orig_ops[i] == &dummy_ops) {
   160				++i;
   161				continue;
   162			}
   163	
   164			if (inserted || reg->priority > orig_ops[i]->priority) {
   165				new_ops[nhooks] = (void *)orig_ops[i];
   166				new->hooks[nhooks] = old->hooks[i];
   167				i++;
   168			} else {
   169				new_ops[nhooks] = (void *)reg;
   170				new->hooks[nhooks].hook = reg->hook;
   171				new->hooks[nhooks].priv = reg->priv;
   172				inserted = true;
   173			}
   174			nhooks++;
   175		}
   176	
   177		if (!inserted) {
   178			new_ops[nhooks] = (void *)reg;
   179			new->hooks[nhooks].hook = reg->hook;
   180			new->hooks[nhooks].priv = reg->priv;
   181		}
   182	
   183		hook_bpf_prog = nf_hook_bpf_create(new);
   184	
   185		/* allocate_hook_entries_size() pre-inits ->hook_prog
   186		 * to a fallback program that calls nf_hook_slow().
   187		 *
   188		 * Alternatively we could have nf_hook_entries_grow()
   189		 * return an error here.
   190		 */
   191	#if IS_ENABLED(CONFIG_NF_HOOK_BPF)
   192		if (hook_bpf_prog) {
   193			struct bpf_prog *old_prog = NULL;
   194	
   195			new->hook_prog = hook_bpf_prog;
   196	
   197			if (old)
   198				old_prog = old->hook_prog;
   199	
   200			nf_hook_bpf_change_prog(BPF_DISPATCHER_PTR(nf_hook_base),
   201						old_prog, hook_bpf_prog);
   202		}
   203	#endif
   204		return new;
   205	}
   206	
   207	static void hooks_validate(const struct nf_hook_entries *hooks)
   208	{
   209	#ifdef CONFIG_DEBUG_MISC
   210		struct nf_hook_ops **orig_ops;
   211		int prio = INT_MIN;
   212		size_t i = 0;
   213	
   214		orig_ops = nf_hook_entries_get_hook_ops(hooks);
   215	
   216		for (i = 0; i < hooks->num_hook_entries; i++) {
   217			if (orig_ops[i] == &dummy_ops)
   218				continue;
   219	
   220			WARN_ON(orig_ops[i]->priority < prio);
   221	
   222			if (orig_ops[i]->priority > prio)
   223				prio = orig_ops[i]->priority;
   224		}
   225	#endif
   226	}
   227	
   228	int nf_hook_entries_insert_raw(struct nf_hook_entries __rcu **pp,
   229					const struct nf_hook_ops *reg)
   230	{
   231		struct nf_hook_entries *new_hooks;
   232		struct nf_hook_entries *p;
   233	
   234		p = rcu_dereference_raw(*pp);
   235		new_hooks = nf_hook_entries_grow(p, reg);
   236		if (IS_ERR(new_hooks))
   237			return PTR_ERR(new_hooks);
   238	
   239		hooks_validate(new_hooks);
   240	
   241		rcu_assign_pointer(*pp, new_hooks);
   242	
   243		BUG_ON(p == new_hooks);
   244		nf_hook_entries_free(p);
   245		return 0;
   246	}
   247	EXPORT_SYMBOL_GPL(nf_hook_entries_insert_raw);
   248	
   249	/*
   250	 * __nf_hook_entries_try_shrink - try to shrink hook array
   251	 *
   252	 * @old -- current hook blob at @pp
   253	 * @pp -- location of hook blob
   254	 *
   255	 * Hook unregistration must always succeed, so to-be-removed hooks
   256	 * are replaced by a dummy one that will just move to next hook.
   257	 *
   258	 * This counts the current dummy hooks, attempts to allocate new blob,
   259	 * copies the live hooks, then replaces and discards old one.
   260	 *
   261	 * return values:
   262	 *
   263	 * Returns address to free, or NULL.
   264	 */
   265	static void *__nf_hook_entries_try_shrink(struct nf_hook_entries *old,
   266						  struct nf_hook_entries __rcu **pp)
   267	{
   268		unsigned int i, j, skip = 0, hook_entries;
 > 269		struct bpf_prog *hook_bpf_prog = NULL;
   270		struct nf_hook_entries *new = NULL;
   271		struct nf_hook_ops **orig_ops;
   272		struct nf_hook_ops **new_ops;
   273	
   274		if (WARN_ON_ONCE(!old))
   275			return NULL;
   276	
   277		orig_ops = nf_hook_entries_get_hook_ops(old);
   278		for (i = 0; i < old->num_hook_entries; i++) {
   279			if (orig_ops[i] == &dummy_ops)
   280				skip++;
   281		}
   282	
   283		/* if skip == hook_entries all hooks have been removed */
   284		hook_entries = old->num_hook_entries;
   285		if (skip == hook_entries)
   286			goto out_assign;
   287	
   288		if (skip == 0)
   289			return NULL;
   290	
   291		hook_entries -= skip;
   292		new = allocate_hook_entries_size(hook_entries);
   293		if (!new) {
   294	#if IS_ENABLED(CONFIG_NF_HOOK_BPF)
   295			struct bpf_prog *old_prog = old->hook_prog;
   296	
   297			WRITE_ONCE(old->hook_prog, fallback_nf_hook_slow);
   298			nf_hook_bpf_change_prog(BPF_DISPATCHER_PTR(nf_hook_base), old_prog, NULL);
   299	#endif
   300			return NULL;
   301		}
   302	
   303		new_ops = nf_hook_entries_get_hook_ops(new);
   304		for (i = 0, j = 0; i < old->num_hook_entries; i++) {
   305			if (orig_ops[i] == &dummy_ops)
   306				continue;
   307			new->hooks[j] = old->hooks[i];
   308			new_ops[j] = (void *)orig_ops[i];
   309			j++;
   310		}
   311		hooks_validate(new);
   312	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

             reply	other threads:[~2022-05-19 21:54 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-19 21:54 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-05-19 21:42 [netfilter-nf-next:testing 9/12] net/netfilter/core.c:130:26: warning: variable 'hook_bpf_prog' set but not used kernel test robot

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=202205200540.Em86BBF9-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=fw@strlen.de \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    /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.