Commit Graph

26413 Commits

Author SHA1 Message Date
Donald Sharp
a8f692edb0 ospf6d: Prevent use after free
I encountered a crash where the ospf6_write thread
was already thought to be scheduled by ospf6d:

(gdb) bt
    t_ptr=0x5624ee6bd260) at lib/thread.c:972
(gdb)

When poking around it was noticed that the ospf6 pointer was crap:
(gdb) p (struct ospf6 *)$7
$8 = (struct ospf6 *) 0x5624ee6c6b20
(gdb) p *$8
$9 = {vrf_id = 3998487040, name = 0x5624ee420010 "\a", router_id = 65892, router_id_static = 65892, router_id_zebra = 0, starttime = {tv_sec = 1654674, tv_usec = 678673},
  area_list = 0x0, backbone = 0x5624ee6c6710, lsdb = 0x5624ee6c2370, lsdb_self = 0x5624ee6c5d80, route_table = 0x5624ee6c5c10, brouter_table = 0x5624ee6c4690,
  external_table = 0x5624ee6c4710, external_id_table = 0x5624ee6c4f10, external_id = 24, redist = {0x0 <repeats 32 times>}, nssa_default_import_check = {refcnt = 0,
    status = false}, flag = 1 '\001', redistribute = 0, config_flags = 0 '\000', default_originate = 0, lsa_minarrival = 1000, spf_delay = 0, spf_holdtime = 50,
  spf_max_holdtime = 5000, spf_hold_multiplier = 1, spf_reason = 554, ts_spf = {tv_sec = 1654712, tv_usec = 122041}, ts_spf_duration = {tv_sec = 0, tv_usec = 48},
  last_spf_reason = 11, fd = -1, t_spf_calc = 0x0, t_ase_calc = 0x0, maxage_remover = 0x0, t_distribute_update = 0x0, t_ospf6_receive = 0x0, t_external_aggr = 0x0,
  t_write = 0x5624ee6cc930, write_oi_count = 20, ref_bandwidth = 100000, distance_all = 0 '\000', distance_intra = 0 '\000', distance_inter = 0 '\000',
  distance_external = 0 '\000', distance_table = 0x5624ee6c4f50, inst_shutdown = 1 '\001', max_multipath = 128, gr_info = {restart_support = false, restart_in_progress = false,
    prepare_in_progress = false, finishing_restart = false, grace_period = 0, t_grace_period = 0x0}, ospf6_helper_cfg = {supported_grace_time = 1800, is_helper_supported = false,
    strict_lsa_check = true, only_planned_restart = false, enable_rtr_list = 0x0, active_restarter_cnt = 0, last_exit_reason = 0}, anyNSSA = 0 '\000', t_abr_task = 0x0,
  oi_write_q = 0x0, redist_count = 0, aggr_action = 1, aggr_delay_interval = 6, rt_aggr_tbl = 0x5624ee6c51b0, qobj_node = {nid = 6163304287853836241, nodehash = {hi = {next = 0x0,
        hashval = 1613461457}}, type = 0x5624ed65e4e0 <qobj_t_ospf6>}}

Upon code inspection there was no place where we disabled the t_write thread upon ospf6 deletion.
If the code were to issue a `no router ospf6` and then recreate it.  We could see this crash.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 18:46:06 -05:00
Igor Ryzhov
503661c62f
Merge pull request #10086 from donaldsharp/cpp_removal
tools, vtysh: Remove final vestige of `address-family evpn`
2021-11-17 19:07:19 +03:00
David Lamparter
0c3b8d5461
Merge pull request #10087 from donaldsharp/core_file_restore 2021-11-17 17:00:19 +01:00
Igor Ryzhov
aeeb9a8e96
Merge pull request #9914 from donaldsharp/coverity_script
Do not return true/false in dplane_ctx_get_XXX functions
2021-11-17 18:17:30 +03:00
Donald Sharp
41e69bb32f
Merge pull request #9852 from opensourcerouting/pim-nht-rework
pimd: make PIM NHT less weird
2021-11-17 09:34:51 -05:00
Donald Sharp
e2e677f64b tests: Re-add the ability to generate core files with topotests
Somewhere along the line core-files stopped being generated
with the running of the topotests.  With this change we now
see this:

