Commit graph

18311 commits

Author SHA1 Message Date
Donatas Abraitis edf98aa365 doc: Add some words about neighbor <X> maximum-prefix-out cmd
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-01-17 16:03:38 +02:00
Donatas Abraitis dda8dbd32c
Merge pull request #5699 from qlyoung/zebra-iprule-print-unknown-family-as-number
zebra: print unknown rule family as number
2020-01-17 10:23:08 +02:00
Donatas Abraitis 82074aad89
Merge pull request #5686 from qlyoung/fix-bgp-fqdn-capability-leak
bgpd: fix memory leak when parsing capabilities
2020-01-17 10:22:26 +02:00
Quentin Young cc815be71a zebra: print unknown rule family as number
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-16 20:53:10 -05:00
Quentin Young 8ad8599e7a
Merge pull request #5694 from kooky/bfd_doc
doc: Note about BFD debug logging
2020-01-16 17:47:10 -05:00
Quentin Young aba5353c17 bgpd: fix memory leak when parsing capabilities
Duplicated domain name capability messages cause memory leak. The amount
of leaked memory is proportional to the size of the duplicated
capabilities. This bug was introduced in 2015.

To hit this, a BGP OPEN message must contain multiple FQDN capabilities.
Memory is leaked when the hostname portion of the capability is of
length 0, but the domainname portion is not, for any of the duplicated
capabilities beyond the first one.

https://tools.ietf.org/html/draft-walton-bgp-hostname-capability-00

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-16 12:50:27 -05:00
Tim Bray 8202e9a0a1 doc: Note about BFD debug logging
Because there is nothing in config debug for BFD.

