From efa1960abb390d696704d029507dff671cc271fd Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Wed, 13 Jul 2016 12:07:08 +0200 Subject: kernel: update kernel 4.4 to version 4.4.15 Signed-off-by: Hauke Mehrtens --- ...ensure-that-.debug_frame-is-generated-vs..patch | 5 - .../645-bridge_multicast_to_unicast.patch | 46 ++++----- ...mc_snooping_if_bridge_has_no_ipv6_address.patch | 113 --------------------- ...b-Remove-annoying-warning-about-bogus-URB.patch | 7 +- 4 files changed, 24 insertions(+), 147 deletions(-) delete mode 100644 target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch (limited to 'target/linux/generic/patches-4.4') diff --git a/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch b/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch index a1e287c6be..b86c98de6c 100644 --- a/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch +++ b/target/linux/generic/patches-4.4/095-ARC-unwind-ensure-that-.debug_frame-is-generated-vs..patch @@ -28,8 +28,6 @@ Signed-off-by: Vineet Gupta 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 - diff --git a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch index bab091262c..07fc097f1d 100644 --- a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch +++ b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch @@ -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, diff --git a/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch b/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch deleted file mode 100644 index 4388cda6ef..0000000000 --- a/target/linux/generic/patches-4.4/646-bridge_fix_ipv6_mc_snooping_if_bridge_has_no_ipv6_address.patch +++ /dev/null @@ -1,113 +0,0 @@ -From: daniel -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 -Acked-by: Linus Lüssing -Signed-off-by: David S. Miller ---- - 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; diff --git a/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch b/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch index 0aae481a20..c7aeb49e24 100644 --- a/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch +++ b/target/linux/generic/patches-4.4/821-usb-Remove-annoying-warning-about-bogus-URB.patch @@ -52,11 +52,9 @@ Signed-off-by: Alexey Brodkin 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 - -- cgit v1.2.3