]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: bpf_fib_lookup should not return neigh in NUD_FAILED state
authorMartin KaFai Lau <martin.lau@kernel.org>
Fri, 17 Feb 2023 00:41:48 +0000 (16:41 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 3 Mar 2023 10:52:23 +0000 (11:52 +0100)
commit5a57ac4e925fa4bcff17b5cc2470f53c6c94b166
tree09c20cbd6a46ded7a16a8b48a7ecc6bbb01075d9
parent9b72bdff1cf2034679d8e5bf90163df7d0565a6b
bpf: bpf_fib_lookup should not return neigh in NUD_FAILED state

commit b58a4a2f849ef0ae4eda529d6fd8b1b6df0772ad upstream.

The bpf_fib_lookup() helper does not only look up the fib (ie. route)
but it also looks up the neigh. Before returning the neigh, the helper
does not check for NUD_VALID. When a neigh state (neigh->nud_state)
is in NUD_FAILED, its dmac (neigh->ha) could be all zeros. The helper
still returns SUCCESS instead of NO_NEIGH in this case. Because of the
SUCCESS return value, the bpf prog directly uses the returned dmac
and ends up filling all zero in the eth header.

This patch checks for NUD_VALID and returns NO_NEIGH if the neigh is
not valid.

Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230217004150.2980689-3-martin.lau@linux.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/core/filter.c