Signed-off-by: Tim Bray <tim@kooky.org>
2020-01-16 16:06:54 +00:00
Donatas Abraitis c49bafc254
Merge pull request #5608 from dslicenc/frr-reload-deletes
tools: improve frr-reload delete performance for some commands
2020-01-16 16:41:34 +02:00
Mark Stapp 354620bf68
Merge pull request #5612 from sworleys/NHG-Topotest
tests: add basic nexthop group functionality test
2020-01-16 08:11:17 -05:00
Don Slice 6024e562c9 tools: improve frr-reload delete performance for some commands
Problem seen when deleting many static routes or access-lists due
to frr-reload.py issuing individual vtysh -c commands for every
line. On slow switches, this can take long enough for systemd to
time out the reload process and restart frr.  This fix uses add
logic for static routes, prefix-lists, and access-lists to gang
the changes together.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-27856
2020-01-16 11:57:56 +00:00
David Lamparter d25827acfb
zebra: Fix label manager memory leak (#5680)
zebra: Fix label manager memory leak
2020-01-16 10:20:57 +01:00
David Lamparter 1176e59625
Merge pull request #5674 from qlyoung/fix-zebra-redist-disconnect-memleak
zebra: fix redist memleak on client disconnect
2020-01-16 10:18:35 +01:00
David Lamparter c36fbd565e
Merge pull request #5672 from qlyoung/fix-zebra-pbr-iptable-heap-uaf
zebra: fix iptable install heap UAF
2020-01-16 10:14:45 +01:00
David Lamparter 3fde74fdea
zebra: fix assert crash on corrupt vxlan msg (#5670)
zebra: fix assert crash on corrupt vxlan msg
2020-01-16 10:13:59 +01:00
David Lamparter ba16266644
zebra: Do not accept illegal safi's for route installation (#5679)
zebra: Do not accept illegal safi's for route installation
2020-01-16 10:12:44 +01:00
Donatas Abraitis 394e862fda
Merge pull request #5664 from mitch-skiba/addpath-adj-out
bgpd: add addpath ID to adj_out tree sort
2020-01-16 06:52:21 +02:00
Stephen Worley 8058df22d4 tests: add basic nexthop group functionality test
Add a very basic nexthop group functionality test.

This test creates a 2-way ecmp group and installs a route
with it using sharpd. Then we check to see that the nexthop
groups are marked valid/installed in zebra.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-01-15 16:39:19 -05:00
Mark Stapp d26e2d9be4
Merge pull request #5600 from sworleys/NHG-Depend-Crash
zebra: can't improve efficiency for recursive depends
2020-01-15 16:31:55 -05:00
Mark Stapp a67b69c024
Merge pull request #5616 from sworleys/NHG-Fix-Recurse-to-Group
zebra: just set nexthop member in handle_recursive_depend()
2020-01-15 16:26:06 -05:00
Quentin Young 7fb29f49ab zebra: fix assert crash on corrupt vxlan msg
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-15 14:20:22 -05:00
Quentin Young 592af4cc0a zebra: fix iptable install heap UAF
My previous patch to fix a memory leak, caused by not properly freeing
the iptable iface list on stream parse failure, created/exposed a heap
use after free because we were not doing a deep copy

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-15 14:19:56 -05:00
Quentin Young 24c370dd46 zebra: fix redist memleak on client disconnect
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-15 14:18:40 -05:00
Donatas Abraitis 3b1c9f84c6
Merge pull request #5666 from donaldsharp/more_nhg_fixes
bgpd, ospfd, zebra: Do not use 0 as VRF_DEFAULT
2020-01-15 20:38:54 +02:00
Stephen Worley 89ca64c90a lib: assert if someone adds to nexthop list to nhg
If someone tries to add a nexthop with a list of nexthops
already attached to it, let's just assert. This standardizes
the API to say we assume this is an individual nexthop
you are appending to a group.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-01-15 13:35:29 -05:00
Stephen Worley 1d049aba72 zebra: just set nexthop member in handle_recursive_depend()
With recent changes to the lib nexthop_group
APIs (e1f3a8eb19), we are making
new assumptions that this should be adding a single nexthop
to a group, not a list of nexthops.

This broke the case of a recursive nexthop resolving to a group:

```
D>  2.2.2.1/32 [150/0] via 1.1.1.1 (recursive), 00:00:09
  *                      via 1.1.1.1, dummy1 onlink, 00:00:09
                       via 1.1.1.2 (recursive), 00:00:09
  *                      via 1.1.1.2, dummy2 onlink, 00:00:09
D>  3.3.3.1/32 [150/0] via 2.2.2.1 (recursive), 00:00:04
  *                      via 1.1.1.1, dummy1 onlink, 00:00:04
K * 10.0.0.0/8 [0/1] via 172.27.227.148, tun0, 00:00:21
```

This group can instead just directly point to the nh that was passed.
Its only being used for a lookup (the memory gets copied and used
elsewhere if the nexthop is not found).

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-01-15 13:35:29 -05:00
Stephen Worley 77bf9504bf lib,zebra: tighten up the nexthop_copy/nexthop_dup APIs
Make the nexthop_copy/nexthop_dup APIs more consistent by
adding a secondary, non-recursive, version of them. Before,
it was inconsistent whether the APIs were expected to copy
recursive info or not. Make it clear now that the default is
recursive info is copied unless the _no_recurse() version is
called. These APIs are not heavily used so it is fine to
change them for now.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-01-15 13:35:04 -05:00
Stephen Worley 0fff714efa zebra: can't improve efficiency for recursive depends
cb86eba3ab was causing zebra to crash
when handling a nexthop group that had a nexthop which was recursively resolved.

Steps to recreate:

!
nexthop-group red
 nexthop 1.1.1.1
 nexthop 1.1.1.2
!

sharp install routes 8.8.8.1 nexthop-group red 1

=========================================
==11898== Invalid write of size 8
==11898==    at 0x48E53B4: _nexthop_add_sorted (nexthop_group.c:254)
==11898==    by 0x48E5336: nexthop_group_add_sorted (nexthop_group.c:296)
==11898==    by 0x453593: handle_recursive_depend (zebra_nhg.c:481)
==11898==    by 0x451CA8: zebra_nhg_find (zebra_nhg.c:572)
==11898==    by 0x4530FB: zebra_nhg_find_nexthop (zebra_nhg.c:597)
==11898==    by 0x4536B4: depends_find (zebra_nhg.c:1065)
==11898==    by 0x453526: depends_find_add (zebra_nhg.c:1087)
==11898==    by 0x451C4D: zebra_nhg_find (zebra_nhg.c:567)
==11898==    by 0x4519DE: zebra_nhg_rib_find (zebra_nhg.c:1126)
==11898==    by 0x452268: nexthop_active_update (zebra_nhg.c:1729)
==11898==    by 0x461517: rib_process (zebra_rib.c:1049)
==11898==    by 0x4610C8: process_subq_route (zebra_rib.c:1967)
==11898==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

Zebra crashes because we weren't handling the case of the depend nexthop
being recursive.

For this case, we cannot make the function more efficient. A nexthop
could resolve to a group of any size, thus we need allocs/frees.

To solve this and retain the goal of the original patch, we separate out the
two cases so it will still be more efficient if the nexthop is not recursive.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-01-15 13:35:04 -05:00
Mitchell Skiba 3373d7e7ff bgpd: add addpath ID to adj_out tree sort
When withdrawing addpaths, adj_lookup was called to find the path that
needed to be withdrawn. It would lookup in the RB tree based on subgroup
pointer alone, often find the path with the wrong addpath ID, and return
null.  Only the path highest in the tree sent to the subgroup could be
found, thus withdrawn.

Adding the addpath ID to the sort criteria for the RB tree allows us to
simplify the logic for adj_lookup, and address this problem. We are able
to remove the logic around non-addpath subgroups because the addpath ID
is consistently 0 for non-addpath adj_outs, so special logic to skip
matching the addpath ID isn't required.  (As a side note, addpath will
also never use ID 0, so there won't be any ambiguity when looking at the
structure content.)

Signed-off-by: Mitchell Skiba <mskiba@amazon.com>
2020-01-15 10:12:44 -08:00
Donald Sharp 47e0611d16
Merge pull request #5681 from opensourcerouting/manpage-rename
doc: manpage rename
2020-01-15 11:24:26 -05:00
Donald Sharp 946de1b95a bgpd, ospfd, zebra: Do not use 0 as VRF_DEFAULT
Explicitly spell out what we are trying to do.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-15 08:29:36 -05:00
Donald Sharp 5e7939a561 zebra: Do not accept illegal safi's for route installation
The only two safi's that are usable for zebra for installation
of routes into the rib are SAFI_UNICAST and SAFI_MULTICAST.
The acceptance of other safi's is causing a memory leak:

Direct leak of 56 byte(s) in 1 object(s) allocated from:
    #0 0x5332f2 in calloc (/usr/lib/frr/zebra+0x5332f2)
    #1 0x7f594adc29db in qcalloc /opt/build/frr/lib/memory.c:110:27
    #2 0x686849 in zebra_vrf_get_table_with_table_id /opt/build/frr/zebra/zebra_vrf.c:390:11
    #3 0x65a245 in rib_add_multipath /opt/build/frr/zebra/zebra_rib.c:2591:10
    #4 0x7211bc in zread_route_add /opt/build/frr/zebra/zapi_msg.c:1616:8
    #5 0x73063c in zserv_handle_commands /opt/build/frr/zebra/zapi_msg.c:2682:2
Collapse

Sequence of events:

Upon vrf creation there is a zvrf->table[afi][safi] data structure
that tables are auto created for.  These tables only create SAFI_UNICAST
and SAFI_MULTICAST tables.  Since these are the only safi types that
are zebra can actually work on.  zvrf data structures also have a
zvrf->otable data structure that tracks in a RB tree other tables
that are created ( say you have routes stuck in any random table
in the 32bit route table space in linux ).  This data structure is
only used if the lookup in zvrf->table[afi][safi] fails.

After creation if we pass a route down from an upper level protocol
that has non unicast or multicast safi *but* has the actual
tableid of the vrf we are in, the initial lookup will always
return NULL leaving us to look in the otable.  This will create
a data structure to track this data.

If after this event you pass in a second route with the same
afi/safi/table_id, the otable will be created and attempted
to be stored, but the RB_TREE_UNIQ data structure when it sees
this will return the original otable returned and the lookup function
zebra_vrf_get_table_with_table_id will just drop the second otable.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-15 08:23:14 -05:00
Donald Sharp 7feb884d15 zebra: Fix label manager memory leak
==25402==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x533302 in calloc (/usr/lib/frr/zebra+0x533302)
    #1 0x7fee84cdc80b in qcalloc /home/qlyoung/frr/lib/memory.c:110:27
    #2 0x5a3032 in create_label_chunk /home/qlyoung/frr/zebra/label_manager.c:188:3
    #3 0x5a3c2b in assign_label_chunk /home/qlyoung/frr/zebra/label_manager.c:354:8
    #4 0x5a2a38 in label_manager_get_chunk /home/qlyoung/frr/zebra/label_manager.c:424:9
    #5 0x5a1412 in hook_call_lm_get_chunk /home/qlyoung/frr/zebra/label_manager.c:60:1
    #6 0x5a1412 in lm_get_chunk_call /home/qlyoung/frr/zebra/label_manager.c:81:2
    #7 0x72a234 in zread_get_label_chunk /home/qlyoung/frr/zebra/zapi_msg.c:2026:2
    #8 0x72a234 in zread_label_manager_request /home/qlyoung/frr/zebra/zapi_msg.c:2073:4
    #9 0x73150c in zserv_handle_commands /home/qlyoung/frr/zebra/zapi_msg.c:2688:2

When creating label chunk that has a specified base, we eventually are
calling assign_specific_label_chunk. This function finds the appropriate
list node and deletes it from the lbl_mgr.lc_list but since
the function uses list_delete_node() the deletion function that is
specified for lbl_mgr.lc_list is not called thus dropping the memory.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-15 08:18:50 -05:00
David Lamparter 9b5065e036 ospfclient: don't install man page
... we're not installing ospfclient (it's a demo/example program), so
installing the man page is quite useless.

