diff mbox series

xfrm: policy: Restore dir assignment in xfrm_hash_rebuild()

Message ID 20240829-xfrm-restore-dir-assign-xfrm_hash_rebuild-v1-1-a200865497b1@kernel.org (mailing list archive)
State Awaiting Upstream
Delegated to: Netdev Maintainers
Headers show
Series xfrm: policy: Restore dir assignment in xfrm_hash_rebuild() | expand

Checks

Context Check Description
netdev/tree_selection success Guessing tree name failed - patch did not apply

Commit Message

Nathan Chancellor Aug. 29, 2024, 5:09 p.m. UTC
Clang warns (or errors with CONFIG_WERROR):

  net/xfrm/xfrm_policy.c:1286:8: error: variable 'dir' is uninitialized when used here [-Werror,-Wuninitialized]
   1286 |                 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
        |                      ^~~
  net/xfrm/xfrm_policy.c:1257:9: note: initialize the variable 'dir' to silence this warning
   1257 |         int dir;
        |                ^
        |                 = 0
  1 error generated.

A recent refactoring removed the assignment of dir because
xfrm_policy_is_dead_or_sk() has a dir assignment in it. However, dir is
used elsewhere in xfrm_hash_rebuild(), so restore the assignment to fix
the warning and ensure dir is initialized throughout the function.

Fixes: 08c2182cf0b4 ("xfrm: policy: use recently added helper in more places")
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---
 net/xfrm/xfrm_policy.c | 1 +
 1 file changed, 1 insertion(+)


---
base-commit: 17163f23678c7599e40758d7b96f68e3f3f2ea15
change-id: 20240829-xfrm-restore-dir-assign-xfrm_hash_rebuild-749ca2264581

Best regards,

Comments

Florian Westphal Aug. 29, 2024, 5:54 p.m. UTC | #1
Nathan Chancellor <nathan@kernel.org> wrote:
> Clang warns (or errors with CONFIG_WERROR):
> 
>   net/xfrm/xfrm_policy.c:1286:8: error: variable 'dir' is uninitialized when used here [-Werror,-Wuninitialized]
>    1286 |                 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
>         |                      ^~~
>   net/xfrm/xfrm_policy.c:1257:9: note: initialize the variable 'dir' to silence this warning
>    1257 |         int dir;
>         |                ^
>         |                 = 0
>   1 error generated.

Ugh, my bad.

Acked-by: Florian Westphal <fw@strlen.de>
Florian Westphal Aug. 29, 2024, 6:02 p.m. UTC | #2
Florian Westphal <fw@strlen.de> wrote:
> Nathan Chancellor <nathan@kernel.org> wrote:
> > Clang warns (or errors with CONFIG_WERROR):
> > 
> >   net/xfrm/xfrm_policy.c:1286:8: error: variable 'dir' is uninitialized when used here [-Werror,-Wuninitialized]
> >    1286 |                 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
> >         |                      ^~~
> >   net/xfrm/xfrm_policy.c:1257:9: note: initialize the variable 'dir' to silence this warning
> >    1257 |         int dir;
> >         |                ^
> >         |                 = 0
> >   1 error generated.
> 
> Ugh, my bad.
> 
> Acked-by: Florian Westphal <fw@strlen.de>

Actually, this fix is incomplete, the assignment needs to be
restored in the second loop as well:

1340                 chain = policy_hash_bysel(net, &policy->selector,
1341                                           policy->family, dir);
							       ~~~

Nathan, Steffen, I'll leave it up to you to either do a v2 or a revert.
Nathan Chancellor Aug. 29, 2024, 6:07 p.m. UTC | #3
On Thu, Aug 29, 2024 at 08:02:05PM +0200, Florian Westphal wrote:
> Florian Westphal <fw@strlen.de> wrote:
> > Nathan Chancellor <nathan@kernel.org> wrote:
> > > Clang warns (or errors with CONFIG_WERROR):
> > > 
> > >   net/xfrm/xfrm_policy.c:1286:8: error: variable 'dir' is uninitialized when used here [-Werror,-Wuninitialized]
> > >    1286 |                 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
> > >         |                      ^~~
> > >   net/xfrm/xfrm_policy.c:1257:9: note: initialize the variable 'dir' to silence this warning
> > >    1257 |         int dir;
> > >         |                ^
> > >         |                 = 0
> > >   1 error generated.
> > 
> > Ugh, my bad.
> > 
> > Acked-by: Florian Westphal <fw@strlen.de>
> 
> Actually, this fix is incomplete, the assignment needs to be
> restored in the second loop as well:
> 
> 1340                 chain = policy_hash_bysel(net, &policy->selector,
> 1341                                           policy->family, dir);
> 							       ~~~
> 
> Nathan, Steffen, I'll leave it up to you to either do a v2 or a revert.

Ah, good catch. I'll send a v2 shortly with this fixed and your ack
picked up.

Cheers,
Nathan
diff mbox series

Patch

diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 6336baa8a93c..02eb4bd0fde6 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1283,6 +1283,7 @@  static void xfrm_hash_rebuild(struct work_struct *work)
 		if (xfrm_policy_is_dead_or_sk(policy))
 			continue;
 
+		dir = xfrm_policy_id2dir(policy->index);
 		if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
 			if (policy->family == AF_INET) {
 				dbits = rbits4;