commit 8e7e87593e1b40368f99a6694b982eb8c7dcab1a
Author: David Lamparter <[email protected]>
Date:   Mon Aug 25 18:56:53 2014 +0200

   release: 0.99.23.1

commit 90444ca35e3037ed43ec695428f0ef6d82f9a320
Author: David Lamparter <[email protected]>
Date:   Tue Jul 1 16:14:05 2014 +0200

   lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)

   On OpenBSD, carp interfaces claim to be PtP interfaces with a 0.0.0.0/0
   peer address.  We process those in zebra and try to send them to
   clients, at which point they get encoded as all-0.  The client code,
   however, decodes that to a NULL pointer instead of 0.0.0.0.  This later
   turns into a SEGV when CONNECTED_PREFIX sees that ZEBRA_IFA_PEER is set
   and tries to access the peer prefix.

   This is a band-aid fix for stable/0.99.23, a long-term solution needs
   some conceptual improvements on the entire thing.

   (The usefulness of a PtP-to-0.0.0.0/0 is a separate question;  at this
   point dropping the peer prefix seems the least intrusive solution.)

   Reported-by: Laurent Lavaud <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit ad2f92b6b07883f6a2a26499eab1776933185960
Author: David Lamparter <[email protected]>
Date:   Mon Aug 18 18:05:25 2014 +0200

   isisd: type mix-up in 28a8cfc "don't require IPv4"

   Whoops, these are in6_addrs, not prefix_ipv6... funnily enough, it does the
   right thing either way, if it compiles, which it only does on Linux because
   IN6_IS_ADDR_LINKLOCAL contains a cast to the right type.  On BSD there is no
   such cast, hence it explodes on trying to compile, trying to access struct
   members of in6_addrs while operating on prefix_ipv6...

   Fixes: 28a8cfc ("isisd: don't require IPv4 for adjacency")
   Signed-off-by: David Lamparter <[email protected]>

commit 4c005e3f65a1f5b4592b1ebbac392cbb1a710998
Author: John Glotzer <[email protected]>
Date:   Mon Aug 4 19:39:23 2014 +0000

   bgpd: memmove needed in community_del_val

   In bgpd/bgp_community_del_val memcpy is used for potentially overlapping
   regions which is *not* safe. It may "work" in some cases but is not
   guaranteed to work in all cases. The case that I saw fail was on an
   x86_64 architecture with the number of bytes being moved/copied equal to
   8.

   The way the code is written the uint32_t pointers will always differ by
   1, which is equivalent to a memcpy/memmove of regions that are 4 bytes
   away from one another. So the code failed while copying an 8 byte region
   to an address that is 4 bytes lower i.e. overlapping regions.

   Interestingly, the same architecture had no problems with a 12 byte
   copy.

   When the code failed the communities were [200,300,400] and a call was
   made to delete the 200 community. The result of this was an array that
   looked like [400,400] which was uniquified to [400]. Of course the
   expected result should have been [300, 400].

   One additional point - in our production environment memmove would not
   *link* without including <string.h> but in an isolated quagga git repo
   this #include does not seem to be required and I see memmove is used in
   vtysh.c without this #include either.

   Signed-off-by: David Lamparter <[email protected]>

commit 3ef0b877f08344aa52367794aa4ec32b12becd6d
Author: Timo Teräs <[email protected]>
Date:   Tue Jul 29 09:41:56 2014 +0000

   build: do not assume glibc on linux

   The whole IPv6 stack detection could need refactoring. But this
   fixes the linux check to not assume glibc. Fixes build against
   musl c-library.

   Signed-off-by: Timo Teräs <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit c299ed717eea4dbf7ca3581bcba05ff09f79276c
Author: Timo Teräs <[email protected]>
Date:   Tue Jul 29 09:41:55 2014 +0000

   zebra: fix struct msghdr initializers

   struct msghdr field orders are not strictly specified in POSIX.
   Improve portability by using designated initializer. This fixes
   build against musl c-library where struct msghdr is POSIX
   compliant (Linux kernel and glibc definitions are non-conforming).

   As the result is also more readable, struct iovec initilizers
   were also converted.

   Signed-off-by: Timo Teräs <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058
