diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1c0ec4e4b6a5d55cae88271f50c90d262f1776af --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# libnl3 +[test] add readme.md + +#### 介绍 +{**以下是 Gitee 平台说明,您可以替换此简介** +Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 +无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} + +#### 软件架构 +软件架构说明 + + +#### 安装教程 + +1. xxxx +2. xxxx +3. xxxx + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request + + +#### 特技 + +1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md +2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) +3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 +4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 +5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) +6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/backport-lib-add-include-netlink-private-nl-auto-h-header.patch b/backport-lib-add-include-netlink-private-nl-auto-h-header.patch new file mode 100644 index 0000000000000000000000000000000000000000..43f95c6df7035c3d240040dca0daba40efc453a2 --- /dev/null +++ b/backport-lib-add-include-netlink-private-nl-auto-h-header.patch @@ -0,0 +1,123 @@ +From abb7391f38893af7d6108f97ac8597468f113a41 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 15 Apr 2020 12:42:05 +0200 +Subject: [PATCH] lib: add "include/netlink-private/nl-auto.h" header + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/abb7391f38893af7d6108f97ac8597468f113a41 + +--- + Makefile.am | 1 + + include/netlink-private/nl-auto.h | 60 +++++++++++++++++++++++++++++++ + include/netlink-private/utils.h | 14 ++------ + 3 files changed, 63 insertions(+), 12 deletions(-) + create mode 100644 include/netlink-private/nl-auto.h + +diff --git a/Makefile.am b/Makefile.am +index b2e87379..085da53f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -261,6 +261,7 @@ noinst_HEADERS = \ + include/netlink-private/cache-api.h \ + include/netlink-private/genl.h \ + include/netlink-private/netlink.h \ ++ include/netlink-private/nl-auto.h \ + include/netlink-private/object-api.h \ + include/netlink-private/route/link/api.h \ + include/netlink-private/route/link/sriov.h \ +diff --git a/include/netlink-private/nl-auto.h b/include/netlink-private/nl-auto.h +new file mode 100644 +index 00000000..7b923f26 +--- /dev/null ++++ b/include/netlink-private/nl-auto.h +@@ -0,0 +1,60 @@ ++// SPDX-License-Identifier: LGPL-2.1+ ++ ++#ifndef NETLINK_NL_AUTO_H_ ++#define NETLINK_NL_AUTO_H_ ++ ++#define _nl_auto(fcn) __attribute__ ((__cleanup__(fcn))) ++ ++#define _NL_AUTO_DEFINE_FCN_VOID0(CastType, name, func) \ ++static inline void name(void *v) \ ++{ \ ++ if (*((CastType *) v)) \ ++ func(*((CastType *) v)); \ ++} ++ ++#define _NL_AUTO_DEFINE_FCN_TYPED0(CastType, name, func) \ ++static inline void name(CastType *v) \ ++{ \ ++ if (*v) \ ++ func(*v); \ ++} ++ ++#define _nl_auto_free _nl_auto(_nl_auto_free_fcn) ++_NL_AUTO_DEFINE_FCN_VOID0(void *, _nl_auto_free_fcn, free) ++ ++struct nl_addr; ++void nl_addr_put(struct nl_addr *); ++#define _nl_auto_nl_addr _nl_auto(_nl_auto_nl_addr_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_addr *, _nl_auto_nl_addr_fcn, nl_addr_put) ++ ++struct nl_msg; ++void nlmsg_free(struct nl_msg *); ++#define _nl_auto_nl_msg _nl_auto(_nl_auto_nl_msg_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_msg *, _nl_auto_nl_msg_fcn, nlmsg_free) ++ ++struct rtnl_link; ++void rtnl_link_put(struct rtnl_link *); ++#define _nl_auto_rtnl_link _nl_auto(_nl_auto_rtnl_link_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link *, _nl_auto_rtnl_link_fcn, rtnl_link_put) ++ ++struct rtnl_route; ++void rtnl_route_put(struct rtnl_route *); ++#define _nl_auto_rtnl_route _nl_auto(_nl_auto_rtnl_route_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_route *, _nl_auto_rtnl_route_fcn, rtnl_route_put) ++ ++struct rtnl_nexthop; ++void rtnl_route_nh_free(struct rtnl_nexthop *); ++#define _nl_auto_rtnl_nexthop _nl_auto(_nl_auto_rtnl_nexthop_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nexthop *, _nl_auto_rtnl_nexthop_fcn, rtnl_route_nh_free) ++ ++struct nl_cache; ++void nl_cache_put(struct nl_cache *); ++#define _nl_auto_nl_cache _nl_auto(_nl_auto_nl_cache_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_cache *, _nl_auto_nl_cache_fcn, nl_cache_put) ++ ++struct rtnl_link_af_ops; ++void rtnl_link_af_ops_put(struct rtnl_link_af_ops *); ++#define _nl_auto_rtnl_link_af_ops _nl_auto(_nl_auto_rtnl_link_af_ops_fcn) ++_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link_af_ops *, _nl_auto_rtnl_link_af_ops_fcn, rtnl_link_af_ops_put) ++ ++#endif /* NETLINK_NL_AUTO_H_ */ +diff --git a/include/netlink-private/utils.h b/include/netlink-private/utils.h +index 9c5a3d82..46e77451 100644 +--- a/include/netlink-private/utils.h ++++ b/include/netlink-private/utils.h +@@ -85,18 +85,6 @@ + + /*****************************************************************************/ + +-#define _NL_AUTO_DEFINE_FCN_VOID0(CastType, name, func) \ +-static inline void name (void *v) \ +-{ \ +- if (*((CastType *) v)) \ +- func (*((CastType *) v)); \ +-} +- +-#define _nl_auto_free _nl_auto(_nl_auto_free_fcn) +-_NL_AUTO_DEFINE_FCN_VOID0 (void *, _nl_auto_free_fcn, free) +- +-/*****************************************************************************/ +- + extern const char *nl_strerror_l(int err); + + /*****************************************************************************/ +@@ -222,4 +210,6 @@ _nl_strncpy(char *dst, const char *src, size_t len) + return dst; + } + ++#include "nl-auto.h" ++ + #endif diff --git a/backport-lib-use-proper-int-type-for-id-attributes-in-nl_object_identical.patch b/backport-lib-use-proper-int-type-for-id-attributes-in-nl_object_identical.patch new file mode 100644 index 0000000000000000000000000000000000000000..bb6e7ff317b56dc5994d2cb532c174f35dfebcf2 --- /dev/null +++ b/backport-lib-use-proper-int-type-for-id-attributes-in-nl_object_identical.patch @@ -0,0 +1,29 @@ +From f9d0181ceb2fc7c54abf89eff4c6b57e8fe6dd97 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Fri, 17 Apr 2020 16:31:10 +0200 +Subject: [PATCH] lib: use proper int type for id attributes in + nl_object_identical() + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/f9d0181ceb2fc7c54abf89eff4c6b57e8fe6dd97 + +--- + lib/object.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/lib/object.c b/lib/object.c +index d15cd152..07a21d22 100644 +--- a/lib/object.c ++++ b/lib/object.c +@@ -314,8 +314,9 @@ int nl_object_identical(struct nl_object *a, struct nl_object *b) + return 0; + + if (ops->oo_id_attrs_get) { +- int req_attrs_a = ops->oo_id_attrs_get(a); +- int req_attrs_b = ops->oo_id_attrs_get(b); ++ uint32_t req_attrs_a = ops->oo_id_attrs_get(a); ++ uint32_t req_attrs_b = ops->oo_id_attrs_get(b); ++ + if (req_attrs_a != req_attrs_b) + return 0; + req_attrs = req_attrs_a; diff --git a/backport-route-link-Check-for-null-pointer-in-macvlan.patch b/backport-route-link-Check-for-null-pointer-in-macvlan.patch new file mode 100644 index 0000000000000000000000000000000000000000..f98be4bd296c54d6915a2e42cb555855dd88d831 --- /dev/null +++ b/backport-route-link-Check-for-null-pointer-in-macvlan.patch @@ -0,0 +1,30 @@ +From 01ea9a6224b77292e8506bf179729aeeaac30398 Mon Sep 17 00:00:00 2001 +From: Jan Slomski +Date: Wed, 21 Mar 2018 10:23:57 +0100 +Subject: [PATCH] route/link: Check for null pointer in macvlan + +In cases where link->l_info is not set, a null-ptr-exception +will be invoked. + +https://github.com/thom311/libnl/pull/238 + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/01ea9a6224b77292e8506bf179729aeeaac30398 +Reference:https://github.com/thom311/libnl/commit/9cc38dcaeb55b5729c6c97b47884cebbda72b693 +--- + lib/route/link/macvlan.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/lib/route/link/macvlan.c b/lib/route/link/macvlan.c +index a23fe6d8..3ccebf45 100644 +--- a/lib/route/link/macvlan.c ++++ b/lib/route/link/macvlan.c +@@ -149,6 +149,8 @@ static void macvlan_free(struct rtnl_link *link) + uint32_t i; + + mvi = link->l_info; ++ if (!mvi) ++ return; + + for (i = 0; i < mvi->mvi_maccount; i++) + nl_addr_put(mvi->mvi_macaddr[i]); diff --git a/backport-route-link-add-RTNL_LINK_REASM_OVERLAPS-stat.patch b/backport-route-link-add-RTNL_LINK_REASM_OVERLAPS-stat.patch new file mode 100644 index 0000000000000000000000000000000000000000..488a12bb4f6ae40d4a66a4f6bd246319071bacf0 --- /dev/null +++ b/backport-route-link-add-RTNL_LINK_REASM_OVERLAPS-stat.patch @@ -0,0 +1,66 @@ +From bab9e77c87d3b596e77d669b0a827b50e725bb62 Mon Sep 17 00:00:00 2001 +From: Ilya Pronin +Date: Fri, 3 Apr 2020 20:00:37 -0700 +Subject: [PATCH] route/link: add RTNL_LINK_REASM_OVERLAPS stat + +The new stat exposes IPSTATS_MIB_REASM_OVERLAPS link stat. However, the +original motivation for this change was fixing the issue with missing RX +packets link stat. + +The regression was introduced in version 3.5.0 with commit 73c1d047, +that added a new enum constant IPSTATS_MIB_REASM_OVERLAPS. Without this +patch, IPSTATS_MIB_REASM_OVERLAPS is missing from +map_stat_id_from_IPSTATS_MIB_v2 and is mapped by it to 0. This tricks +inet6_parse_protinfo() into erroneously overwriting RTNL_LINK_RX_PACKETS +stat, which happens to have value 0, when it tries to set +IPSTATS_MIB_REASM_OVERLAPS. + +Fixes: 73c1d0479643 ('Sync linux headers to 4.19.66') + +https://github.com/thom311/libnl/pull/235 + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/bab9e77c87d3b596e77d669b0a827b50e725bb62 + +--- + include/netlink/route/link.h | 1 + + lib/route/link.c | 1 + + lib/route/link/inet6.c | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h +index 516d8e16..d0d6d2b5 100644 +--- a/include/netlink/route/link.h ++++ b/include/netlink/route/link.h +@@ -93,6 +93,7 @@ typedef enum { + RTNL_LINK_IP6_ECT0PKTS, /*!< IPv6 SNMP InECT0Pkts */ + RTNL_LINK_IP6_CEPKTS, /*!< IPv6 SNMP InCEPkts */ + RTNL_LINK_RX_NOHANDLER, /*!< Received packets dropped on inactive device */ ++ RTNL_LINK_REASM_OVERLAPS, /*!< SNMP ReasmOverlaps */ + __RTNL_LINK_STATS_MAX, + } rtnl_link_stat_id_t; + +diff --git a/lib/route/link.c b/lib/route/link.c +index 9439fe6d..ed6f4558 100644 +--- a/lib/route/link.c ++++ b/lib/route/link.c +@@ -3007,6 +3007,7 @@ static const struct trans_tbl link_stats[] = { + __ADD(RTNL_LINK_IP6_ECT0PKTS, Ip6_InECT0Pkts), + __ADD(RTNL_LINK_IP6_CEPKTS, Ip6_InCEPkts), + __ADD(RTNL_LINK_RX_NOHANDLER, rx_nohandler), ++ __ADD(RTNL_LINK_REASM_OVERLAPS, ReasmOverlaps), + }; + + char *rtnl_link_stat2str(int st, char *buf, size_t len) +diff --git a/lib/route/link/inet6.c b/lib/route/link/inet6.c +index c977b617..1ad49bf1 100644 +--- a/lib/route/link/inet6.c ++++ b/lib/route/link/inet6.c +@@ -135,6 +135,7 @@ static const uint8_t map_stat_id_from_IPSTATS_MIB_v2[__IPSTATS_MIB_MAX] = { + [33] = RTNL_LINK_IP6_ECT1PKTS, /* IPSTATS_MIB_ECT1PKTS */ + [34] = RTNL_LINK_IP6_ECT0PKTS, /* IPSTATS_MIB_ECT0PKTS */ + [35] = RTNL_LINK_IP6_CEPKTS, /* IPSTATS_MIB_CEPKTS */ ++ [36] = RTNL_LINK_REASM_OVERLAPS, /* IPSTATS_MIB_REASM_OVERLAPS */ + }; + + static int inet6_parse_protinfo(struct rtnl_link *link, struct nlattr *attr, diff --git a/backport-rtnl-link-fix-leaking-rtnl_link_af_ops-in-link_msg_parser.patch b/backport-rtnl-link-fix-leaking-rtnl_link_af_ops-in-link_msg_parser.patch new file mode 100644 index 0000000000000000000000000000000000000000..cc8cbb97d8a1aeb5abfcc2acdb9ab255cd9d2a71 --- /dev/null +++ b/backport-rtnl-link-fix-leaking-rtnl_link_af_ops-in-link_msg_parser.patch @@ -0,0 +1,25 @@ +From 2957d8f6c8bf1189545a7b0c1a49c4ccb26984a1 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 15 Apr 2020 14:01:09 +0200 +Subject: [PATCH] rtnl/link: fix leaking rtnl_link_af_ops in link_msg_parser() + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/2957d8f6c8bf1189545a7b0c1a49c4ccb26984a1 + +--- + lib/route/link.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/lib/route/link.c b/lib/route/link.c +index 0ce4b0ab..b73a8c5f 100644 +--- a/lib/route/link.c ++++ b/lib/route/link.c +@@ -722,6 +722,8 @@ static int link_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, + int remaining; + + nla_for_each_nested(af_attr, tb[IFLA_AF_SPEC], remaining) { ++ _nl_auto_rtnl_link_af_ops struct rtnl_link_af_ops *af_ops = NULL; ++ + af_ops = af_lookup_and_alloc(link, nla_type(af_attr)); + if (af_ops && af_ops->ao_parse_af) { + char *af_data = link->l_af_data[nla_type(af_attr)]; diff --git a/backport-rtnl-route-fix-NLE_NOMEM-handling-in-parse_multipath.patch b/backport-rtnl-route-fix-NLE_NOMEM-handling-in-parse_multipath.patch new file mode 100644 index 0000000000000000000000000000000000000000..77d5c6134eae4bd2604d7ea9e96f9b3fff856145 --- /dev/null +++ b/backport-rtnl-route-fix-NLE_NOMEM-handling-in-parse_multipath.patch @@ -0,0 +1,40 @@ +From fca338b9f453295037f96e8fe9236ebb4763dd25 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +Date: Wed, 15 Apr 2020 13:17:40 +0200 +Subject: [PATCH] rtnl/route: fix NLE_NOMEM handling in parse_multipath() + +Conflict:NA +Reference:https://github.com/thom311/libnl/commit/fca338b9f453295037f96e8fe9236ebb4763dd25 + +--- + lib/route/route_obj.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c +index b5cc4ed4..de56a76b 100644 +--- a/lib/route/route_obj.c ++++ b/lib/route/route_obj.c +@@ -1072,8 +1072,10 @@ static int parse_multipath(struct rtnl_route *route, struct nlattr *attr) + + addr = nl_addr_alloc_attr(ntb[RTA_NEWDST], + route->rt_family); +- if (!addr) ++ if (!addr) { ++ err = -NLE_NOMEM; + goto errout; ++ } + + err = rtnl_route_nh_set_newdst(nh, addr); + nl_addr_put(addr); +@@ -1085,8 +1087,10 @@ static int parse_multipath(struct rtnl_route *route, struct nlattr *attr) + struct nl_addr *addr; + + addr = rtnl_route_parse_via(ntb[RTA_VIA]); +- if (!addr) ++ if (!addr) { ++ err = -NLE_NOMEM; + goto errout; ++ } + + err = rtnl_route_nh_set_via(nh, addr); + nl_addr_put(addr); diff --git a/libnl3.spec b/libnl3.spec index 45419815dfc6c3f190fd8d964784ab839bf82fcd..8b32e85f7ba7c0ac74fb99b460da51dfde7e519b 100644 --- a/libnl3.spec +++ b/libnl3.spec @@ -1,12 +1,17 @@ -%define ver 3_5_0 Name: libnl3 Version: 3.5.0 -Release: 1 +Release: 4 Summary: Providing APIs to netlink protocol based Linux kernel interfaces License: LGPLv2 URL: http://www.infradead.org/~tgr/libnl/ -Source: https://github.com/thom311/libnl/releases/download/libnl%{uver}/libnl-%{version}.tar.gz - +Source: https://github.com/thom311/libnl/releases/download/libnl3_5_0/libnl-3.5.0.tar.gz + +Patch6000: backport-lib-add-include-netlink-private-nl-auto-h-header.patch +Patch6001: backport-lib-use-proper-int-type-for-id-attributes-in-nl_object_identical.patch +Patch6002: backport-route-link-add-RTNL_LINK_REASM_OVERLAPS-stat.patch +Patch6003: backport-route-link-Check-for-null-pointer-in-macvlan.patch +Patch6004: backport-rtnl-link-fix-leaking-rtnl_link_af_ops-in-link_msg_parser.patch +Patch6005: backport-rtnl-route-fix-NLE_NOMEM-handling-in-parse_multipath.patch Patch9000: solve-redefinition-of-struct-ipv6_mreq.patch BuildRequires: flex bison libtool autoconf automake swig @@ -44,13 +49,6 @@ Requires: %{name} = %{version}-%{release} %description -n python3-libnl3 Python3 bindings for libnl3 -%package -n python2-libnl3 -Summary: Python2 bindings for libnl3 -BuildRequires: python2-devel -Requires: %{name} = %{version}-%{release} - -%description -n python2-libnl3 -Python2 bindings for libnl3 %prep %autosetup -n libnl-%{version} -p1 @@ -60,8 +58,6 @@ autoreconf -vif %make_build cd python -CFLAGS="$RPM_OPT_FLAGS" %py2_build -CFLAGS="$RPM_OPT_FLAGS" %py2_build CFLAGS="$RPM_OPT_FLAGS" %py3_build CFLAGS="$RPM_OPT_FLAGS" %py3_build @@ -71,14 +67,12 @@ CFLAGS="$RPM_OPT_FLAGS" %py3_build find $RPM_BUILD_ROOT -name *.la |xargs rm -f cd python -%py2_install %py3_install %check make check cd python -%{__python2} setup.py check %{__python3} setup.py check %ldconfig_scriptlets @@ -102,11 +96,31 @@ cd python %{python3_sitearch}/netlink %{python3_sitearch}/netlink-*.egg-info -%files -n python2-libnl3 -%{python2_sitearch}/netlink -%{python2_sitearch}/netlink-*.egg-info - %changelog +* Wed Mar 10 2021 zengwefeng - 3.5.0-4 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:add missing check for NULL return from allocate_rfd + add include netlink private nl-auto-h header + use proper int type for id attributes + add RTNL_LINK_REASM_OVERLAPS stat + check for null pointer in macvlan + fix leaking in link msg parser + fix NLE_NOMEM handling in parse multipath + +* Thu Oct 29 2020 gaihuiying - 3.5.0-3 +- Type:requirement +- ID:NA +- SUG:NA +- DESC:remove python2 + +* Thu Sep 10 2020 lunankun - 3.5.0-2 +- Type: bugfix +- ID: NA +- SUG: NA +- DESC: fix Source0 url + * Sun Jan 12 2020 openEuler Buildteam - 3.5.0-1 - update software to 3.5.0