kernel: update kernel 4.4 to version 4.4.15
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user