kernel: update kernel 4.4 to version 4.4.15

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Hauke Mehrtens
2016-07-13 12:07:08 +02:00
parent d6b3b44d97
commit efa1960abb
20 changed files with 64 additions and 210 deletions

View File

@@ -28,8 +28,6 @@ Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/Makefile | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/arc/Makefile b/arch/arc/Makefile
index aeb1902..209d845 100644
--- a/arch/arc/Makefile
+++ b/arch/arc/Makefile
@@ -48,8 +48,6 @@ endif
@@ -41,6 +39,3 @@ index aeb1902..209d845 100644
# By default gcc 4.8 generates dwarf4 which kernel unwinder can't grok
ifeq ($(atleast_gcc48),y)
cflags-$(CONFIG_ARC_DW2_UNWIND) += -gdwarf-2
--
2.5.5

View File

@@ -31,7 +31,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
#endif
unsigned int br_mdb_rehash_seq;
@@ -649,7 +650,8 @@ struct net_bridge_port_group *br_multica
@@ -652,7 +653,8 @@ struct net_bridge_port_group *br_multica
struct net_bridge_port *port,
struct br_ip *group,
struct net_bridge_port_group __rcu *next,
@@ -41,7 +41,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct net_bridge_port_group *p;
@@ -664,12 +666,33 @@ struct net_bridge_port_group *br_multica
@@ -667,12 +669,33 @@ struct net_bridge_port_group *br_multica
hlist_add_head(&p->mglist, &port->mglist);
setup_timer(&p->timer, br_multicast_port_group_expired,
(unsigned long)p);
@@ -76,7 +76,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct net_bridge_mdb_entry *mp;
struct net_bridge_port_group *p;
@@ -696,13 +719,13 @@ static int br_multicast_add_group(struct
@@ -699,13 +722,13 @@ static int br_multicast_add_group(struct
for (pp = &mp->ports;
(p = mlock_dereference(*pp, br)) != NULL;
pp = &p->next) {
@@ -92,7 +92,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
if (unlikely(!p))
goto err;
rcu_assign_pointer(*pp, p);
@@ -721,7 +744,7 @@ err:
@@ -724,7 +747,7 @@ err:
static int br_ip4_multicast_add_group(struct net_bridge *br,
struct net_bridge_port *port,
__be32 group,
@@ -101,7 +101,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct br_ip br_group;
@@ -732,14 +755,14 @@ static int br_ip4_multicast_add_group(st
@@ -735,14 +758,14 @@ static int br_ip4_multicast_add_group(st
br_group.proto = htons(ETH_P_IP);
br_group.vid = vid;
@@ -118,7 +118,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct br_ip br_group;
@@ -750,7 +773,7 @@ static int br_ip6_multicast_add_group(st
@@ -753,7 +776,7 @@ static int br_ip6_multicast_add_group(st
br_group.proto = htons(ETH_P_IPV6);
br_group.vid = vid;
@@ -127,7 +127,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
}
#endif
@@ -995,6 +1018,7 @@ static int br_ip4_multicast_igmp3_report
@@ -998,6 +1021,7 @@ static int br_ip4_multicast_igmp3_report
struct sk_buff *skb,
u16 vid)
{
@@ -135,7 +135,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
struct igmpv3_report *ih;
struct igmpv3_grec *grec;
int i;
@@ -1035,12 +1059,13 @@ static int br_ip4_multicast_igmp3_report
@@ -1038,12 +1062,13 @@ static int br_ip4_multicast_igmp3_report
continue;
}
@@ -151,7 +151,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
if (err)
break;
}
@@ -1055,6 +1080,7 @@ static int br_ip6_multicast_mld2_report(
@@ -1058,6 +1083,7 @@ static int br_ip6_multicast_mld2_report(
struct sk_buff *skb,
u16 vid)
{
@@ -159,7 +159,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
struct icmp6hdr *icmp6h;
struct mld2_grec *grec;
int i;
@@ -1106,10 +1132,10 @@ static int br_ip6_multicast_mld2_report(
@@ -1109,10 +1135,10 @@ static int br_ip6_multicast_mld2_report(
grec->grec_type == MLD2_MODE_IS_INCLUDE) &&
ntohs(*nsrcs) == 0) {
br_ip6_multicast_leave_group(br, port, &grec->grec_mca,
@@ -172,7 +172,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
if (!err)
break;
}
@@ -1424,7 +1450,8 @@ br_multicast_leave_group(struct net_brid
@@ -1427,7 +1453,8 @@ br_multicast_leave_group(struct net_brid
struct net_bridge_port *port,
struct br_ip *group,
struct bridge_mcast_other_query *other_query,
@@ -182,7 +182,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct net_bridge_mdb_htable *mdb;
struct net_bridge_mdb_entry *mp;
@@ -1448,7 +1475,7 @@ br_multicast_leave_group(struct net_brid
@@ -1451,7 +1478,7 @@ br_multicast_leave_group(struct net_brid
for (pp = &mp->ports;
(p = mlock_dereference(*pp, br)) != NULL;
pp = &p->next) {
@@ -191,7 +191,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
continue;
rcu_assign_pointer(*pp, p->next);
@@ -1511,7 +1538,7 @@ br_multicast_leave_group(struct net_brid
@@ -1514,7 +1541,7 @@ br_multicast_leave_group(struct net_brid
for (p = mlock_dereference(mp->ports, br);
p != NULL;
p = mlock_dereference(p->next, br)) {
@@ -200,7 +200,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
continue;
if (!hlist_unhashed(&p->mglist) &&
@@ -1529,8 +1556,8 @@ out:
@@ -1532,8 +1559,8 @@ out:
static void br_ip4_multicast_leave_group(struct net_bridge *br,
struct net_bridge_port *port,
@@ -211,7 +211,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct br_ip br_group;
struct bridge_mcast_own_query *own_query;
@@ -1545,14 +1572,14 @@ static void br_ip4_multicast_leave_group
@@ -1548,14 +1575,14 @@ static void br_ip4_multicast_leave_group
br_group.vid = vid;
br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query,
@@ -228,7 +228,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
{
struct br_ip br_group;
struct bridge_mcast_own_query *own_query;
@@ -1567,7 +1594,7 @@ static void br_ip6_multicast_leave_group
@@ -1570,7 +1597,7 @@ static void br_ip6_multicast_leave_group
br_group.vid = vid;
br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query,
@@ -237,7 +237,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
}
#endif
@@ -1576,6 +1603,7 @@ static int br_multicast_ipv4_rcv(struct
@@ -1579,6 +1606,7 @@ static int br_multicast_ipv4_rcv(struct
struct sk_buff *skb,
u16 vid)
{
@@ -245,7 +245,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
struct sk_buff *skb_trimmed = NULL;
struct igmphdr *ih;
int err;
@@ -1592,12 +1620,13 @@ static int br_multicast_ipv4_rcv(struct
@@ -1595,12 +1623,13 @@ static int br_multicast_ipv4_rcv(struct
BR_INPUT_SKB_CB(skb)->igmp = 1;
ih = igmp_hdr(skb);
@@ -260,7 +260,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
break;
case IGMPV3_HOST_MEMBERSHIP_REPORT:
err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid);
@@ -1606,7 +1635,7 @@ static int br_multicast_ipv4_rcv(struct
@@ -1609,7 +1638,7 @@ static int br_multicast_ipv4_rcv(struct
err = br_ip4_multicast_query(br, port, skb_trimmed, vid);
break;
case IGMP_HOST_LEAVE_MESSAGE:
@@ -269,7 +269,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
break;
}
@@ -1622,6 +1651,7 @@ static int br_multicast_ipv6_rcv(struct
@@ -1625,6 +1654,7 @@ static int br_multicast_ipv6_rcv(struct
struct sk_buff *skb,
u16 vid)
{
@@ -277,7 +277,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
struct sk_buff *skb_trimmed = NULL;
struct mld_msg *mld;
int err;
@@ -1641,8 +1671,9 @@ static int br_multicast_ipv6_rcv(struct
@@ -1644,8 +1674,9 @@ static int br_multicast_ipv6_rcv(struct
switch (mld->mld_type) {
case ICMPV6_MGM_REPORT:
@@ -288,7 +288,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
break;
case ICMPV6_MLD2_REPORT:
err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid);
@@ -1651,7 +1682,8 @@ static int br_multicast_ipv6_rcv(struct
@@ -1654,7 +1685,8 @@ static int br_multicast_ipv6_rcv(struct
err = br_ip6_multicast_query(br, port, skb_trimmed, vid);
break;
case ICMPV6_MGM_REDUCTION:
@@ -310,7 +310,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
};
struct net_bridge_mdb_entry
@@ -554,7 +556,8 @@ void br_multicast_free_pg(struct rcu_hea
@@ -555,7 +557,8 @@ void br_multicast_free_pg(struct rcu_hea
struct net_bridge_port_group *
br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
struct net_bridge_port_group __rcu *next,

View File

@@ -1,113 +0,0 @@
From: daniel <daniel@dd-wrt.com>
Date: Fri, 24 Jun 2016 12:35:18 +0200
Subject: [PATCH] Bridge: Fix ipv6 mc snooping if bridge has no ipv6 address
The bridge is falsly dropping ipv6 mulitcast packets if there is:
1. No ipv6 address assigned on the brigde.
2. No external mld querier present.
3. The internal querier enabled.
When the bridge fails to build mld queries, because it has no
ipv6 address, it slilently returns, but keeps the local querier enabled.
This specific case causes confusing packet loss.
Ipv6 multicast snooping can only work if:
a) An external querier is present
OR
b) The bridge has an ipv6 address an is capable of sending own queries
Otherwise it has to forward/flood the ipv6 multicast traffic,
because snooping cannot work.
This patch fixes the issue by adding a flag to the bridge struct that
indicates that there is currently no ipv6 address assinged to the bridge
and returns a false state for the local querier in
__br_multicast_querier_exists().
Special thanks to Linus Lüssing.
Fixes: d1d81d4c3dd8 ("bridge: check return value of ipv6_dev_get_saddr()")
Signed-off-by: Daniel Danzberger <daniel@dd-wrt.com>
Acked-by: Linus Lüssing <linus.luessing@c0d3.blue>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/bridge/br_multicast.c | 4 ++++
net/bridge/br_private.h | 23 +++++++++++++++++++----
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index c8c2a8a..d063a10 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -465,8 +465,11 @@ static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br,
if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0,
&ip6h->saddr)) {
kfree_skb(skb);
+ br->has_ipv6_addr = 0;
return NULL;
}
+
+ br->has_ipv6_addr = 1;
ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest);
hopopt = (u8 *)(ip6h + 1);
@@ -1768,6 +1771,7 @@ void br_multicast_init(struct net_bridge *br)
br->ip6_other_query.delay_time = 0;
br->ip6_querier.port = NULL;
#endif
+ br->has_ipv6_addr = 1;
spin_lock_init(&br->multicast_lock);
setup_timer(&br->multicast_router_timer,
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index e24abfd..3dd7e2c 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -303,6 +303,7 @@ struct net_bridge
u8 multicast_disabled:1;
u8 multicast_querier:1;
u8 multicast_query_use_ifaddr:1;
+ u8 has_ipv6_addr:1;
u32 hash_elasticity;
u32 hash_max;
@@ -577,10 +578,22 @@ static inline bool br_multicast_is_router(struct net_bridge *br)
static inline bool
__br_multicast_querier_exists(struct net_bridge *br,
- struct bridge_mcast_other_query *querier)
+ struct bridge_mcast_other_query *querier,
+ const bool is_ipv6)
{
+ bool own_querier_enabled;
+
+ if (br->multicast_querier) {
+ if (is_ipv6 && !br->has_ipv6_addr)
+ own_querier_enabled = false;
+ else
+ own_querier_enabled = true;
+ } else {
+ own_querier_enabled = false;
+ }
+
return time_is_before_jiffies(querier->delay_time) &&
- (br->multicast_querier || timer_pending(&querier->timer));
+ (own_querier_enabled || timer_pending(&querier->timer));
}
static inline bool br_multicast_querier_exists(struct net_bridge *br,
@@ -588,10 +601,12 @@ static inline bool br_multicast_querier_exists(struct net_bridge *br,
{
switch (eth->h_proto) {
case (htons(ETH_P_IP)):
- return __br_multicast_querier_exists(br, &br->ip4_other_query);
+ return __br_multicast_querier_exists(br,
+ &br->ip4_other_query, false);
#if IS_ENABLED(CONFIG_IPV6)
case (htons(ETH_P_IPV6)):
- return __br_multicast_querier_exists(br, &br->ip6_other_query);
+ return __br_multicast_querier_exists(br,
+ &br->ip6_other_query, true);
#endif
default:
return false;

View File

@@ -52,11 +52,9 @@ Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
drivers/usb/core/urb.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
index 3d27477..a317e1e 100644
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -443,11 +443,6 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
@@ -443,11 +443,6 @@ int usb_submit_urb(struct urb *urb, gfp_
* cause problems in HCDs if they get it wrong.
*/
@@ -68,6 +66,3 @@ index 3d27477..a317e1e 100644
/* Check against a simple/standard policy */
allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK |
URB_FREE_BUFFER);
--
2.5.5