Signed-off-by: David Lamparter <equinox@diac24.net>
2020-01-15 14:05:11 +01:00
David Lamparter 429576883e doc: rename man pages to frr-*
The vrrpd one conflicts with the standalone vrrpd package; also we're
installing daemons to /usr/lib/frr on some systems so they're not on
PATH.

Signed-off-by: David Lamparter <equinox@diac24.net>
2020-01-15 14:05:11 +01:00
David Lamparter f014634e85
Merge pull request #5677 from qlyoung/fix-my-bfd-screwups
zebra: bfd message handling cleanup foo
2020-01-15 14:04:44 +01:00
Jafar Al-Gharaibeh dea7e8d6f7
Merge pull request #5590 from qlyoung/fix-nhrp-underflow
nhrpd: offset value not checked for min size
2020-01-14 22:57:15 -06:00
Quentin Young a7051a1825 nhrpd: offset value not checked for min size
If the extension offset points to a location within the packet header,
we end up with an integer underflow leading to heap buffer read
overflow.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-14 18:42:12 -05:00
Quentin Young 9a106a7329
Merge pull request #5657 from mjstapp/staticd_add_debugs
staticd: add debug support
2020-01-14 17:43:48 -05:00
Quentin Young 011a713915 zebra: bfd message handling cleanup foo
Previous patches introduced various issues:
- Removal of stream_free() to fix double free caused memleak
- Patch for memleak was incomplete

