diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eedebbe --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/libnl-3.2.28.tar.gz +SOURCES/libnl-doc-3.2.28.tar.gz diff --git a/.libnl3.metadata b/.libnl3.metadata new file mode 100644 index 0000000..83c0d1f --- /dev/null +++ b/.libnl3.metadata @@ -0,0 +1,2 @@ +7c6435ee248642940d022511629ab658a5aff260 SOURCES/libnl-3.2.28.tar.gz +deb56c054ef3cd82c306ebe9f85881e8b2e40b86 SOURCES/libnl-doc-3.2.28.tar.gz diff --git a/SOURCES/0001-compare-v4-addr-rh1370503.patch b/SOURCES/0001-compare-v4-addr-rh1370503.patch new file mode 100644 index 0000000..e630975 --- /dev/null +++ b/SOURCES/0001-compare-v4-addr-rh1370503.patch @@ -0,0 +1,103 @@ +From 2eab63bff2624d154891c949bd815c1fe7082f60 Mon Sep 17 00:00:00 2001 +From: Tobias Jungel +Date: Thu, 4 Aug 2016 10:01:43 +0200 +Subject: [PATCH 1/2] route/addr: address attributes based on object + +addr_id_attrs_get returned a fixed set of attributes for AF_INET. This +leads to an invalid cache in case the default cache manager is used. + +The error was cause by nl_object_identical, which checkes the ce_mask +of an object against the req_attrs. For route/addr objects the ce_mask +may contain the ADDR_ATTR_PEER, but the addr_id_attrs_get always +includes this attribute. Thus nl_object_identical fails always in case +no peer exists, which is the default for local addresses. + +Fixes: 83e851ca9c842ccb6dae411d3fff9c7e9561269a + +https://github.com/thom311/libnl/pull/105 + +Signed-off-by: Thomas Haller +(cherry picked from commit dfaba51b5b2b5ad7e3c4990c2af3f30acbe5f8d9) +--- + lib/route/addr.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/lib/route/addr.c b/lib/route/addr.c +index b699c64..7d3ff39 100644 +--- a/lib/route/addr.c ++++ b/lib/route/addr.c +@@ -467,12 +467,15 @@ static void addr_dump_stats(struct nl_object *obj, struct nl_dump_params *p) + static uint32_t addr_id_attrs_get(struct nl_object *obj) + { + struct rtnl_addr *addr = (struct rtnl_addr *)obj; ++ uint32_t rv; + + switch (addr->a_family) { + case AF_INET: +- return (ADDR_ATTR_FAMILY | ADDR_ATTR_IFINDEX | +- ADDR_ATTR_LOCAL | ADDR_ATTR_PREFIXLEN | +- ADDR_ATTR_PEER); ++ rv = (ADDR_ATTR_FAMILY | ADDR_ATTR_IFINDEX | ++ ADDR_ATTR_LOCAL | ADDR_ATTR_PREFIXLEN); ++ if (addr->a_peer) ++ rv |= ADDR_ATTR_PEER; ++ return rv; + case AF_INET6: + return (ADDR_ATTR_FAMILY | ADDR_ATTR_IFINDEX | + ADDR_ATTR_LOCAL); +-- +2.7.4 + + +From f2ac27c8a513eaf6b838796aacf2ec444a2c1227 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Sun, 14 Aug 2016 11:05:48 +0200 +Subject: [PATCH 2/2] lib: capability NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX for + ID comparison of v4 addresses + +The ID attributes for IPv4 addresses were broken which causes wrong +nl_object_identical() and cache lookup. + +This capability shall indicate that the bug was fixed. + +Signed-off-by: Thomas Haller +(cherry picked from commit 99b1d8acf87bcb35efed49f412d54af682bf1738) +--- + include/netlink/utils.h | 7 +++++++ + lib/utils.c | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/include/netlink/utils.h b/include/netlink/utils.h +index 3b10340..1115bb4 100644 +--- a/include/netlink/utils.h ++++ b/include/netlink/utils.h +@@ -217,6 +217,13 @@ enum { + NL_CAPABILITY_VERSION_3_2_28 = 19, + #define NL_CAPABILITY_VERSION_3_2_28 NL_CAPABILITY_VERSION_3_2_28 + ++ /** ++ * After NL_CAPABILITY_RTNL_ADDR_PEER_FIX, a follow up regression to lookup ++ * IPv4 addresses in the cache was fixed (PR#105). ++ */ ++ NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX = 20, ++#define NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX ++ + __NL_CAPABILITY_MAX, + NL_CAPABILITY_MAX = (__NL_CAPABILITY_MAX - 1), + #define NL_CAPABILITY_MAX NL_CAPABILITY_MAX +diff --git a/lib/utils.c b/lib/utils.c +index 3399c03..0f2a252 100644 +--- a/lib/utils.c ++++ b/lib/utils.c +@@ -1164,7 +1164,7 @@ int nl_has_capability (int capability) + NL_CAPABILITY_XFRM_SA_KEY_SIZE, + NL_CAPABILITY_RTNL_ADDR_PEER_FIX, + NL_CAPABILITY_VERSION_3_2_28, +- 0, ++ NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX, + 0, + 0, + 0, +-- +2.7.4 + diff --git a/SOURCES/0002-msg-peek-by-default-rh1396882.patch b/SOURCES/0002-msg-peek-by-default-rh1396882.patch new file mode 100644 index 0000000..c4e0b39 --- /dev/null +++ b/SOURCES/0002-msg-peek-by-default-rh1396882.patch @@ -0,0 +1,154 @@ +From f7882fef99e90bb2106f0458b407c7914bc87034 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 30 Nov 2016 15:09:41 +0100 +Subject: [PATCH 1/1] lib: use MSG_PEEK by default for nl_recvmsgs() + +The MSG_PEEK API of recvmsg() should be avoid because it requires an additional +syscall. But worse is to choose a too small buffer size and failing to receive +the message. + +A user who is aware of the issue can avoid MSG_PEEK by either +nl_socket_disable_msg_peek()/nl_socket_enable_msg_peek() or by setting +a buffer size via nl_socket_set_msg_buf_size(). + +By default however we now use MSG_PEEK. This is more important since commit +90c6ebec9bd7a where the link dump request can be rather large. + +Signed-off-by: Thomas Haller +(cherry picked from commit 55ea6e6b6cd805f441b410971c9dd7575e783ef4) +--- + include/netlink-private/types.h | 3 ++- + include/netlink/utils.h | 15 +++++++++++++++ + lib/nl.c | 5 +++-- + lib/socket.c | 20 +++++++++++++++++++- + lib/utils.c | 2 +- + 5 files changed, 40 insertions(+), 5 deletions(-) + +diff --git a/include/netlink-private/types.h b/include/netlink-private/types.h +index 0f67ddd..f1467cc 100644 +--- a/include/netlink-private/types.h ++++ b/include/netlink-private/types.h +@@ -27,7 +27,8 @@ + #define NL_SOCK_PASSCRED (1<<1) + #define NL_OWN_PORT (1<<2) + #define NL_MSG_PEEK (1<<3) +-#define NL_NO_AUTO_ACK (1<<4) ++#define NL_MSG_PEEK_EXPLICIT (1<<4) ++#define NL_NO_AUTO_ACK (1<<5) + + #define NL_MSG_CRED_PRESENT 1 + +diff --git a/include/netlink/utils.h b/include/netlink/utils.h +index 1115bb4..2273835 100644 +--- a/include/netlink/utils.h ++++ b/include/netlink/utils.h +@@ -224,6 +224,21 @@ enum { + NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX = 20, + #define NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX + ++ /* Older versions of libnl3 would not use MSG_PEEK for nl_recvmsgs() unless calling ++ * nl_socket_enable_msg_peek(). Instead, the user had to specify the buffer size via ++ * nl_socket_set_msg_buf_size(), which in turn would default to 4*getpagesize(). ++ * ++ * The default value might not be large enough, so users who were not aware of the ++ * problem easily ended up using a too small receive buffer. Usually, one wants to ++ * avoid MSG_PEEK for recvmsg() because it requires an additional syscall. ++ * ++ * Now, as indicated by this capability, nl_recvmsgs() would use MSG_PEEK by default. The ++ * user still can explicitly disable MSG_PEEK by calling nl_socket_disable_msg_peek() or ++ * by setting the nl_socket_set_msg_buf_size() to a non-zero value. ++ */ ++ NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT = 24, ++#define NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT ++ + __NL_CAPABILITY_MAX, + NL_CAPABILITY_MAX = (__NL_CAPABILITY_MAX - 1), + #define NL_CAPABILITY_MAX NL_CAPABILITY_MAX +diff --git a/lib/nl.c b/lib/nl.c +index 2d1ce81..8df08e6 100644 +--- a/lib/nl.c ++++ b/lib/nl.c +@@ -676,7 +676,8 @@ int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla, + if (!buf || !nla) + return -NLE_INVAL; + +- if (sk->s_flags & NL_MSG_PEEK) ++ if ( (sk->s_flags & NL_MSG_PEEK) ++ || (!(sk->s_flags & NL_MSG_PEEK_EXPLICIT) && sk->s_bufsize == 0)) + flags |= MSG_PEEK | MSG_TRUNC; + + if (page_size == 0) +@@ -742,7 +743,7 @@ retry: + void *tmp; + + /* respond with error to an incomplete message */ +- if (!(sk->s_flags & NL_MSG_PEEK)) { ++ if (flags == 0) { + retval = -NLE_MSG_TRUNC; + goto abort; + } +diff --git a/lib/socket.c b/lib/socket.c +index 109c416..99e1a1b 100644 +--- a/lib/socket.c ++++ b/lib/socket.c +@@ -722,18 +722,23 @@ int nl_socket_set_nonblocking(const struct nl_sock *sk) + /** + * Enable use of MSG_PEEK when reading from socket + * @arg sk Netlink socket. ++ * ++ * See also NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT capability + */ + void nl_socket_enable_msg_peek(struct nl_sock *sk) + { +- sk->s_flags |= NL_MSG_PEEK; ++ sk->s_flags |= (NL_MSG_PEEK | NL_MSG_PEEK_EXPLICIT); + } + + /** + * Disable use of MSG_PEEK when reading from socket + * @arg sk Netlink socket. ++ * ++ * See also NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT capability + */ + void nl_socket_disable_msg_peek(struct nl_sock *sk) + { ++ sk->s_flags |= NL_MSG_PEEK_EXPLICIT; + sk->s_flags &= ~NL_MSG_PEEK; + } + +@@ -853,6 +858,19 @@ int nl_socket_set_buffer_size(struct nl_sock *sk, int rxbuf, int txbuf) + * socket will be able to receive. It is generally recommneded to specify + * a buffer size no less than the size of a memory page. + * ++ * Setting the @bufsize to zero means to use a default of 4 times getpagesize(). ++ * ++ * When MSG_PEEK is enabled, the buffer size is used for the initial choice ++ * of the buffer while peeking. It still makes sense to choose an optimal value ++ * to avoid realloc(). ++ * ++ * When MSG_PEEK is disabled, the buffer size is important because a too small ++ * size will lead to failure of receiving the message via nl_recvmsgs(). ++ * ++ * By default, MSG_PEEK is enabled unless the user calls either nl_socket_disable_msg_peek()/ ++ * nl_socket_enable_msg_peek() or sets the message buffer size to a positive value. ++ * See capability NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT for that. ++ * + * @return 0 on success or a negative error code. + */ + int nl_socket_set_msg_buf_size(struct nl_sock *sk, size_t bufsize) +diff --git a/lib/utils.c b/lib/utils.c +index 0f2a252..d4c0413 100644 +--- a/lib/utils.c ++++ b/lib/utils.c +@@ -1168,7 +1168,7 @@ int nl_has_capability (int capability) + 0, + 0, + 0, +- 0), ++ NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT), + /* IMPORTANT: these capability numbers are intended to be universal and stable + * for libnl3. Don't allocate new numbers on your own that differ from upstream + * libnl3. +-- +2.9.3 + diff --git a/SOURCES/0003-nl-reserve-integer-overflow-rh1442723.patch b/SOURCES/0003-nl-reserve-integer-overflow-rh1442723.patch new file mode 100644 index 0000000..17df054 --- /dev/null +++ b/SOURCES/0003-nl-reserve-integer-overflow-rh1442723.patch @@ -0,0 +1,86 @@ +From 4c39012783e0e376603138dddae9cd876bdd01ce Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Mon, 6 Feb 2017 22:23:52 +0100 +Subject: [PATCH 1/2] lib: check for integer-overflow in nlmsg_reserve() + +In general, libnl functions are not robust against calling with +invalid arguments. Thus, never call libnl functions with invalid +arguments. In case of nlmsg_reserve() this means never provide +a @len argument that causes overflow. + +Still, add an additional safeguard to avoid exploiting such bugs. + +Assume that @pad is a trusted, small integer. +Assume that n->nm_size is a valid number of allocated bytes (and thus +much smaller then SIZE_T_MAX). +Assume, that @len may be set to an untrusted value. Then the patch +avoids an integer overflow resulting in reserving too few bytes. + +(cherry picked from commit 3e18948f17148e6a3c4255bdeaaf01ef6081ceeb) +--- + lib/msg.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/lib/msg.c b/lib/msg.c +index e8a7e99..f30fd2d 100644 +--- a/lib/msg.c ++++ b/lib/msg.c +@@ -410,6 +410,9 @@ void *nlmsg_reserve(struct nl_msg *n, size_t len, int pad) + size_t nlmsg_len = n->nm_nlh->nlmsg_len; + size_t tlen; + ++ if (len > n->nm_size) ++ return NULL; ++ + tlen = pad ? ((len + (pad - 1)) & ~(pad - 1)) : len; + + if ((tlen + nlmsg_len) > n->nm_size) +-- +2.9.3 + + +From 1b347b7e5892eac5ea71090b8ec6c08756b0dcd4 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 18 Jan 2017 11:59:23 +0100 +Subject: [PATCH 2/2] lib/attr.c: check for valid length argument in + nla_reserve() + +https://github.com/thom311/libnl/issues/124 +(cherry picked from commit c473d59f972c35c5a7363d52ee6ee1e0792de0f8) +--- + lib/attr.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/lib/attr.c b/lib/attr.c +index a3d1b16..0dca3ec 100644 +--- a/lib/attr.c ++++ b/lib/attr.c +@@ -457,7 +457,10 @@ struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int attrlen) + { + struct nlattr *nla; + int tlen; +- ++ ++ if (attrlen < 0) ++ return NULL; ++ + tlen = NLMSG_ALIGN(msg->nm_nlh->nlmsg_len) + nla_total_size(attrlen); + + if (tlen > msg->nm_size) +@@ -499,8 +502,12 @@ int nla_put(struct nl_msg *msg, int attrtype, int datalen, const void *data) + struct nlattr *nla; + + nla = nla_reserve(msg, attrtype, datalen); +- if (!nla) ++ if (!nla) { ++ if (datalen < 0) ++ return -NLE_INVAL; ++ + return -NLE_NOMEM; ++ } + + if (datalen > 0) { + memcpy(nla_data(nla), data, datalen); +-- +2.9.3 + diff --git a/SPECS/libnl3.spec b/SPECS/libnl3.spec new file mode 100644 index 0000000..0d66b5e --- /dev/null +++ b/SPECS/libnl3.spec @@ -0,0 +1,202 @@ +Name: libnl3 +Version: 3.2.28 +Release: 4%{?dist} +Summary: Convenience library for kernel netlink sockets +Group: Development/Libraries +License: LGPLv2 +URL: http://www.infradead.org/~tgr/libnl/ + +%define fullversion %{version} + +Source: http://www.infradead.org/~tgr/libnl/files/libnl-%{fullversion}.tar.gz +Source1: http://www.infradead.org/~tgr/libnl/files/libnl-doc-%{fullversion}.tar.gz + +Patch1: 0001-compare-v4-addr-rh1370503.patch +Patch2: 0002-msg-peek-by-default-rh1396882.patch +Patch3: 0003-nl-reserve-integer-overflow-rh1442723.patch + +BuildRequires: flex bison +BuildRequires: python +BuildRequires: libtool autoconf automake + +%description +This package contains a convenience library to simplify +using the Linux kernel's netlink sockets interface for +network manipulation + +%package devel +Summary: Libraries and headers for using libnl3 +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: %{name}-cli = %{version}-%{release} +Requires: kernel-headers + +%description devel +This package contains various headers for using libnl3 + +%package cli +Summary: Command line interface utils for libnl3 +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} + +%description cli +This package contains various libnl3 utils and additional +libraries on which they depend + +%package doc +Summary: API documentation for libnl3 +Group: Documentation +Requires: %{name} = %{version}-%{release} + +%description doc +This package contains libnl3 API documentation + +%prep +%setup -q -n libnl-%{fullversion} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 + +tar -xzf %SOURCE1 + +%build +autoreconf -vif +%configure --disable-static +make %{?_smp_mflags} + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +find $RPM_BUILD_ROOT -name \*.la -delete + +# rhel-7.2 installed some cli tools to /usr/sbin. Recent libnl3 releases prefer to +# install *all* cli tools bo /usr/bin. Also do that for rhel-7.3 but hardlink the +# previous locations in /usr/sbin. +mkdir -p "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/genl-ctrl-list" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-class-add" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-class-delete" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-classid-lookup" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-class-list" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-cls-add" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-cls-delete" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-cls-list" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-link-list" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-pktloc-lookup" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-qdisc-add" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-qdisc-delete" "%{buildroot}%{_sbindir}/" +ln "%{buildroot}%{_bindir}/nl-qdisc-list" "%{buildroot}%{_sbindir}/" + +%check +make check + +%post -p /sbin/ldconfig +%post cli -p /sbin/ldconfig +%postun -p /sbin/ldconfig +%postun cli -p /sbin/ldconfig + +%files +%doc COPYING +%exclude %{_libdir}/libnl-cli*.so.* +%{_libdir}/libnl-*.so.* +%config(noreplace) %{_sysconfdir}/* + +%files devel +%doc COPYING +%{_includedir}/libnl3/netlink/ +%dir %{_includedir}/libnl3/ +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc + +%files cli +%doc COPYING +%{_libdir}/libnl-cli*.so.* +%{_libdir}/libnl/ +%{_sbindir}/* +%{_bindir}/* +%{_mandir}/man8/* + +%files doc +%doc COPYING +%doc libnl-doc-%{fullversion}/*.html +%doc libnl-doc-%{fullversion}/*.css +%doc libnl-doc-%{fullversion}/stylesheets/* +%doc libnl-doc-%{fullversion}/images/* +%doc libnl-doc-%{fullversion}/images/icons/* +%doc libnl-doc-%{fullversion}/images/icons/callouts/* +%doc libnl-doc-%{fullversion}/api/* + +%changelog +* Tue Apr 18 2017 Thomas Haller - 3.2.28-4 +* lib: check for integer overflow in nl_reserve() (rh#1440788, rh#1442723) + +* Mon Jan 9 2017 Thomas Haller - 3.2.28-3 +- lib: use MSG_PEEK by default for nl_msgrecvs() (rh#1396882) + +* Fri Aug 26 2016 Thomas Haller - 3.2.28-2 +- route: fix nl_object_identical() comparing AF_INET addresses (rh #1370503) + +* Sat Jul 9 2016 Thomas Haller - 3.2.28-1 +- update to latest upstream release 3.2.28 (rh #1296058) + +* Thu Jun 30 2016 Thomas Haller - 3.2.28-0.1 +- update to latest upstream release 3.2.28-rc1 (rh #1296058) + +* Fri Jan 8 2016 Thomas Haller - 3.2.27-1 +- rebase package to upstream version 3.2.27 (rh #1296058) + +* Wed Sep 30 2015 Thomas Haller - 3.2.21-10 +- rtnl: fix lookup in rtnl_neigh_get() to ignore address family (rh #1261028) + +* Mon Aug 24 2015 Thomas Haller - 3.2.21-9 +- improve local port handling for netlink socket with EADDRINUSE (rh #1249158) +- rtnl: backport support for link-netnsid attribute (rh #1255050) + +* Mon Jan 12 2015 Lubomir Rintel - 3.2.21-8 +- properly propagate EAGAIN error status (rh #1181255) + +* Wed Aug 20 2014 Thomas Haller - 3.2.21-7 +- backport support for IPv6 link local address generation mode (rh #1127718) + +* Fri Mar 21 2014 Thomas Haller - 3.2.21-6 +- fix rtnl_link_get_stat() for IPSTATS_MIB_* after kernel API breakage +- fix parsing IFLA_PROTINFO which broke on older kernels (rh #1062533) +- fix printing in nl_msec2str for whole seconds +- don't reset route scope in rtnl_route_build_msg if set to RT_SCOPE_NOWHERE +- backport nl_has_capability function + +* Wed Feb 26 2014 Thomas Graf - 3.2.21-5 +- nl-Increase-receive-buffer-size-to-4-pages.patch (rh #1040626) + +* Tue Jan 28 2014 Daniel Mach - 3.2.21-4 +- Mass rebuild 2014-01-24 + +* Fri Jan 24 2014 Thomas Haller - 3.2.21-3 +- Backport extended IPv6 address flags (rh #1057024) + +* Fri Dec 27 2013 Daniel Mach - 3.2.21-2 +- Mass rebuild 2013-12-27 + +* Fri Jan 25 2013 Jiri Pirko - 3.2.21-1 +- Update to 3.2.21 + +* Wed Jan 23 2013 Jiri Pirko - 3.2.20-1 +- Update to 3.2.20 + +* Sun Jan 20 2013 Jiri Pirko - 3.2.19-2 +- Age fix + +* Thu Jan 17 2013 Jiri Pirko - 3.2.19-1 +- Update to 3.2.19 + +* Tue Oct 30 2012 Dan Williams - 3.2.14-1 +- Update to 3.2.14 + +* Mon Sep 17 2012 Dan Williams - 3.2.13-1 +- Update to 3.2.13 + +* Fri Feb 10 2012 Dan Williams - 3.2.7-1 +- Update to 3.2.7 + +* Tue Jan 17 2012 Jiri Pirko - 3.2.6-1 +- Initial build