Update with patches from upstream (3.2.29-2)
This commit is contained in:
parent
388350ebf3
commit
6fb5a4b6c3
458
0001-patchset-for-3.2.29-2.patch
Normal file
458
0001-patchset-for-3.2.29-2.patch
Normal file
@ -0,0 +1,458 @@
|
||||
From e70446547eafb7966801839f3c43fa833452e637 Mon Sep 17 00:00:00 2001
|
||||
From: Tobias Klauser <tklauser@distanz.ch>
|
||||
Date: Fri, 13 Jan 2017 18:18:20 +0100
|
||||
Subject: [PATCH 1/8] route/tc: Remove unused function tca_set_kind()
|
||||
|
||||
The public prototype and the last internal user of the function were
|
||||
removed in commit 8eb5b5532e ("Unified TC API") and it was unexported in
|
||||
commit 4280dfb85d ("build: don't export internal symbols"), so it is
|
||||
safe to remove it.
|
||||
|
||||
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
||||
Signed-off-by: Thomas Haller <thaller@redhat.com>
|
||||
|
||||
https://github.com/thom311/libnl/pull/122
|
||||
(cherry picked from commit e2d8f05bd9ffc6748d1c02482cba8c693a49557c)
|
||||
---
|
||||
lib/route/tc.c | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/lib/route/tc.c b/lib/route/tc.c
|
||||
index 384e857..f5b23f0 100644
|
||||
--- a/lib/route/tc.c
|
||||
+++ b/lib/route/tc.c
|
||||
@@ -239,12 +239,6 @@ nla_put_failure:
|
||||
return err;
|
||||
}
|
||||
|
||||
-void tca_set_kind(struct rtnl_tc *t, const char *kind)
|
||||
-{
|
||||
- strncpy(t->tc_kind, kind, sizeof(t->tc_kind) - 1);
|
||||
- t->ce_mask |= TCA_ATTR_KIND;
|
||||
-}
|
||||
-
|
||||
|
||||
/** @endcond */
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From f1d7373022ccdea288e19e19b566fe133a7ced3f Mon Sep 17 00:00:00 2001
|
||||
From: Laine Stump <laine@laine.org>
|
||||
Date: Tue, 17 Jan 2017 10:47:34 -0500
|
||||
Subject: [PATCH 2/8] sriov: fix crash in rtnl_link_sriov_parse_vflist
|
||||
|
||||
vf_vlan_info was incorrectly indexed with "len" (the length in bytes
|
||||
of the entire vfinfo_list rather than list_len (the index of the
|
||||
current end of the vf_vlan_info array)
|
||||
|
||||
https://github.com/thom311/libnl/issues/126
|
||||
http://lists.infradead.org/pipermail/libnl/2017-January/002270.html
|
||||
|
||||
Fixes: 5d6e43ebef12deadf31fccfa46c0b34892675d36
|
||||
|
||||
Signed-off-by: Thomas Haller <thaller@redhat.com>
|
||||
(cherry picked from commit 2d11f40f5034eeee4c2c994aa4015aa11d7a3784)
|
||||
---
|
||||
lib/route/link/sriov.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/route/link/sriov.c b/lib/route/link/sriov.c
|
||||
index acabf67..3721ae8 100644
|
||||
--- a/lib/route/link/sriov.c
|
||||
+++ b/lib/route/link/sriov.c
|
||||
@@ -568,7 +568,7 @@ int rtnl_link_sriov_parse_vflist(struct rtnl_link *link, struct nlattr **tb) {
|
||||
list_len = 0;
|
||||
nla_for_each_nested(nla_list, t[IFLA_VF_VLAN_LIST],
|
||||
list_rem) {
|
||||
- vf_vlan_info[len] = nla_data(nla_list);
|
||||
+ vf_vlan_info[list_len] = nla_data(nla_list);
|
||||
list_len++;
|
||||
}
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From b314759618a6ce7e93023c0f32595fa2105f5541 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Tue, 17 Jan 2017 18:16:11 +0100
|
||||
Subject: [PATCH 3/8] sriov: avoid buffer overrun in
|
||||
rtnl_link_sriov_parse_vflist()
|
||||
|
||||
Fixes: 5d6e43ebef12deadf31fccfa46c0b34892675d36
|
||||
|
||||
Signed-off-by: Thomas Haller <thaller@redhat.com>
|
||||
(cherry picked from commit 20ed636dee408d5fb288c400394342e619a55559)
|
||||
---
|
||||
lib/route/link/sriov.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/route/link/sriov.c b/lib/route/link/sriov.c
|
||||
index 3721ae8..b4bc9a7 100644
|
||||
--- a/lib/route/link/sriov.c
|
||||
+++ b/lib/route/link/sriov.c
|
||||
@@ -568,6 +568,8 @@ int rtnl_link_sriov_parse_vflist(struct rtnl_link *link, struct nlattr **tb) {
|
||||
list_len = 0;
|
||||
nla_for_each_nested(nla_list, t[IFLA_VF_VLAN_LIST],
|
||||
list_rem) {
|
||||
+ if (list_len >= MAX_VLAN_LIST_LEN)
|
||||
+ break;
|
||||
vf_vlan_info[list_len] = nla_data(nla_list);
|
||||
list_len++;
|
||||
}
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From a6fc07243cccd320ec9f95e49b349d9e36a6d7dd Mon Sep 17 00:00:00 2001
|
||||
From: Nick Kralevich <nnk@google.com>
|
||||
Date: Sat, 14 Jan 2017 11:11:34 -0800
|
||||
Subject: [PATCH 4/8] lib/utils.c: lazy initialize user_hz and psched_hz
|
||||
|
||||
Rather than initializing user_hz and psched_hz when libnl is loaded,
|
||||
defer initialization of these variables to the first time they are used.
|
||||
This has several advantages:
|
||||
|
||||
1) Avoids an unnecessary permission denied error on /proc/net/psched,
|
||||
which can occur on systems where /proc/net isn't readable due to
|
||||
security policy.
|
||||
2) Allows program code to initialize the environment variables
|
||||
PROC_NET_PSCHED and/or PROC_ROOT prior to the first libnl call, giving a
|
||||
program more flexibility about where libnl should look.
|
||||
3) Trivially faster startup time (although unlikely to be significant).
|
||||
4) Compiler may be able to prove that the get_psched_settings() function
|
||||
is unreachable and optimize appropriately, because the callers never
|
||||
(directly or indirectly) use this method. This could occur, for
|
||||
instance, in doing dead code elimination for programs which statically
|
||||
link libnl.
|
||||
|
||||
Signed-off-by: Nick Kralevich <nnk@google.com>
|
||||
|
||||
https://github.com/thom311/libnl/pull/123
|
||||
(cherry picked from commit 8e0ead4b5bcf22dcc210442629ebb416116ea1f0)
|
||||
---
|
||||
lib/utils.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/utils.c b/lib/utils.c
|
||||
index 1c9e594..49e2547 100644
|
||||
--- a/lib/utils.c
|
||||
+++ b/lib/utils.c
|
||||
@@ -427,11 +427,15 @@ static double ticks_per_usec = 1.0f;
|
||||
* Supports the environment variables:
|
||||
* PROC_NET_PSCHED - may point to psched file in /proc
|
||||
* PROC_ROOT - may point to /proc fs */
|
||||
-static void __init get_psched_settings(void)
|
||||
+static void get_psched_settings(void)
|
||||
{
|
||||
char name[FILENAME_MAX];
|
||||
FILE *fd;
|
||||
int got_hz = 0;
|
||||
+ static int initialized = 0;
|
||||
+ if (initialized == 1) {
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (getenv("HZ")) {
|
||||
long hz = strtol(getenv("HZ"), NULL, 0);
|
||||
@@ -480,6 +484,7 @@ static void __init get_psched_settings(void)
|
||||
fclose(fd);
|
||||
}
|
||||
}
|
||||
+ initialized = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -488,6 +493,7 @@ static void __init get_psched_settings(void)
|
||||
*/
|
||||
int nl_get_user_hz(void)
|
||||
{
|
||||
+ get_psched_settings();
|
||||
return user_hz;
|
||||
}
|
||||
|
||||
@@ -496,6 +502,7 @@ int nl_get_user_hz(void)
|
||||
*/
|
||||
int nl_get_psched_hz(void)
|
||||
{
|
||||
+ get_psched_settings();
|
||||
return psched_hz;
|
||||
}
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From ab357122ddc3fa813dfa2e566755ebdec0f25a70 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Tue, 17 Jan 2017 18:32:08 +0100
|
||||
Subject: [PATCH 5/8] lib/utils.c: ensure calling get_psched_settings() for
|
||||
nl_us2ticks()/nl_ticks2us()
|
||||
|
||||
(cherry picked from commit c33dec5a4a7df01730f90dd41f28a53c188aab46)
|
||||
---
|
||||
lib/utils.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/utils.c b/lib/utils.c
|
||||
index 49e2547..7a791e1 100644
|
||||
--- a/lib/utils.c
|
||||
+++ b/lib/utils.c
|
||||
@@ -513,6 +513,7 @@ int nl_get_psched_hz(void)
|
||||
*/
|
||||
uint32_t nl_us2ticks(uint32_t us)
|
||||
{
|
||||
+ get_psched_settings();
|
||||
return us * ticks_per_usec;
|
||||
}
|
||||
|
||||
@@ -524,6 +525,7 @@ uint32_t nl_us2ticks(uint32_t us)
|
||||
*/
|
||||
uint32_t nl_ticks2us(uint32_t ticks)
|
||||
{
|
||||
+ get_psched_settings();
|
||||
return ticks / ticks_per_usec;
|
||||
}
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From 8b63978d1ea9be8654af8fd790de6ae24deb84c7 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Tue, 17 Jan 2017 18:49:42 +0100
|
||||
Subject: [PATCH 6/8] lib/utils.c: add mutex to get_psched_settings()
|
||||
|
||||
Let's add a mutex to get_psched_settings() hoping to solve worst
|
||||
case scenarios when calling get_psched_settings() from multiple
|
||||
threads.
|
||||
|
||||
Also, only read the environment variables once, who knows whether
|
||||
they are modified concurrently.
|
||||
|
||||
(cherry picked from commit 24d669a3a990d1d637fc94698cc4ae2c6e8e178e)
|
||||
---
|
||||
lib/utils.c | 32 ++++++++++++++++++++------------
|
||||
1 file changed, 20 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/lib/utils.c b/lib/utils.c
|
||||
index 7a791e1..fead196 100644
|
||||
--- a/lib/utils.c
|
||||
+++ b/lib/utils.c
|
||||
@@ -432,13 +432,20 @@ static void get_psched_settings(void)
|
||||
char name[FILENAME_MAX];
|
||||
FILE *fd;
|
||||
int got_hz = 0;
|
||||
- static int initialized = 0;
|
||||
- if (initialized == 1) {
|
||||
+ static volatile int initialized = 0;
|
||||
+ const char *ev;
|
||||
+ NL_LOCK(mutex);
|
||||
+
|
||||
+ if (initialized == 1)
|
||||
return;
|
||||
- }
|
||||
|
||||
- if (getenv("HZ")) {
|
||||
- long hz = strtol(getenv("HZ"), NULL, 0);
|
||||
+ nl_lock(&mutex);
|
||||
+
|
||||
+ if (initialized == 1)
|
||||
+ return;
|
||||
+
|
||||
+ if ((ev = getenv("HZ"))) {
|
||||
+ long hz = strtol(ev, NULL, 0);
|
||||
|
||||
if (LONG_MIN != hz && LONG_MAX != hz) {
|
||||
user_hz = hz;
|
||||
@@ -451,16 +458,15 @@ static void get_psched_settings(void)
|
||||
|
||||
psched_hz = user_hz;
|
||||
|
||||
- if (getenv("TICKS_PER_USEC")) {
|
||||
- double t = strtod(getenv("TICKS_PER_USEC"), NULL);
|
||||
+ if ((ev = getenv("TICKS_PER_USEC"))) {
|
||||
+ double t = strtod(ev, NULL);
|
||||
ticks_per_usec = t;
|
||||
}
|
||||
else {
|
||||
- if (getenv("PROC_NET_PSCHED"))
|
||||
- snprintf(name, sizeof(name), "%s", getenv("PROC_NET_PSCHED"));
|
||||
- else if (getenv("PROC_ROOT"))
|
||||
- snprintf(name, sizeof(name), "%s/net/psched",
|
||||
- getenv("PROC_ROOT"));
|
||||
+ if ((ev = getenv("PROC_NET_PSCHED")))
|
||||
+ snprintf(name, sizeof(name), "%s", ev);
|
||||
+ else if ((ev = getenv("PROC_ROOT")))
|
||||
+ snprintf(name, sizeof(name), "%s/net/psched", ev);
|
||||
else
|
||||
strncpy(name, "/proc/net/psched", sizeof(name) - 1);
|
||||
|
||||
@@ -485,6 +491,8 @@ static void get_psched_settings(void)
|
||||
}
|
||||
}
|
||||
initialized = 1;
|
||||
+
|
||||
+ nl_unlock(&mutex);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From 64d91a58f78116a769eb274e6360a63c4bbf3140 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Kralevich <nnk@google.com>
|
||||
Date: Tue, 17 Jan 2017 10:56:52 -0800
|
||||
Subject: [PATCH 7/8] fopen: add O_CLOEXEC
|
||||
|
||||
Add O_CLOEXEC to various fopen() calls. This avoids file descriptors
|
||||
leaking across an exec() boundary in a multi-threaded program. Please
|
||||
see "man 2 open" for additional information about O_CLOEXEC.
|
||||
|
||||
Signed-off-by: Nick Kralevich <nnk@google.com>
|
||||
|
||||
https://github.com/thom311/libnl/pull/128
|
||||
(cherry picked from commit 64b12a065ae4fb84ae92299037c7eb8526549c85)
|
||||
---
|
||||
lib/route/classid.c | 4 ++--
|
||||
lib/route/pktloc.c | 2 +-
|
||||
lib/route/qdisc/netem.c | 2 +-
|
||||
lib/utils.c | 4 ++--
|
||||
src/nl-list-sockets.c | 2 +-
|
||||
5 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/lib/route/classid.c b/lib/route/classid.c
|
||||
index f2d3a01..0331eee 100644
|
||||
--- a/lib/route/classid.c
|
||||
+++ b/lib/route/classid.c
|
||||
@@ -328,7 +328,7 @@ int rtnl_tc_read_classid_file(void)
|
||||
}
|
||||
}
|
||||
|
||||
- if (!(fd = fopen(path, "r"))) {
|
||||
+ if (!(fd = fopen(path, "re"))) {
|
||||
err = -nl_syserr2nlerr(errno);
|
||||
goto errout;
|
||||
}
|
||||
@@ -402,7 +402,7 @@ int rtnl_classid_generate(const char *name, uint32_t *result, uint32_t parent)
|
||||
if (build_sysconf_path(&path, "classid") < 0)
|
||||
return -NLE_NOMEM;
|
||||
|
||||
- if (!(fd = fopen(path, "a"))) {
|
||||
+ if (!(fd = fopen(path, "ae"))) {
|
||||
err = -nl_syserr2nlerr(errno);
|
||||
goto errout;
|
||||
}
|
||||
diff --git a/lib/route/pktloc.c b/lib/route/pktloc.c
|
||||
index 75d049e..6d95cc5 100644
|
||||
--- a/lib/route/pktloc.c
|
||||
+++ b/lib/route/pktloc.c
|
||||
@@ -109,7 +109,7 @@ static int read_pktlocs(void)
|
||||
|
||||
NL_DBG(2, "Reading packet location file \"%s\"\n", path);
|
||||
|
||||
- if (!(fd = fopen(path, "r"))) {
|
||||
+ if (!(fd = fopen(path, "re"))) {
|
||||
err = -NLE_PKTLOC_FILE;
|
||||
goto errout;
|
||||
}
|
||||
diff --git a/lib/route/qdisc/netem.c b/lib/route/qdisc/netem.c
|
||||
index 399fd2c..8ecc405 100644
|
||||
--- a/lib/route/qdisc/netem.c
|
||||
+++ b/lib/route/qdisc/netem.c
|
||||
@@ -901,7 +901,7 @@ int rtnl_netem_set_delay_distribution(struct rtnl_qdisc *qdisc, const char *dist
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(test_path); i++) {
|
||||
snprintf(name, NAME_MAX, "%s%s%s", test_path[i], dist_type, dist_suffix);
|
||||
- if ((f = fopen(name, "r")))
|
||||
+ if ((f = fopen(name, "re")))
|
||||
break;
|
||||
}
|
||||
|
||||
diff --git a/lib/utils.c b/lib/utils.c
|
||||
index fead196..64e87b6 100644
|
||||
--- a/lib/utils.c
|
||||
+++ b/lib/utils.c
|
||||
@@ -75,7 +75,7 @@ int __nl_read_num_str_file(const char *path, int (*cb)(long, const char *))
|
||||
FILE *fd;
|
||||
char buf[128];
|
||||
|
||||
- fd = fopen(path, "r");
|
||||
+ fd = fopen(path, "re");
|
||||
if (fd == NULL)
|
||||
return -nl_syserr2nlerr(errno);
|
||||
|
||||
@@ -470,7 +470,7 @@ static void get_psched_settings(void)
|
||||
else
|
||||
strncpy(name, "/proc/net/psched", sizeof(name) - 1);
|
||||
|
||||
- if ((fd = fopen(name, "r"))) {
|
||||
+ if ((fd = fopen(name, "re"))) {
|
||||
unsigned int ns_per_usec, ns_per_tick, nom, denom;
|
||||
|
||||
if (fscanf(fd, "%08x %08x %08x %08x",
|
||||
diff --git a/src/nl-list-sockets.c b/src/nl-list-sockets.c
|
||||
index c2fa1cd..74957de 100644
|
||||
--- a/src/nl-list-sockets.c
|
||||
+++ b/src/nl-list-sockets.c
|
||||
@@ -18,7 +18,7 @@ int main(int argc, char *argv[])
|
||||
FILE *fd;
|
||||
char buf[2048], p[64];
|
||||
|
||||
- fd = fopen(PROC_NETLINK, "r");
|
||||
+ fd = fopen(PROC_NETLINK, "re");
|
||||
if (fd == NULL) {
|
||||
perror("fopen");
|
||||
return -1;
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From f2d61fa9a602248340774fb2cc1ac452fa0b101b Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Wed, 18 Jan 2017 11:59:23 +0100
|
||||
Subject: [PATCH 8/8] 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
|
||||
|
13
libnl3.spec
13
libnl3.spec
@ -1,6 +1,6 @@
|
||||
Name: libnl3
|
||||
Version: 3.2.29
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Convenience library for kernel netlink sockets
|
||||
Group: Development/Libraries
|
||||
License: LGPLv2
|
||||
@ -11,6 +11,8 @@ URL: http://www.infradead.org/~tgr/libnl/
|
||||
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-patchset-for-3.2.29-2.patch
|
||||
|
||||
BuildRequires: flex bison
|
||||
BuildRequires: python
|
||||
BuildRequires: libtool autoconf automake
|
||||
@ -69,6 +71,8 @@ Python 3 bindings for libnl3
|
||||
%prep
|
||||
%setup -q -n libnl-%{fullversion}
|
||||
|
||||
%patch1 -p1
|
||||
|
||||
tar -xzf %SOURCE1
|
||||
|
||||
%build
|
||||
@ -148,6 +152,13 @@ popd
|
||||
%{python3_sitearch}/netlink-*.egg-info
|
||||
|
||||
%changelog
|
||||
* Wed Jan 18 2017 Thomas Haller <thaller@redhat.com> - 3.2.29-2
|
||||
- Update with patches from upstream
|
||||
- check valid input arguments for nla_reserve() (rh#1414305, CVE-2017-0386)
|
||||
- fix crash during SRIOV parsing
|
||||
- lazyly read psched settings
|
||||
- use O_CLOEXEC when creating file descriptors with fopen()
|
||||
|
||||
* Fri Dec 30 2016 Thomas Haller <thaller@redhat.com> - 3.2.29-1
|
||||
- Update to 3.2.29
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user