This should fix it hopefully.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-01-14 13:57:10 -05:00
Renato Westphal 4a8788360c
Merge pull request #5627 from chiragshah6/mdev
*:  modify two evpn debugs
2020-01-14 13:32:35 -03:00
Donald Sharp 26c4ab2f43 *: Modify version number of build
With the pull of the 7.3 stabilization branch, update the
version number we will auto generate.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-14 08:21:57 -05:00
Mark Stapp 4112bfee9f
Merge pull request #5663 from donaldsharp/nhg_topotests_fixes
Nhg topotests fixes
2020-01-10 18:19:23 -05:00
Mark Stapp b4ae4a16e4
Merge pull request #5662 from qlyoung/fix-ptm-bfd-deregister-memleak
zebra: fix bfd deregister message memleak
2020-01-10 16:59:20 -05:00
Donald Sharp 40d86eba41 zebra: Actually add the NLA_F_NESTED flag to our code
The existing usage of the rta_nest and addattr_nest
functions were not adding the NLA_F_NESTED flag
to the type.  As such the new nexthop functionality was
actually looking for this flag, while apparently older
code did not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-10 15:13:36 -05:00
Chirag Shah a779978810 bgpd: debug convert to snprintf
Change sprintf to snprintf

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2020-01-10 11:15:36 -08:00
Chirag Shah c1c292e777 zebra: fix debug in macvlan down event
fix a debug where display parent interface name
only if it exists.

Ticket:CM-27733

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2020-01-10 11:15:36 -08:00
Chirag Shah d8744f7247 bgpd: add rmac field in route_add debug
For evpn routes, nexthop and RMAC fileds are synced
in route add to zebra.

In case of EVPN routes display RMAC field in route add
debug log.

Reviewed By:CCR-9381
Testing Done:

BGP:   nhop [1]: 27.0.0.11 if 30 VRF 26   RMAC 00:02:00:00:00:2e

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2020-01-10 11:15:36 -08:00
Quentin Young af64be7226
Merge pull request #5661 from ton31337/fix/doc_for_redhat
doc: Replace wrong paths for centos/fedora source build instructions
2020-01-10 13:44:21 -05:00
Donald Sharp abb5d7a933 tests: ospf6-topo1 did not work properly with nhg's and 5.3 kernels
Fix the ospf6-topo1 test to understand nhg's and what happens
when they are installed into a kernel that can support them.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-01-10 08:57:18 -05:00
Quentin Young 2c77965e0e
Merge pull request #5609 from kooky/fix_log
Fix logrotate in debian for bfdd, pbrd and vrrpd.
2020-01-09 20:55:05 -05:00