sharpd@eva /t/topotests> find . -name '*.dmp' -print
./ospfv3_basic_functionality.test_ospfv3_asbr_summary_topo1/r0/ospf6d_core-sig_6-pid_430478.dmp
sharpd@eva /t/topotests> sudo gdb /usr/lib/frr/ospf6d ./ospfv3_basic_functionality.test_ospfv3_asbr_summary_topo1/r0/ospf6d_core-sig_6-pid_430478.dmp
GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib/frr/ospf6d...
[New LWP 430478]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/frr/ospf6d --log file:ospf6d.log --log-level debug -d'.
Program terminated with signal SIGABRT, Aborted.
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
(gdb)

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 08:51:14 -05:00
Donald Sharp
8e653596c4 tools, vtysh: Remove final vestige of address-family evpn
This was deprecated over a year ago now.  Let's finally
remove it from the system.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 07:49:56 -05:00
Donald Sharp
f284c1322d zebra: return void for dplane_ctx_get_pbr_ipset_entry
The dplane_ctx_get_pbr_ipset_entry function only
failed when the caller did not pass in a valid
usable pointer.  Change the code to assert on
a pointer not being passed in and remove the
bool return

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 07:46:36 -05:00
Donald Sharp
8d78e148b8 zebra: return void for dplane_ctx_get_pbr_iptable
The only time this function ever failed is when
the developer does not pass in a usable pointer
to place the data in.  Change it to an assert
to signify to the end developer that is what
we want and then remove all the if checks
for failure

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 07:46:36 -05:00
Donald Sharp
8249f96a5f zebra: dplane_ctx_get_pbr_ipset should return void
The function call dplane_ctx_get_pbr_ipset only
returns false when the calling function fails to
pass in a valid ipset pointer.  This should
be an assertion issue since it's a programming
issue as opposed to an actual run time issue.

Change the function call parameter to not return
a bool on success/fail for a compile time decision.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-17 07:46:36 -05:00
David Lamparter
4be297235e
Merge pull request #10075 from myloft/fix-chdir-judge 2021-11-17 12:26:23 +01:00
David Lamparter
43038bd5ef pimd: correctly process rp-count==0 BSMs
rp-count==0 isn't a broken BSM, it just means the BSR no longer has any
Candidate RPs for the group range.  Previous behavior is badly mistaken
since it stops processing the entire packet.

Fix to correctly remove group range on rp-count==0 and continue
processing remainder of the packet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
56be7c7ed1 tests: add one more BSR check to pim_bsmp_01
This is implicitly checked by the "verify mroute" below, but it's much
more helpful to explicitly check in advance.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
caef8f7961 pimd: add back blocking RPF for BSM
NHT won't have a result yet when we get the first BSM from a new BSR.
Hence, the first packet(s) are lost, since their RPF validation fails.

Re-add the blocking RPF check that was there before (though in a much
more sensible manner.)

Also nuke the now-unused pim_nexthop_match* functions.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
b09bd804ac pimd: move BSM clear into BSM code
... where it actually belongs.  And make a bunch of stuff static, since
it's no longer used across files now.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
4efdb9c628 pimd: clean up BSR NHT & fix parallel links
The Bootstrap message RX path needs a RPF check for the BSR address,
and this is implemented both incorrectly as well as quite ugly.

