]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
3 years agozebra: handle gr weirdness under libFuzzer
Quentin Young [Wed, 19 Feb 2020 21:52:00 +0000 (16:52 -0500)]
zebra: handle gr weirdness under libFuzzer

Two workarounds here. The #ifndef around assert(0) is to get around a
bug, in which a client that connects, announces GR capability,
disconnects, reconnects then sends anything other than a ZAPI hello will
hit the assert. GR resync is done in zread_hello(), so if a reconnecting
client doesn't send a hello then GR will notice that it's received a
disonnect for the same client twice in a row and assert. This is a bug,
GR should be able to handle that.

The rest of the code works around GR having a timer-based memory free.
Since we've disabled all thread.h code to increase determinism and avoid
mutex locks and other weirdness, clients repeatedly announcing GR
capability messages will result in a soft memleak.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoospfd, pimd: add missing var, skip mroute sock
Quentin Young [Tue, 11 Feb 2020 19:48:16 +0000 (14:48 -0500)]
ospfd, pimd: add missing var, skip mroute sock

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agovrrpd: add afl & libfuzzer support
Quentin Young [Wed, 22 Jan 2020 19:58:14 +0000 (14:58 -0500)]
vrrpd: add afl & libfuzzer support

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoospfd: add libfuzzer support
Quentin Young [Sun, 19 Jan 2020 01:17:03 +0000 (20:17 -0500)]
ospfd: add libfuzzer support

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: clean up some libfuzzer / afl stuff
Quentin Young [Fri, 17 Jan 2020 15:23:24 +0000 (10:23 -0500)]
bgpd: clean up some libfuzzer / afl stuff

- Unify the paths a bit more
- Switch to maintaining the peer and not deleting it after each packet;
  this increased coverage in zebra a lot, might help here
- Free processed packets, in libfuzzer case so we dont leak them
- Add check that size is at least BGP_HEADER_SIZE, validate_header()
  assumes it

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agozebra: try to optimize a bit more
Quentin Young [Wed, 15 Jan 2020 07:19:47 +0000 (02:19 -0500)]
zebra: try to optimize a bit more

try to avoid mutex locks, thread schedules, etc.

3 years agooptimize zebra for fuzzin'
Quentin Young [Wed, 15 Jan 2020 06:36:17 +0000 (01:36 -0500)]
optimize zebra for fuzzin'

- turn off kernel foo; netlink reads are 70% of runtime
- turn off mlag thread

3 years agozebra: add libFuzzer support
Quentin Young [Mon, 13 Jan 2020 20:32:08 +0000 (15:32 -0500)]
zebra: add libFuzzer support

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agotweak configure options for --enable-libfuzzer
Quentin Young [Mon, 13 Jan 2020 20:25:02 +0000 (15:25 -0500)]
tweak configure options for --enable-libfuzzer

