Go to file
Quentin Young 1e9be514b3 bgpd: modify attr fields before hash insert
bgp_attr_intern(attr) takes an attribute, duplicates it, and inserts it
into the attribute hash table, returning the inserted attr. This is done
when processing a bgp update. We store the returned attribute in the
path info struct. However, later on we modify one of the fields of the
attribute. This field is inspected by attrhash_cmp, the function that
allows the hash table to select the correct item from the hash chain for
a given key when doing a lookup on an item. By modifying the field after
it's been inserted, we open the possibility that two items in the same
chain that at insertion time were differential by attrhash_cmp becomes
equal according to that function. When performing subsequent hash
lookups, it is then indeterminate which of the equivalent items the hash
table will select from the chain (in practice it is the first one but
this may not be the one we want). Thus, it is illegal to modify
data used by a hash comparison function after inserting that data into
a hash table.

In fact this is occurring for attributes. We insert two attributes that
hash to the same key and thus end up in the same hash chain. Then we
modify one of them such that the two items now compare equal. Later one
we want to release the second item from the chain before XFREE()'ing it,
but since the two items compare equal we get the first item back, then
free the second one, which constitutes two bugs, the first being the
wrong attribute removed from the hash table and the second being a
dangling pointer stored in the hash table.

To rectify this we need to perform any modifications to an attr before
it is inserted into the table, i.e., before calling bgp_attr_intern().
This patch does that by moving the sole modification to the attr that
occurs after the insert (that I have seen) before that call.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2020-09-02 13:16:35 -04:00
.github github: Add lost chapter witch issue template 2020-08-25 21:44:13 +03:00
alpine alpine: enable multi-arch builds 2020-06-24 16:33:18 -04:00
babeld *: un-split strings across lines 2020-07-14 10:37:25 +02:00
bfdd bfdd: fix parameter length 2020-08-24 18:45:53 +03:00
bgpd bgpd: modify attr fields before hash insert 2020-09-02 13:16:35 -04:00
debian debian: Add missing daemons to logrotation knowledge 2020-06-25 07:13:50 -04:00
doc Merge pull request #6989 from xThaid/remove_fuzzing 2020-08-27 17:33:43 -04:00
docker docker: don't fail on chown /etc/frr 2020-06-10 00:20:04 -04:00
eigrpd eigrpd: make show ip eigrp vrf all neighbor work correctly 2020-08-31 14:42:09 -04:00
fpm *: Replace sizeof something to sizeof(something) 2020-03-08 21:44:53 +02:00
gdb bgpd: Convert binfo to path 2018-10-09 14:26:30 -04:00
grpc lib: don't ignore error messages generated during the commit apply phase 2020-08-14 21:37:14 -03:00
include linux: UAPI for MAC sync 2020-08-05 06:46:12 -07:00
isisd isisd: Remove IPV4 from NLPID's if not enabled 2020-08-27 20:47:22 +02:00
ldpd ldpd: ldp-oc withdraw fix 2020-08-05 16:01:52 -04:00
lib Merge pull request #7016 from donaldsharp/pbr_vrf_is_burf 2020-09-01 10:31:20 -04:00
m4 build: find all future minor versions of python3 2020-07-09 06:47:31 +02:00
mlag zebra: Do not build mlag protobuf support if version 3 is not avail 2019-12-15 09:37:51 -05:00
nhrpd nhrpd: ignore zebra updates about our routes being deleted/added 2020-07-31 13:50:57 +02:00
ospf6d Merge pull request #6732 from opensourcerouting/printfrr-prep 2020-07-29 14:29:34 -04:00
ospfclient *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
ospfd Merge pull request #7003 from GalaxyGorilla/ospf_ti_lfa_prep 2020-09-01 16:39:29 +02:00
pbrd pbrd: Convert pnhc->nexthop to it's own data 2020-08-28 07:51:06 -04:00
pimd pimd: fix IGMP querier election 2020-08-26 10:47:04 -05:00
pkgsrc *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
python python: Make FRR build compatible with python 2.7 and 3.x 2020-08-19 19:38:28 +02:00
qpb build: add LLVM bitcode targets 2020-05-05 14:39:12 +02:00
redhat redhat: Update logrotate to have knowledge of all daemons 2020-06-25 07:12:59 -04:00
ripd *: introduce DEFPY_YANG & friends 2020-08-03 15:17:03 -03:00
ripngd *: introduce DEFPY_YANG & friends 2020-08-03 15:17:03 -03:00
sharpd sharpd: add a command to send ARP/NDP requests 2020-08-12 23:20:04 +02:00
snapcraft snapcraft: Add vrrpd to the snapcraft package 2019-11-19 10:46:33 +01:00
solaris doc: rename man pages to frr-* 2020-01-15 14:05:11 +01:00
staticd staticd: fix warning when creating routes without SR-TE colors 2020-08-19 20:07:01 -03:00
tests Merge pull request #6925 from kuldeepkash/bgp_basic_functionality 2020-08-30 07:40:28 -03:00
tools lib, tools: fix reloading of key sub-context in key chains 2020-08-24 09:54:55 -04:00
vrrpd Merge pull request #6908 from qlyoung/vrrp-add-vrf-module 2020-08-13 11:10:03 -03:00
vtysh Merge pull request #6809 from opensourcerouting/staticd-disable-acl 2020-08-04 14:01:26 -04:00
watchfrr watchfrr: add (network) namespace support 2020-07-22 12:56:04 +02:00
yang Merge pull request #6948 from xThaid/proactive_arp 2020-08-24 11:35:34 +00:00
zebra zebra: increase netlink receive buffer size 2020-09-01 11:35:16 +02:00
.clang-format clang-format: add FOREACH_SAFI to the ForEachMacros list 2020-08-03 12:18:24 -03:00
.dir-locals.el tools: fix emacs configuration file 2019-11-04 11:45:52 -03:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.git-blame-ignore-revs *: Give git a clue about our whitespace changes 2020-08-18 07:54:07 -04:00
.gitignore python: add graphviz callgraphs 2020-05-05 14:39:12 +02:00
bootstrap.sh autoreconf -i 2007-02-06 19:28:28 +00:00
buildtest.sh config: switch a few references to say FRR 2017-07-12 11:25:33 -05:00
changelog-auto.in debian: cleanly split off from dist tarball 2019-02-19 21:31:18 +01:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac zebra: remove fuzzing stuff 2020-08-25 17:31:07 +02:00
COPYING *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
COPYING-LGPLv2.1 build: remove LGPL v2.0, add LGPL v2.1 2016-11-15 17:19:38 +09:00
Makefile.am python: add graphviz callgraphs 2020-05-05 14:39:12 +02:00
README.md README.md: Add FRR Icon 2019-10-29 12:42:06 -04:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00

Icon

FRRouting

FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD as well as Solaris and supports all modern CPU architectures.

FRR currently supports the following protocols:

  • BGP
  • OSPFv2
  • OSPFv3
  • RIPv1
  • RIPv2
  • RIPng
  • IS-IS
  • PIM-SM/MSDP
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

For source tarballs, see the releases page.

For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.

Instructions on building and installing from source for supported platforms may be found in the developer docs.

Once installed, please refer to the user guide for instructions on use.

Community

The FRRouting email list server is located here and offers the following public lists:

Topic List
Development dev@lists.frrouting.org
Users & Operators frog@lists.frrouting.org
Announcements announce@lists.frrouting.org

For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.

Contributing

FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.

We welcome and appreciate all contributions, no matter how small!

Security

To report security issues, please use our security mailing list:

security [at] lists.frrouting.org