Clean up and fix case when we have multiple interfaces to the same LAN
and/or ECMP nexthops (both would cause message duplication, the former
can even cause BSM forwarding loops.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
1ee6df3363 pimd: actually return msec in timer_remain_msec()
... really old TODO sitting there.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
David Lamparter
1e9044be8d *: clean up ifp-by-local-address function(s)
Most users of if_lookup_address_exact only cared about whether the
address is any local address.  Split that off into a separate function.

For the users that actually need the ifp - which I'm about to add a few
of - change it to prefer returning interfaces that are UP.

(Function name changed due to slight change in behavior re. UP state, to
avoid possible bugs from this change.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-11-17 11:17:44 +01:00
Mark Stapp
ab7e3ba180
Merge pull request #9935 from idryzhov/fabricd-ifconf-cleanup
fabricd: cleanup interface config output
2021-11-16 11:45:43 -05:00
Russ White
c597cd76ea
Merge pull request #10064 from idryzhov/ospf-grace-period
ospfd: fix no-form of "graceful-restart" command
2021-11-16 11:32:45 -05:00
Russ White
ef1c1c0bd3
Merge pull request #10062 from idryzhov/bfd-replay
lib: rename bfd function to reflect real functionality
2021-11-16 11:32:20 -05:00
Russ White
a23a574994
Merge pull request #9944 from ARShreenidhi/tcp_mss_testcase
tests: testcase to configure and verity tcp mss with vrf
2021-11-16 09:56:48 -05:00
Donald Sharp
de093103cb
Merge pull request #10072 from idryzhov/zebra-memleak
zebra: fix memleak on shutdown
2021-11-16 08:01:30 -05:00
Solyn
46cba0d450
zebra: fix chdir judgment to avoid starting failed in a non-existent directory
Signed-off-by: Solyn <admin@iloft.xyz>
2021-11-16 20:46:14 +08:00
Igor Ryzhov
7022e70d74
Merge pull request #10071 from donaldsharp/valgrind_supp_change
tools: Add another valgrind suppression for libyang
2021-11-16 13:04:37 +03:00
Igor Ryzhov
9742796ff1 zebra: fix memleak on shutdown
During shutdown, when table_manager_disable is called for the default
VRF, its vrf_id is already set to VRF_UNKNOWN, so the expression is true
and the table manager memory is not freed. Change the expression to
compare the VRF name instead of the id. The check in table_manager_enable
is changed for consistency.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-11-16 12:42:32 +03:00
Donald Sharp
f22a74fee0
Merge pull request #10063 from idryzhov/ospf-gr-guarded-code
ospfd: fix code being guarded by debug check
2021-11-15 15:08:26 -05:00
Donald Sharp
23ee09601b tools: Add another valgrind suppression for libyang
More memory leaks from libyang that we can just ignore

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-11-15 15:06:58 -05:00
Donald Sharp
36942d944e
Merge pull request #10068 from Orange-OpenSource/ospf_ls
ospfd: Fix wrong parsing of TE subTLV
2021-11-15 15:06:09 -05:00
Olivier Dugeon
e3db39db57 ospfd: Fix wrong parsing of TE subTLV
Function ospf_te_parse_te() and ospf_te_delete_te() browse TE TLV but also
subTLV. The loop that parse the subTLV check that cummulative read data doesn't
exceed the total size of the TLV. However, the sum variable that counts the
number of read data was wrongly intialize to 0 instead to 4 (i.e. the initial
TLV Header size that is located at the TOP of subTLV).

This patch adjust accordingly the initial value of the counter.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2021-11-15 18:25:58 +01:00
Donatas Abraitis
67ca5030f7
Merge pull request #10014 from rgirada/ospf_nbr_cov
ospfd: fixing few coverity issues in ospf_vty.c
2021-11-15 17:55:35 +02:00
Donatas Abraitis
fd7d888003
Merge pull request #10048 from qlyoung/fix-reload-doc-comments
Fix reload comments
2021-11-15 17:54:18 +02:00
Donatas Abraitis
2247d05efe
Merge pull request #10050 from mjstapp/fix_mpls_queue_cleanup
zebra: free LSP workqueue later during shutdown
2021-11-15 17:51:51 +02:00
Donatas Abraitis
f0946fe04d
Merge pull request #10047 from idryzhov/fix-bfd-update-source
bgpd: fix source-address for BFD sessions when using update-source IFNAME
2021-11-15 17:28:14 +02:00
Igor Ryzhov
3e51a84a22 lib: rename bfd function to reflect real functionality
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-11-15 18:16:30 +03:00
Igor Ryzhov
9a8c0f2d25 ospfd: fix no-form of "graceful-restart" command
The no-form should use the same arguments as the regular command, hence
replace "period" with "grace-period".

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-11-15 18:12:55 +03:00
Igor Ryzhov
65bf67b310 ospfd: fix code being guarded by debug check
OSPF_NSM_TIMER_ON must be called regardless of debug configuration.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-11-15 18:12:40 +03:00
David Lamparter
de48804c01
Merge pull request #10046 from donaldsharp/bgp_instance_del 2021-11-15 10:49:31 +01:00
Russ White
47af849f95
Merge pull request #9956 from idryzhov/bfd-remove-ttl
lib: remove confusing bfd TTL API
2021-11-14 12:24:28 -05:00
Donatas Abraitis
e8b88be050
Merge pull request #10049 from qlyoung/doc-update-process-arch
doc: update & clarify language in process arch doc
2021-11-13 21:45:40 +02:00
Donald Sharp
045e023549
Merge pull request #10032 from opensourcerouting/build-fix-20211111
build: assorted build system improvements, 2021-11 edition
2021-11-13 10:10:59 -05:00
Jafar Al-Gharaibeh
3357afaa74
Merge pull request #10036 from donaldsharp/finally_frr
Finally frr
2021-11-12 21:35:27 -06:00
Mark Stapp
dd9538c5f3 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>
2021-11-12 15:10:00 -05:00
Quentin Young
ad2af6ed1c 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>
2021-11-12 14:45:36 -05:00
Quentin Young
6e09a5bfea tools: simplify excessively complex conditional
Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2021-11-12 13:37:09 -05:00
Donald Sharp
a22803a39b 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>
2021-11-12 13:24:04 -05:00
Donald Sharp
4378495a27 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>
2021-11-12 13:24:04 -05:00
Quentin Young
d2863e4a6b tools: string literals -> comments
Convert all floating string literals being used as comments, to comments

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2021-11-12 13:18:52 -05:00
Igor Ryzhov
d9a03ad330
Merge pull request #10045 from qlyoung/fix-pr-10006
zebra: use tabs instead of spaces zebra_vxlan.c
2021-11-12 21:12:58 +03:00
Igor Ryzhov
5b7586900a 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>
2021-11-12 19:32:06 +03:00