Thread (4 messages) 4 messages, 4 authors, 2021-12-09

Re: [PATCH net] net, neigh: clear whole pneigh_entry at alloc time

flat view

From: Eric Dumazet <hidden>
Date: 2021-12-08 18:36:43

On Wed, Dec 8, 2021 at 7:54 AM David Ahern [off-list ref] wrote:
On 12/6/21 9:53 AM, Eric Dumazet wrote:
quoted
From: Eric Dumazet <redacted>

Commit 2c611ad97a82 ("net, neigh: Extend neigh->flags to 32 bit
to allow for extensions") enables a new KMSAM warning [1]

I think the bug is actually older, because the following intruction
only occurred if ndm->ndm_flags had NTF_PROXY set.

      pn->flags = ndm->ndm_flags;

Let's clear all pneigh_entry fields at alloc time.
All of the fields - except the new flags field - are initialized after
the alloc. Why do you think the bug is older?
Because the flags field was added earlier, in the commit I pointed in Fixes: tag

For some reason, syzbot found the issue only after Roopa patch went in.
But we need to backport to older versions I think, or risk a kernel-info-leak
...
quoted
Fixes: 62dd93181aaa ("[IPV6] NDISC: Set per-entry is_router flag in Proxy NA.")
Signed-off-by: Eric Dumazet <redacted>
Cc: Roopa Prabhu <redacted>
---
 net/core/neighbour.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 72ba027c34cfea6f38a9e78927c35048ebfe7a7f..dda12fbd177ba6ad2798ea2b07733fa3f03441ab 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -763,11 +763,10 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl,

      ASSERT_RTNL();

-     n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL);
+     n = kzalloc(sizeof(*n) + key_len, GFP_KERNEL);
      if (!n)
              goto out;

-     n->protocol = 0;
      write_pnet(&n->net, net);
      memcpy(n->key, pkey, key_len);
      n->dev = dev;
Reviewed-by: David Ahern <dsahern@kernel.org>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help