From 2ec678c923a05d1abaf285c4502d87ed49962881 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 30 Mar 2016 13:28:21 +0200 Subject: [PATCH] Fix link detection on 4.5 when build with 4.6 kernel --- ...ssume-that-netlink-message-is-as-big.patch | 80 +++++++++++++++++++ NetworkManager.spec | 8 +- 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 0001-platform-don-t-assume-that-netlink-message-is-as-big.patch diff --git a/0001-platform-don-t-assume-that-netlink-message-is-as-big.patch b/0001-platform-don-t-assume-that-netlink-message-is-as-big.patch new file mode 100644 index 0000000..057906f --- /dev/null +++ b/0001-platform-don-t-assume-that-netlink-message-is-as-big.patch @@ -0,0 +1,80 @@ +From 05e454a98d02e69afd28fe371be48b40c4069a76 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Wed, 30 Mar 2016 12:46:04 +0200 +Subject: [PATCH] platform: don't assume that netlink message is as big as at + compile time + +The link_stats structure grew between 4.5 and 4.6 and this would cause +the messages to me ignored when compiling with 4.6 headers and running +on 4.5. + +https://bugzilla.gnome.org/show_bug.cgi?id=764332 +--- + src/platform/nm-linux-platform.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c +index e2ff1f6..1430159 100644 +--- a/src/platform/nm-linux-platform.c ++++ b/src/platform/nm-linux-platform.c +@@ -55,6 +55,8 @@ + #include "wifi/wifi-utils.h" + #include "wifi/wifi-utils-wext.h" + ++#define offset_plus_sizeof(t,m) (offsetof (t,m) + sizeof (((t *) NULL)->m)) ++ + #define VLAN_FLAG_MVRP 0x8 + + /* nm-internal error codes for libnl. Make sure they don't overlap. */ +@@ -831,7 +833,7 @@ _parse_af_inet6 (NMPlatform *platform, + { + static struct nla_policy policy[IFLA_INET6_MAX+1] = { + [IFLA_INET6_FLAGS] = { .type = NLA_U32 }, +- [IFLA_INET6_CACHEINFO] = { .minlen = sizeof(struct ifla_cacheinfo) }, ++ [IFLA_INET6_CACHEINFO] = { .minlen = offset_plus_sizeof(struct ifla_cacheinfo, retrans_time) }, + [IFLA_INET6_CONF] = { .minlen = 4 }, + [IFLA_INET6_STATS] = { .minlen = 8 }, + [IFLA_INET6_ICMP6STATS] = { .minlen = 8 }, +@@ -1242,7 +1244,7 @@ _parse_lnk_vlan (const char *kind, struct nlattr *info_data) + { + static struct nla_policy policy[IFLA_VLAN_MAX+1] = { + [IFLA_VLAN_ID] = { .type = NLA_U16 }, +- [IFLA_VLAN_FLAGS] = { .minlen = sizeof(struct ifla_vlan_flags) }, ++ [IFLA_VLAN_FLAGS] = { .minlen = offset_plus_sizeof(struct ifla_vlan_flags, flags) }, + [IFLA_VLAN_INGRESS_QOS] = { .type = NLA_NESTED }, + [IFLA_VLAN_EGRESS_QOS] = { .type = NLA_NESTED }, + [IFLA_VLAN_PROTOCOL] = { .type = NLA_U16 }, +@@ -1429,9 +1431,9 @@ _new_from_nl_link (NMPlatform *platform, const NMPCache *cache, struct nlmsghdr + [IFLA_LINKINFO] = { .type = NLA_NESTED }, + [IFLA_QDISC] = { .type = NLA_STRING, + .maxlen = IFQDISCSIZ }, +- [IFLA_STATS] = { .minlen = sizeof(struct rtnl_link_stats) }, +- [IFLA_STATS64] = { .minlen = sizeof(struct rtnl_link_stats64)}, +- [IFLA_MAP] = { .minlen = sizeof(struct rtnl_link_ifmap) }, ++ [IFLA_STATS] = { .minlen = offset_plus_sizeof(struct rtnl_link_stats, tx_compressed) }, ++ [IFLA_STATS64] = { .minlen = offset_plus_sizeof(struct rtnl_link_stats64, tx_compressed)}, ++ [IFLA_MAP] = { .minlen = offset_plus_sizeof(struct rtnl_link_ifmap, port) }, + [IFLA_IFALIAS] = { .type = NLA_STRING, .maxlen = IFALIASZ }, + [IFLA_NUM_VF] = { .type = NLA_U32 }, + [IFLA_AF_SPEC] = { .type = NLA_NESTED }, +@@ -1612,7 +1614,7 @@ _new_from_nl_addr (struct nlmsghdr *nlh, gboolean id_only) + static struct nla_policy policy[IFA_MAX+1] = { + [IFA_LABEL] = { .type = NLA_STRING, + .maxlen = IFNAMSIZ }, +- [IFA_CACHEINFO] = { .minlen = sizeof(struct ifa_cacheinfo) }, ++ [IFA_CACHEINFO] = { .minlen = offset_plus_sizeof(struct ifa_cacheinfo, tstamp) }, + }; + const struct ifaddrmsg *ifa; + struct nlattr *tb[IFA_MAX+1]; +@@ -1726,7 +1728,7 @@ _new_from_nl_route (struct nlmsghdr *nlh, gboolean id_only) + [RTA_OIF] = { .type = NLA_U32 }, + [RTA_PRIORITY] = { .type = NLA_U32 }, + [RTA_FLOW] = { .type = NLA_U32 }, +- [RTA_CACHEINFO] = { .minlen = sizeof(struct rta_cacheinfo) }, ++ [RTA_CACHEINFO] = { .minlen = offset_plus_sizeof(struct rta_cacheinfo, rta_tsage) }, + [RTA_METRICS] = { .type = NLA_NESTED }, + [RTA_MULTIPATH] = { .type = NLA_NESTED }, + }; +-- +2.5.0 + diff --git a/NetworkManager.spec b/NetworkManager.spec index 2787171..510b5b9 100644 --- a/NetworkManager.spec +++ b/NetworkManager.spec @@ -11,7 +11,7 @@ #global git_sha %{nil} %global rpm_version 1.2.0 %global real_version 1.1.92 -%global release_version 0.7 +%global release_version 0.8 %global epoch_version 1 %global obsoletes_nmver 1:0.9.9.95-1 @@ -91,7 +91,7 @@ Source1: NetworkManager.conf Source2: 00-server.conf Source3: 20-connectivity-fedora.conf -#Patch1: 0001-some.patch +Patch0: 0001-platform-don-t-assume-that-netlink-message-is-as-big.patch Requires(post): systemd Requires(preun): systemd @@ -331,6 +331,7 @@ by nm-connection-editor and nm-applet in a non-graphical environment. %prep %setup -q -n NetworkManager-%{real_version} +%patch0 -p1 %build @@ -633,6 +634,9 @@ fi %endif %changelog +* Wed Mar 30 2016 Lubomir Rintel - 1:1.2.0-0.8.beta3 +- Fix link detection on 4.5 when build with 4.6 kernel + * Tue Mar 29 2016 Lubomir Rintel - 1:1.2.0-0.7.beta3 - Update to NetworkManager 1.2-beta3