* Compile (but don't link) with libfuzzer support for all daemons - this
  is -fsanitize=fuzzer-no-link
* Remove forcing ASAN for libfuzzer - better to control which sanitizer
  you want with --enable-<sanitizer>

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: cleanup suboptimal AFL paths after libFuzzer
Quentin Young [Mon, 13 Jan 2020 20:20:01 +0000 (15:20 -0500)]
bgpd: cleanup suboptimal AFL paths after libFuzzer

The AFL path through LLVMFuzzerTestOneInput is running a bit slow
because we are initializing BGP twice. Fix this. Also, since we know at
compile time whether we need to create a peer (libFuzzer) or use one
created already (AFL fork() case) we can save a branch in the hot path,
so let's do that.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: bit of cleanup for libfuzzer conversion
Quentin Young [Mon, 13 Jan 2020 19:06:58 +0000 (14:06 -0500)]
bgpd: bit of cleanup for libfuzzer conversion

3 years agodisable more privilege things
Quentin Young [Mon, 13 Jan 2020 18:37:19 +0000 (13:37 -0500)]
disable more privilege things

3 years agodisable logs for fuzzing
Quentin Young [Sat, 11 Jan 2020 20:17:48 +0000 (15:17 -0500)]
disable logs for fuzzing

3 years agospeed up bgp in-process by not querying kernel for bgp port
Quentin Young [Sat, 11 Jan 2020 20:17:36 +0000 (15:17 -0500)]
speed up bgp in-process by not querying kernel for bgp port

3 years agofix memleak in libfuzzer entrypoint
Quentin Young [Sat, 11 Jan 2020 20:16:21 +0000 (15:16 -0500)]
fix memleak in libfuzzer entrypoint

3 years agoenable libfuzzer for bgpd
Quentin Young [Sat, 11 Jan 2020 03:20:33 +0000 (22:20 -0500)]
enable libfuzzer for bgpd

Wow that was painful

libFuzzer replaces main(), so while we can compile with
-fsanitize=fuzzer, we can't link with it unless we have a way to
undefine main(). So I've added a #define, FUZZING_LIBFUZZER, that
daemons who want to support libfuzzer need to guard their main() with.
This also means we can't use the SAN_FLAGS automake variable, since that
is included in both AM_CFLAGS and AM_LDFLAGS, to add -fsanitize=fuzzer
to. We need new daemon specific flags. Actually, we can add
-fsanitize=fuzzer-no-link to SAN_FLAGS, but we need daemon specific
LDFLAGS so we can control who links with -fsanitize=fuzzer. Aside from
replacing main(), LibFuzzer.a also needs to link to a user-defined
function called `LLVMFuzzerTestOneInput` which is the fuzzer entrypoint.

For bgpd, because libfuzzer is in-process, we now need to actuall clean
up after ourselves each fuzz run to avoid leaking memory.  We also can't
touch global state. This also means we run slower because we have to
create and destroy a peer struct every iteration.

Finally I've almost certainly broken afl for now, will fix later.

3 years agoenable libfuzzer for bgpd
Quentin Young [Sat, 11 Jan 2020 03:20:33 +0000 (22:20 -0500)]
enable libfuzzer for bgpd

Wow that was painful

libFuzzer replaces main(), so while we can compile with
-fsanitize=fuzzer, we can't link with it unless we have a way to
undefine main(). So I've added a #define, FUZZING_LIBFUZZER, that
daemons who want to support libfuzzer need to guard their main() with.
This also means we can't use the SAN_FLAGS automake variable, since that
is included in both AM_CFLAGS and AM_LDFLAGS, to add -fsanitize=fuzzer
to. We need new daemon specific flags. Actually, we can add
-fsanitize=fuzzer-no-link to SAN_FLAGS, but we need daemon specific
LDFLAGS so we can control who links with -fsanitize=fuzzer.

Also, compiling with libfuzzer also requires that you define a function
named LLVMFuzzerTestOneInput(). So I defined a stub version in libfrr.c
and added a macro to undefine it for daemons who actually implement it.
Now that I write it down this probably isn't necessary at all given the
previous paragraph. I think that function is only checked for at link
time.

For bgpd, because libfuzzer is in-process, we now need to actuall clean
up after ourselves each fuzz run to avoid leaking memory.  We also can't
touch global state. This also means we run slower because we have to
create and destroy a peer struct every iteration.

Finally I've almost certainly broken afl for now, will fix later.

3 years agozebra: free fuzzing input
Quentin Young [Mon, 6 Jan 2020 17:08:50 +0000 (12:08 -0500)]
zebra: free fuzzing input

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: return early if no fuzz input
Quentin Young [Mon, 6 Jan 2020 06:10:14 +0000 (01:10 -0500)]
bgpd: return early if no fuzz input

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agozebra: free fuzzing stream
Quentin Young [Mon, 6 Jan 2020 04:14:14 +0000 (23:14 -0500)]
zebra: free fuzzing stream

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agozebra: add fuzzing shim
Quentin Young [Fri, 3 Jan 2020 05:32:37 +0000 (00:32 -0500)]
zebra: add fuzzing shim

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoospfd: enable deferred fork server mode
Quentin Young [Fri, 3 Jan 2020 04:02:54 +0000 (23:02 -0500)]
ospfd: enable deferred fork server mode

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agopimd: enable deferred forkserver mode
Quentin Young [Fri, 3 Jan 2020 00:48:15 +0000 (19:48 -0500)]
pimd: enable deferred forkserver mode

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: enable deferred forkserver mode
Quentin Young [Thu, 2 Jan 2020 07:02:31 +0000 (02:02 -0500)]
bgpd: enable deferred forkserver mode

Having narrowed down the issue with deferred mode to capability privs,
and having disabled those, we can now use afl deferred mode for...10x
performance gainz?!?!? zomg!

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agolib: improve frr_init_fast() speeeed
Quentin Young [Thu, 2 Jan 2020 07:01:57 +0000 (02:01 -0500)]
lib: improve frr_init_fast() speeeed

Aggressively disable some more things.

This also disables privilege dropping, because it breaks AFL deferred
mode. After this patch we can run about 10-20x faster with deferred
mode!

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agopimd: add ability to fuzz igmp & mroute messages
Quentin Young [Sun, 22 Dec 2019 00:48:54 +0000 (19:48 -0500)]
pimd: add ability to fuzz igmp & mroute messages

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoospfd: mock interface mtu = 68
Quentin Young [Thu, 12 Dec 2019 20:43:29 +0000 (15:43 -0500)]
ospfd: mock interface mtu = 68

zero mtu causes spurious crashes

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoospfd allow fuzzing LSUPD, LSACK, LSREQ packets
Quentin Young [Thu, 12 Dec 2019 19:53:06 +0000 (14:53 -0500)]
ospfd allow fuzzing LSUPD, LSACK, LSREQ packets

- Anything except HELLO wants a neighbor created, so do that
- Skip some unnecessary stuff
- Most stuff checks the LSDB and returns early, so skip those

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agolib: disable thread scheduler funcs
Quentin Young [Thu, 12 Dec 2019 19:52:20 +0000 (14:52 -0500)]
lib: disable thread scheduler funcs

dont work when we skip threadmaster creation / init

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoforce ospf checksum success
Quentin Young [Thu, 12 Dec 2019 01:14:47 +0000 (20:14 -0500)]
force ospf checksum success

3 years agoospfd: add fuzzing shunt
Quentin Young [Tue, 10 Dec 2019 21:11:28 +0000 (16:11 -0500)]
ospfd: add fuzzing shunt

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: use fuzzing stuff in libfrr
Quentin Young [Wed, 11 Dec 2019 21:37:52 +0000 (16:37 -0500)]
bgpd: use fuzzing stuff in libfrr

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agolib: add fuzzing stuff in libfrr
Quentin Young [Wed, 11 Dec 2019 21:37:38 +0000 (16:37 -0500)]
lib: add fuzzing stuff in libfrr

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agodisable dynamic capability message parsing in fuzz
Quentin Young [Tue, 3 Dec 2019 18:39:27 +0000 (13:39 -0500)]
disable dynamic capability message parsing in fuzz

It doesn't work and the code is so old it won't work with any vendor,
so I don't want to fix it. Skip this path for now.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoSET ALL THE FLAGS WHEEEEEEE
Quentin Young [Sun, 24 Nov 2019 07:01:05 +0000 (02:01 -0500)]
SET ALL THE FLAGS WHEEEEEEE

WEEHHHHHHHH CAPABILITIES

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd: add checks performed by i/o code
Quentin Young [Thu, 21 Nov 2019 04:35:44 +0000 (23:35 -0500)]
bgpd: add checks performed by i/o code

Getting some false positives from AFL because we aren't performing
checks that are performed by the I/O thread before the packet processor
is ever invoked. Add those checks.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd ultra fast wagyu mode
Quentin Young [Thu, 21 Nov 2019 00:37:46 +0000 (19:37 -0500)]
bgpd ultra fast wagyu mode

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agobgpd fuzzing
Quentin Young [Wed, 20 Nov 2019 23:21:20 +0000 (18:21 -0500)]
bgpd fuzzing

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agocut down vrf stuff
Quentin Young [Tue, 19 Nov 2019 22:33:06 +0000 (17:33 -0500)]
cut down vrf stuff

3 years agostrip down frr_init
Quentin Young [Tue, 19 Nov 2019 22:23:41 +0000 (17:23 -0500)]
strip down frr_init

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoadd a neighbor for join fuzzing
Quentin Young [Tue, 19 Nov 2019 21:48:03 +0000 (16:48 -0500)]
add a neighbor for join fuzzing

3 years agomore libdislocate & cli disabling
Quentin Young [Tue, 19 Nov 2019 16:49:55 +0000 (11:49 -0500)]
more libdislocate & cli disabling

3 years agodisable malloc extensions for libdislocate
Quentin Young [Tue, 19 Nov 2019 03:56:53 +0000 (22:56 -0500)]
disable malloc extensions for libdislocate

libdislocate allows asan-like functionality but works ootb with AFL.
Unfortunately linux malloc extensions don't like it, so disable those.

3 years agodisable cli commands & checksums
Quentin Young [Mon, 18 Nov 2019 21:12:19 +0000 (16:12 -0500)]
disable cli commands & checksums

3 years agoafl llvm deferred mode
Quentin Young [Mon, 18 Nov 2019 20:17:46 +0000 (15:17 -0500)]
afl llvm deferred mode

3 years agopimd: add fuzzing shunt
Quentin Young [Mon, 18 Nov 2019 05:40:41 +0000 (00:40 -0500)]
pimd: add fuzzing shunt

Add ability to read a raw pim packet from stdin and parse it. Useful for
fuzzing pim packet parsing.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agopimd: fix rp info lookup failure
Quentin Young [Mon, 6 Apr 2020 05:32:34 +0000 (01:32 -0400)]
pimd: fix rp info lookup failure

rp info lookup can return null, avoid this so we can continue fuzzing

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agopim: random fuzzing fixes
Quentin Young [Fri, 21 Feb 2020 04:20:27 +0000 (23:20 -0500)]
pim: random fuzzing fixes

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
3 years agoMerge pull request #10014 from rgirada/ospf_nbr_cov
Donatas Abraitis [Mon, 15 Nov 2021 15:55:35 +0000 (17:55 +0200)]
Merge pull request #10014 from rgirada/ospf_nbr_cov

ospfd: fixing few coverity issues in ospf_vty.c

3 years agoMerge pull request #10048 from qlyoung/fix-reload-doc-comments
Donatas Abraitis [Mon, 15 Nov 2021 15:54:18 +0000 (17:54 +0200)]
Merge pull request #10048 from qlyoung/fix-reload-doc-comments

Fix reload comments

3 years agoMerge pull request #10050 from mjstapp/fix_mpls_queue_cleanup
Donatas Abraitis [Mon, 15 Nov 2021 15:51:51 +0000 (17:51 +0200)]
Merge pull request #10050 from mjstapp/fix_mpls_queue_cleanup

zebra: free LSP workqueue later during shutdown

3 years agoMerge pull request #10047 from idryzhov/fix-bfd-update-source
Donatas Abraitis [Mon, 15 Nov 2021 15:28:14 +0000 (17:28 +0200)]
Merge pull request #10047 from idryzhov/fix-bfd-update-source

bgpd: fix source-address for BFD sessions when using update-source IFNAME

3 years agoMerge pull request #10046 from donaldsharp/bgp_instance_del
David Lamparter [Mon, 15 Nov 2021 09:49:31 +0000 (10:49 +0100)]
Merge pull request #10046 from donaldsharp/bgp_instance_del

3 years agoMerge pull request #9956 from idryzhov/bfd-remove-ttl
Russ White [Sun, 14 Nov 2021 17:24:28 +0000 (12:24 -0500)]
Merge pull request #9956 from idryzhov/bfd-remove-ttl

lib: remove confusing bfd TTL API

3 years agoMerge pull request #10049 from qlyoung/doc-update-process-arch
Donatas Abraitis [Sat, 13 Nov 2021 19:45:40 +0000 (21:45 +0200)]
Merge pull request #10049 from qlyoung/doc-update-process-arch

doc: update & clarify language in process arch doc

3 years agoMerge pull request #10032 from opensourcerouting/build-fix-20211111
Donald Sharp [Sat, 13 Nov 2021 15:10:59 +0000 (10:10 -0500)]
Merge pull request #10032 from opensourcerouting/build-fix-20211111

build: assorted build system improvements, 2021-11 edition

3 years agoMerge pull request #10036 from donaldsharp/finally_frr
Jafar Al-Gharaibeh [Sat, 13 Nov 2021 03:35:27 +0000 (21:35 -0600)]
Merge pull request #10036 from donaldsharp/finally_frr

Finally frr

3 years agozebra: free LSP workqueue later during shutdown 10050/head
Mark Stapp [Fri, 12 Nov 2021 20:10:00 +0000 (15:10 -0500)]
zebra: free LSP workqueue later during shutdown

Free the LSP workqueue later during shutdown, so that zebra
has enough time to clean up and uninstall any LSPs.

Signed-off-by: Mark Stapp <mstapp@nvidia.com>
3 years agodoc: update & clarify language in process arch doc 10049/head
Quentin Young [Fri, 12 Nov 2021 19:45:36 +0000 (14:45 -0500)]
doc: update & clarify language in process arch doc

There was a historical blurb at the top of the process architecture
document that in several instances caused some confusion regarding
whether or not FRR supports multithreading. Remove this paragraph and
replace it with a summary of the page contents.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
3 years agotools: simplify excessively complex conditional 10048/head
Quentin Young [Fri, 12 Nov 2021 18:37:09 +0000 (13:37 -0500)]
tools: simplify excessively complex conditional

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
3 years agotests: Ensure BGP has had time to import routes through the vpn 10046/head
Donald Sharp [Fri, 12 Nov 2021 15:52:03 +0000 (10:52 -0500)]
tests: Ensure BGP has had time to import routes through the vpn

Currently I get bgp_instance_del-test as well as bgp_l3vpn_to_bgp_vrf
failures every ~3-4 runs when under a 40 parallel run with micronet.
Examination of the failure and passing cases always leads to the
failures showing convergence of bgp bestpath immediately after
the show commands to ensure that the routes are there.

Modify the code to look for the fact that the vrf has
converged from routes being passed around across vrf's
and ensure that bestpath has run on them.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years agobgpd: Add vrf information to best path debugging
Donald Sharp [Fri, 12 Nov 2021 15:46:48 +0000 (10:46 -0500)]
bgpd: Add vrf information to best path debugging

When debugging issues for routes in multiple vrf's.  It would
be extremely useful if the debug output had which vrf we
are acting on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years agotools: string literals -> comments
Quentin Young [Fri, 12 Nov 2021 18:16:25 +0000 (13:16 -0500)]
tools: string literals -> comments

Convert all floating string literals being used as comments, to comments

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
3 years agoMerge pull request #10045 from qlyoung/fix-pr-10006
Igor Ryzhov [Fri, 12 Nov 2021 18:12:58 +0000 (21:12 +0300)]
Merge pull request #10045 from qlyoung/fix-pr-10006

zebra: use tabs instead of spaces zebra_vxlan.c

3 years agobgpd: fix source-address for BFD sessions when using update-source IFNAME 10047/head
Igor Ryzhov [Fri, 12 Nov 2021 16:32:06 +0000 (19:32 +0300)]
bgpd: fix source-address for BFD sessions when using update-source IFNAME

When "update-source IFNAME" is used for the neighbor, p->update_source
is set to NULL, so we can't use it as a source address and should use
the address from p->su_local.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agozebra: use tabs instead of spaces zebra_vxlan.c 10045/head
Quentin Young [Fri, 12 Nov 2021 16:09:48 +0000 (11:09 -0500)]
zebra: use tabs instead of spaces zebra_vxlan.c

Bad style introduced in
https://github.com/FRRouting/frr/pull/10006

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
3 years agoMerge pull request #9945 from idryzhov/isis-time-t
Donatas Abraitis [Fri, 12 Nov 2021 06:39:46 +0000 (08:39 +0200)]
Merge pull request #9945 from idryzhov/isis-time-t

isisd: use time_t for last update and last flap

3 years agoMerge pull request #9982 from idryzhov/fix-netns-delete 10021/head
Donald Sharp [Thu, 11 Nov 2021 23:41:33 +0000 (18:41 -0500)]
Merge pull request #9982 from idryzhov/fix-netns-delete

zebra: fix netns deletion

3 years agoMerge pull request #9981 from idryzhov/fix-vrf-delete
Donald Sharp [Thu, 11 Nov 2021 23:41:02 +0000 (18:41 -0500)]
Merge pull request #9981 from idryzhov/fix-vrf-delete

lib: fix vrf deletion when the last interface is deleted

3 years agoMerge pull request #9965 from idryzhov/fix-table-manager-disable
Donald Sharp [Thu, 11 Nov 2021 23:40:08 +0000 (18:40 -0500)]
Merge pull request #9965 from idryzhov/fix-table-manager-disable

zebra: fix disabling table manager

3 years agoMerge pull request #10035 from donaldsharp/ospf_use_after_free
Igor Ryzhov [Thu, 11 Nov 2021 21:34:16 +0000 (00:34 +0300)]
Merge pull request #10035 from donaldsharp/ospf_use_after_free

ospfd: Prevent use after free on shutdown

3 years ago*: Cleanup some documentation from quagga->frr 10036/head
Donald Sharp [Thu, 11 Nov 2021 19:40:17 +0000 (14:40 -0500)]
*: Cleanup some documentation from quagga->frr

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years ago*: Rename quagga_timestamp with frr_timestamp
Donald Sharp [Thu, 11 Nov 2021 19:33:41 +0000 (14:33 -0500)]
*: Rename quagga_timestamp with frr_timestamp

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years ago*: Convert quagga_signal_X to frr_signal_X
Donald Sharp [Thu, 11 Nov 2021 19:28:54 +0000 (14:28 -0500)]
*: Convert quagga_signal_X to frr_signal_X

Naming functions/data structures more appropriately for
the project we are actually in.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years agoospfd: Prevent use after free on shutdown 10035/head
Donald Sharp [Thu, 11 Nov 2021 18:25:35 +0000 (13:25 -0500)]
ospfd: Prevent use after free on shutdown

Running ospf_topo_vrf1 leads us to this valgrind issue:

==2386518== Invalid read of size 8
==2386518==    at 0x4971520: route_top (table.c:401)
==2386518==    by 0x181F08: ospf_interface_bfd_apply (ospf_bfd.c:126)
==2386518==    by 0x182069: ospf_interface_disable_bfd (ospf_bfd.c:158)
==2386518==    by 0x18BF51: ospf_del_if_params (ospf_interface.c:557)
==2386518==    by 0x18C584: ospf_if_delete_hook (ospf_interface.c:712)
==2386518==    by 0x490CA0B: hook_call_if_del (if.c:61)
==2386518==    by 0x490D1F3: if_delete_retain (if.c:286)
==2386518==    by 0x490D337: if_delete (if.c:309)
==2386518==    by 0x490CDED: if_destroy_via_zapi (if.c:200)
==2386518==    by 0x49940A9: zclient_interface_delete (zclient.c:2237)
==2386518==    by 0x4998062: zclient_read (zclient.c:3969)
==2386518==    by 0x4979529: thread_call (thread.c:1908)
==2386518==    by 0x4919918: frr_run (libfrr.c:1164)
==2386518==    by 0x181AC7: main (ospf_main.c:235)
==2386518==  Address 0x5df39a0 is 0 bytes inside a block of size 56 free'd
==2386518==    at 0x48399AB: free (vg_replace_malloc.c:538)
==2386518==    by 0x492A03E: qfree (memory.c:141)
==2386518==    by 0x4970C6F: route_table_free (table.c:141)
==2386518==    by 0x4970A36: route_table_finish (table.c:61)
==2386518==    by 0x18C543: ospf_if_delete_hook (ospf_interface.c:708)
==2386518==    by 0x490CA0B: hook_call_if_del (if.c:61)
==2386518==    by 0x490D1F3: if_delete_retain (if.c:286)
==2386518==    by 0x490D337: if_delete (if.c:309)
==2386518==    by 0x490CDED: if_destroy_via_zapi (if.c:200)
==2386518==    by 0x49940A9: zclient_interface_delete (zclient.c:2237)
==2386518==    by 0x4998062: zclient_read (zclient.c:3969)
==2386518==    by 0x4979529: thread_call (thread.c:1908)
==2386518==    by 0x4919918: frr_run (libfrr.c:1164)
==2386518==    by 0x181AC7: main (ospf_main.c:235)
==2386518==  Block was alloc'd at
==2386518==    at 0x483AB65: calloc (vg_replace_malloc.c:760)
==2386518==    by 0x4929EFC: qcalloc (memory.c:116)
==2386518==    by 0x49709F8: route_table_init_with_delegate (table.c:53)
==2386518==    by 0x49717F4: route_table_init (table.c:528)
==2386518==    by 0x18C328: ospf_if_new_hook (ospf_interface.c:659)
==2386518==    by 0x490C97D: hook_call_if_add (if.c:60)
==2386518==    by 0x490CE85: if_create_name (if.c:223)
==2386518==    by 0x490DF32: if_get_by_name (if.c:622)
==2386518==    by 0x4993F73: zclient_interface_add (zclient.c:2186)
==2386518==    by 0x4998062: zclient_read (zclient.c:3969)
==2386518==    by 0x4979529: thread_call (thread.c:1908)
==2386518==    by 0x4919918: frr_run (libfrr.c:1164)
==2386518==    by 0x181AC7: main (ospf_main.c:235)
==2386518==

Fix the ordering to do the individual node tree cleanup after we delete
the data we care about.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years agoMerge pull request #10033 from donaldsharp/bgp_max_no_go
Igor Ryzhov [Thu, 11 Nov 2021 17:31:03 +0000 (20:31 +0300)]
Merge pull request #10033 from donaldsharp/bgp_max_no_go

*: use compiler.h MIN/MAX macros instead of everyone having one

3 years agobuild: fix duplicate yang.c file inclusions 10032/head
David Lamparter [Thu, 11 Nov 2021 14:46:54 +0000 (15:46 +0100)]
build: fix duplicate yang.c file inclusions

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: remove some useless intermediate libraries
David Lamparter [Thu, 11 Nov 2021 14:45:09 +0000 (15:45 +0100)]
build: remove some useless intermediate libraries

These really serve no purpose other than slowing our build down.  If
there's a benefit to any of these, they can be readded.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years ago*: use compiler.h MIN/MAX macros instead of everyone having one 10033/head
Donald Sharp [Thu, 11 Nov 2021 14:39:52 +0000 (09:39 -0500)]
*: use compiler.h MIN/MAX macros instead of everyone having one

We had various forms of min/max macros across multiple daemons
all of which duplicated what we have in compiler.h.  Convert
everyone to use the `correct` ones

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
3 years agobuild: link libcrypt & libdl to libfrr only
David Lamparter [Thu, 11 Nov 2021 14:28:33 +0000 (15:28 +0100)]
build: link libcrypt & libdl to libfrr only

They're not needed elsewhere.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: link libelf to clippy only
David Lamparter [Thu, 11 Nov 2021 14:05:02 +0000 (15:05 +0100)]
build: link libelf to clippy only

It's not needed elsewhere & generates a bogus dependency.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: fix more libtool stupidity for modules
David Lamparter [Thu, 11 Nov 2021 13:27:13 +0000 (14:27 +0100)]
build: fix more libtool stupidity for modules

libtool, the radioactive dumpster fire of the GNU ecosystem.

A module should not have a SONAME set.  SONAMEs are for (versioned)
libraries on search paths.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: break up tests/subdir.am
David Lamparter [Thu, 11 Nov 2021 13:36:28 +0000 (14:36 +0100)]
build: break up tests/subdir.am

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agoMerge pull request #10006 from chiragshah6/evpn_dev
Russ White [Thu, 11 Nov 2021 13:09:06 +0000 (08:09 -0500)]
Merge pull request #10006 from chiragshah6/evpn_dev

zebra:  svi down remove evpn l2vni from l3vni list

3 years agoMerge pull request #10025 from opensourcerouting/xref-backtrace
Russ White [Thu, 11 Nov 2021 13:08:19 +0000 (08:08 -0500)]
Merge pull request #10025 from opensourcerouting/xref-backtrace

lib: backtraces for specific log messages

3 years agoMerge pull request #9861 from rgirada/ospf6_coverity
Russ White [Thu, 11 Nov 2021 13:04:28 +0000 (08:04 -0500)]
Merge pull request #9861 from rgirada/ospf6_coverity

ospf6d: Addressing few coverity issues.

3 years agoMerge pull request #9864 from ton31337/feature/access_list_autocomplete
Russ White [Thu, 11 Nov 2021 13:03:33 +0000 (08:03 -0500)]
Merge pull request #9864 from ton31337/feature/access_list_autocomplete

lib: Add autocomplete for access-lists

3 years agoMerge pull request #10019 from donaldsharp/pim_upstream_reg_state
Russ White [Thu, 11 Nov 2021 13:00:36 +0000 (08:00 -0500)]
Merge pull request #10019 from donaldsharp/pim_upstream_reg_state

pimd: Remove default from enum based switch

3 years agobuild: refactor `tests/subdir.am`
David Lamparter [Thu, 11 Nov 2021 12:51:44 +0000 (13:51 +0100)]
build: refactor `tests/subdir.am`

... to put related stuff next to each other.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agoMerge pull request #9931 from leibaogit/master
Igor Ryzhov [Thu, 11 Nov 2021 12:34:01 +0000 (15:34 +0300)]
Merge pull request #9931 from leibaogit/master

zebra: Fix the RA packets can not sent out

3 years agozebra: fix disabling table manager 9965/head
Igor Ryzhov [Thu, 4 Nov 2021 22:54:48 +0000 (01:54 +0300)]
zebra: fix disabling table manager

42d4b30e introduced per-VRF table manager.

Table manager is allocated when the VRF is created, but it is freed when
the VRF is disabled. When this VRF is re-enabled, zebra ends up with
table manager being NULL pointer and it crashes on any dereference.

Table manager should be freed when the VRF is deleted, not when it's
disabled.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoisisd: use time_t for last update and last flap 9945/head
Igor Ryzhov [Wed, 3 Nov 2021 09:40:40 +0000 (12:40 +0300)]
isisd: use time_t for last update and last flap

These variables are only assigned with time() which returns time_t.
This should also fix occasional CI build failures because of comparisons
of signed and unsigned integers.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agolib: fix vrf deletion when the last interface is deleted 9981/head
Igor Ryzhov [Fri, 5 Nov 2021 22:22:07 +0000 (01:22 +0300)]
lib: fix vrf deletion when the last interface is deleted

Currently, we automatically delete an inactive VRF when its last
interface is deleted. This code introduces a couple of crashes because
of the following problems:
- vrf_delete is called before calling if_del hook, so daemons may try to
  dereference an ifp->vrf pointer which is freed
- in if_terminate, we continue to use the VRF in the loop condition
  after the last interface is deleted

This check is needed only when the interface is deleted by the user,
because if the interface is deleted by the system, VRF must still exist
in the system. Move the check to appropriate places to fix crashes.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agozebra: fix netns deletion 9982/head
Igor Ryzhov [Sat, 6 Nov 2021 00:36:48 +0000 (03:36 +0300)]
zebra: fix netns deletion

We don't receive interface down/delete notifications from kernel when a
netns is deleted. Therefore we have to manually replicate the necessary
actions, otherwise interfaces are kept in the system with stale pointers
to the deleted netns.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agolib: remove confusing bfd TTL API 9956/head
Igor Ryzhov [Thu, 4 Nov 2021 12:11:18 +0000 (15:11 +0300)]
lib: remove confusing bfd TTL API

There are two APIs to control the expected number of hops for a BFD
session – `bfd_sess_set_mininum_ttl` and `bfd_sess_set_hop_count`.
The former is very confusing, as it takes an expected TTL in the
BFD packet which is actually a protocol internal value. The latter is
simple and straightforward – it takes an expected number of hops, which
is always 1 for single-hop and >1 for multi-hop.

As the former API is not used anywhere, just remove it to avoid any
confusion.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoMerge pull request #10029 from anlancs/doc-bgp-title
Igor Ryzhov [Thu, 11 Nov 2021 11:50:53 +0000 (14:50 +0300)]
Merge pull request #10029 from anlancs/doc-bgp-title

doc: remove redundant chars for bgp

3 years agotests: fix frr-format warnings in printfrr test
David Lamparter [Thu, 11 Nov 2021 11:27:11 +0000 (12:27 +0100)]
tests: fix frr-format warnings in printfrr test

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: adjust silent make rules in tests
David Lamparter [Thu, 11 Nov 2021 11:26:29 +0000 (12:26 +0100)]
build: adjust silent make rules in tests

Purely aesthetic change to make these rules not stick out like a sore
thumb.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: adjust compiler/C11 bits for autoconf 2.70+
David Lamparter [Thu, 11 Nov 2021 11:18:44 +0000 (12:18 +0100)]
build: adjust compiler/C11 bits for autoconf 2.70+

`autoconf` finally arrived in the 2010s and tries to do ISO C11.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
3 years agobuild: work around AC_PROG_LEX deprecation warning
David Lamparter [Thu, 11 Nov 2021 10:57:59 +0000 (11:57 +0100)]
build: work around AC_PROG_LEX deprecation warning

`AC_PROG_LEX without either yywrap or noyywrap is obsolete`, says
autoconf 2.70.  Sadly, there is no transition window for this, in 2.69
the macro takes no arguments.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>