Author: Timo Teräs <[email protected]>
Date:   Tue Jul 29 09:41:54 2014 +0000

   *: fix detection and usage of sys/cdefs.h

   This header is non-standard (though present on many systems) and
   there is no standard for what it should or should not define.

   Remove it where it is not really needed. But add also a configure
   check, so it can be used if available but otherwise fallback to
   defining the needed macroes.

   Signed-off-by: Timo Teräs <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 28a8cfcbc3a5cc74bb3b87981b878f8b4edc2dd6
Author: David Lamparter <[email protected]>
Date:   Sun Jun 29 13:48:18 2014 +0200

   isisd: don't require IPv4 for adjacency

   This was precluding isisd from IPv6-only operation; no adjacency would
   come up unless there was IPv4 in parallel.

   Reported-by: Martin Winter <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 8b16ed74fa61523c3348d2584b66a56a8ad4e350
Author: David Lamparter <[email protected]>
Date:   Sun Jul 6 22:33:48 2014 +0200

   tests/bgpd: don't hardcode error number (fix f57000c)

   f57000c ("bgpd: don't send NOTIFY twice for malformed attrs") introduces
   BGP_ATTR_PARSE_ERROR_NOTIFYPLS as additional error code that implies the
   caller should sent a NOTIFY and convert it to BGP_ATTR_PARSE_ERROR.
   Sadly, the latter was hardcoded in bgp_mp_attr_test.c, which now didn't
   consider the new value to be an error.

   Make the testcase treat all nonzero values as error without discern.

   Signed-off-by: David Lamparter <[email protected]>

commit f57000c0dbdd0e30e71b6651022392f284201e19
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 01:01:10 2014 +0200

   bgpd: don't send NOTIFY twice for malformed attrs

   Most of the attribute parsing functions were already sending a notify,
   let's clean up the code to make it happen only once.

   Signed-off-by: David Lamparter <[email protected]>

commit bb02b82354a80f74706efc5e4c914b3f89fb033e
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 01:01:00 2014 +0200

   bgpd: fix IP endianness in debug message

   inet_ntop expects network byte order.

   Signed-off-by: David Lamparter <[email protected]>

commit f80f838b2f54738937ef1281b237710132195c44
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 01:00:51 2014 +0200

   bgpd: fix memory leak on malformed attribute

   When bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have
   parsed and allocated some attributes before hitting that error.  Free
   the attr's data before returning.

   Signed-off-by: David Lamparter <[email protected]>

commit 27bf90a14670283a899b96c56dd23f8413e0973e
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 00:59:01 2014 +0200

   bgpd: fix double free after extcommunity set (BZ#799)

   The route-map extcommunity set code was incorrectly assuming that it
   owns the intern'd struct ecommunity reference.  In reality, the intern'd
   reference belongs to bgp_update_receive() and we're not supposed to
   touch it in the route-map code.

   Instead, like all the other set commands, we use a on-heap but
   non-intern'd ecommunity to set the new value.  This is then either
   intern'd in bgp_update_main/_rsclient() through bgp_attr_intern(), or
   free'd through bgp_attr_flush().

   This fixes Bugzilla #799, which is that bgpd otherwise crashes with a
   double free.  The ecommunity got unintern'd first in the route-map set
   command, then in bgp_update_receive().

   Debugged-by: Milan Kocian <[email protected]>
   Reported-by: Florian S <[email protected]>
   Signed-off-by: David Lamparter <[email protected]>

commit 73d78ea0153fd36a300be5fec2ef0fca34a67477
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 00:58:47 2014 +0200

   bgpd: remove duplicate route-map extcommunity code

   route_set_ecommunity_rt and _soo share almost all of their code.
   Let's remove one of the redundant copies.

   Signed-off-by: David Lamparter <[email protected]>

commit c460e5720c1101a6da53e5b753b736ac2c7981af
Author: David Lamparter <[email protected]>
Date:   Wed Jun 4 00:54:58 2014 +0200

   bgpd: fix some bgp_update_main() attribute leaks

   bgp_update_main() wasn't doing anything to release attribute values
   set from route maps for two of its error paths.  To fix, pull up the
   appropriate cleanup from further down and apply it here.

   bgp_update_rsclient() doesn't have the issue since it immediately
   does bgp_attr_intern() on the results from bgp_{export,import}_modifier.

   Signed-off-by: David Lamparter <[email protected]>