upgrade 3.12 to 3.12.10

Signed-off-by: Imre Kaloz <kaloz@openwrt.org>

SVN-Revision: 39581
owl
Imre Kaloz 2014-02-13 12:57:36 +00:00
parent 4c1dabb81e
commit 83d9cec491
13 changed files with 166 additions and 149 deletions

View File

@ -20,8 +20,8 @@ endif
ifeq ($(LINUX_VERSION),3.10.28)
LINUX_KERNEL_MD5SUM:=789a39e8a381a60e46fe922cb66d77e2
endif
ifeq ($(LINUX_VERSION),3.12.5)
LINUX_KERNEL_MD5SUM:=5b5330f657f562f7bef6da100a7133b1
ifeq ($(LINUX_VERSION),3.12.10)
LINUX_KERNEL_MD5SUM:=93325074b7b1d7bb76fb7d4348f0aa7a
endif
ifeq ($(LINUX_VERSION),3.13.1)
LINUX_KERNEL_MD5SUM:=18f528e5632f0096e642c511722630dc

View File

@ -15,7 +15,7 @@
{USB_DEVICE(0x0af0, 0xd155)},
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1259,6 +1259,18 @@ UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0
@@ -1266,6 +1266,18 @@ UNUSUAL_DEV( 0x0af0, 0x8304, 0x0000, 0x0
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
0 ),

View File

@ -1,54 +0,0 @@
From 673498b8ed4c4d4b7221c5309d891c5eac2b7528 Mon Sep 17 00:00:00 2001
From: Stefan Tomanek <stefan.tomanek@wertarbyte.de>
Date: Tue, 10 Dec 2013 23:21:25 +0100
Subject: [PATCH] inet: fix NULL pointer Oops in fib(6)_rule_suppress
This changes ensures that the routing entry investigated by the suppress
function actually does point to a device struct before following that pointer,
fixing a possible kernel oops situation when verifying the interface group
associated with a routing table entry.
According to Daniel Golle, this Oops can be triggered by a user process trying
to establish an outgoing IPv6 connection while having no real IPv6 connectivity
set up (only autoassigned link-local addresses).
Fixes: 6ef94cfafba15 ("fib_rules: add route suppression based on ifgroup")
Reported-by: Daniel Golle <daniel.golle@gmail.com>
Tested-by: Daniel Golle <daniel.golle@gmail.com>
Signed-off-by: Stefan Tomanek <stefan.tomanek@wertarbyte.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/ipv4/fib_rules.c | 5 ++++-
net/ipv6/fib6_rules.c | 6 +++++-
2 files changed, 9 insertions(+), 2 deletions(-)
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
@@ -104,7 +104,10 @@ errout:
static bool fib4_rule_suppress(struct fib_rule *rule, struct fib_lookup_arg *arg)
{
struct fib_result *result = (struct fib_result *) arg->result;
- struct net_device *dev = result->fi->fib_dev;
+ struct net_device *dev = NULL;
+
+ if (result->fi)
+ dev = result->fi->fib_dev;
/* do not accept result if the route does
* not meet the required prefix length
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
@@ -122,7 +122,11 @@ out:
static bool fib6_rule_suppress(struct fib_rule *rule, struct fib_lookup_arg *arg)
{
struct rt6_info *rt = (struct rt6_info *) arg->result;
- struct net_device *dev = rt->rt6i_idev->dev;
+ struct net_device *dev = NULL;
+
+ if (rt->rt6i_idev)
+ dev = rt->rt6i_idev->dev;
+
/* do not accept result if the route does
* not meet the required prefix length
*/

View File

@ -61,10 +61,10 @@ Signed-off-by: Florian Fainelli <florian@openwrt.org>
retval = pdata->pre_setup(hcd);
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -203,6 +203,7 @@ struct ehci_hcd { /* one per controlle
unsigned has_synopsys_hc_bug:1; /* Synopsys HC */
@@ -204,6 +204,7 @@ struct ehci_hcd { /* one per controlle
unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */
unsigned need_oc_pp_cycle:1; /* MPC834X port power */
unsigned imx28_write_fix:1; /* For Freescale i.MX28 */
+ unsigned ignore_oc:1;
/* required for usb32 quirk */

View File

@ -71,9 +71,9 @@
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -84,6 +84,10 @@ kallsyms()
@@ -86,6 +86,10 @@ kallsyms()
kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET"
fi
+ if [ -n "${CONFIG_KALLSYMS_UNCOMPRESSED}" ]; then
+ kallsymopt="${kallsymopt} --uncompressed"

View File

@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
#define PACKET_FANOUT_LB 1
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1393,6 +1393,7 @@ static int packet_rcv_spkt(struct sk_buf
@@ -1414,6 +1414,7 @@ static int packet_rcv_spkt(struct sk_buf
{
struct sock *sk;
struct sockaddr_pkt *spkt;
@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
/*
* When we registered the protocol we saved the socket in the data
@@ -1400,6 +1401,7 @@ static int packet_rcv_spkt(struct sk_buf
@@ -1421,6 +1422,7 @@ static int packet_rcv_spkt(struct sk_buf
*/
sk = pt->af_packet_priv;
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
/*
* Yank back the headers [hope the device set this
@@ -1412,7 +1414,7 @@ static int packet_rcv_spkt(struct sk_buf
@@ -1433,7 +1435,7 @@ static int packet_rcv_spkt(struct sk_buf
* so that this procedure is noop.
*/
@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
goto out;
if (!net_eq(dev_net(dev), sock_net(sk)))
@@ -1619,12 +1621,12 @@ static int packet_rcv(struct sk_buff *sk
@@ -1640,12 +1642,12 @@ static int packet_rcv(struct sk_buff *sk
int skb_len = skb->len;
unsigned int snaplen, res;
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
@@ -1737,12 +1739,12 @@ static int tpacket_rcv(struct sk_buff *s
@@ -1758,12 +1760,12 @@ static int tpacket_rcv(struct sk_buff *s
struct timespec ts;
__u32 ts_status;
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
@@ -2638,6 +2640,7 @@ static int packet_create(struct net *net
@@ -2652,6 +2654,7 @@ static int packet_create(struct net *net
spin_lock_init(&po->bind_lock);
mutex_init(&po->pg_vec_lock);
po->prot_hook.func = packet_rcv;
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
@@ -3204,6 +3207,16 @@ packet_setsockopt(struct socket *sock, i
@@ -3218,6 +3221,16 @@ packet_setsockopt(struct socket *sock, i
po->tp_tx_has_off = !!val;
return 0;
}
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
default:
return -ENOPROTOOPT;
}
@@ -3255,6 +3268,13 @@ static int packet_getsockopt(struct sock
@@ -3269,6 +3282,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;

View File

@ -96,7 +96,7 @@
if (vlan_tx_tag_present(skb))
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -725,15 +725,29 @@ static inline u16 br_get_pvid(const stru
@@ -735,15 +735,29 @@ static inline u16 br_get_pvid(const stru
/* br_netfilter.c */
#ifdef CONFIG_BRIDGE_NETFILTER

View File

@ -1,6 +1,6 @@
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1741,7 +1741,7 @@ static inline int pskb_network_may_pull(
@@ -1746,7 +1746,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD

View File

@ -14,7 +14,7 @@ when needed.
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1786,6 +1786,24 @@ static inline void pskb_trim_unique(stru
@@ -1791,6 +1791,24 @@ static inline void pskb_trim_unique(stru
BUG_ON(err);
}

View File

@ -1,10 +1,32 @@
From 1b5aaa4b16f6e6471ab1c07b38068197a1b4c395 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Fri, 24 May 2013 14:40:54 +0200
Subject: [PATCH 1/2] ipv6: allow rejecting with "source address failed policy"
RFC6204 L-14 requires rejecting traffic from invalid addresses with
ICMPv6 Destination Unreachable, Code 5 (Source address failed ingress/
egress policy) on the LAN side, so add an appropriate rule for that.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
include/net/netns/ipv6.h | 1 +
include/uapi/linux/fib_rules.h | 4 +++
include/uapi/linux/rtnetlink.h | 1 +
net/ipv4/fib_semantics.c | 4 +++
net/ipv4/fib_trie.c | 1 +
net/ipv4/ipmr.c | 1 +
net/ipv6/fib6_rules.c | 4 +++
net/ipv6/ip6mr.c | 2 ++
net/ipv6/route.c | 58 +++++++++++++++++++++++++++++++++++++++++-
9 files changed, 75 insertions(+), 1 deletion(-)
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -55,6 +55,7 @@ struct netns_ipv6 {
unsigned long ip6_rt_last_gc;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
struct rt6_info *ip6_prohibit_entry;
+ struct rt6_info *ip6_failed_policy_entry;
+ struct rt6_info *ip6_policy_failed_entry;
struct rt6_info *ip6_blk_hole_entry;
struct fib6_table *fib6_local_tbl;
struct fib_rules_ops *fib6_rules_ops;
@ -17,7 +39,7 @@
+ FR_ACT_RES9,
+ FR_ACT_RES10,
+ FR_ACT_RES11,
+ FR_ACT_FAILED_POLICY, /* Drop with EPERM */
+ FR_ACT_POLICY_FAILED, /* Drop with EACCES */
__FR_ACT_MAX,
};
@ -27,31 +49,18 @@
RTN_THROW, /* Not in this table */
RTN_NAT, /* Translate this address */
RTN_XRESOLVE, /* Use external resolver */
+ RTN_FAILED_POLICY, /* Failed ingress/egress policy */
+ RTN_POLICY_FAILED, /* Failed ingress/egress policy */
__RTN_MAX
};
--- a/net/ipv4/fib_rules.c
+++ b/net/ipv4/fib_rules.c
@@ -84,6 +84,10 @@ static int fib4_rule_action(struct fib_r
err = -EACCES;
goto errout;
+ case FR_ACT_FAILED_POLICY:
+ err = -EPERM;
+ goto errout;
+
case FR_ACT_BLACKHOLE:
default:
err = -EINVAL;
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -138,6 +138,10 @@ const struct fib_prop fib_props[RTN_MAX
.error = -EINVAL,
.scope = RT_SCOPE_NOWHERE,
},
+ [RTN_FAILED_POLICY] = {
+ .error = -EPERM,
+ [RTN_POLICY_FAILED] = {
+ .error = -EACCES,
+ .scope = RT_SCOPE_UNIVERSE,
+ },
};
@ -63,60 +72,67 @@
[RTN_THROW] = "THROW",
[RTN_NAT] = "NAT",
[RTN_XRESOLVE] = "XRESOLVE",
+ [RTN_FAILED_POLICY] = "FAILED_POLICY",
+ [RTN_POLICY_FAILED] = "POLICY_FAILED",
};
static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -181,6 +181,7 @@ static int ipmr_rule_action(struct fib_r
@@ -184,6 +184,7 @@ static int ipmr_rule_action(struct fib_r
case FR_ACT_UNREACHABLE:
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
+ case FR_ACT_FAILED_POLICY:
+ case FR_ACT_POLICY_FAILED:
return -EACCES;
case FR_ACT_BLACKHOLE:
default:
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
@@ -73,6 +73,9 @@ static int fib6_rule_action(struct fib_r
@@ -73,6 +73,10 @@ static int fib6_rule_action(struct fib_r
err = -EACCES;
rt = net->ipv6.ip6_prohibit_entry;
goto discard_pkt;
+ case FR_ACT_FAILED_POLICY:
+ rt = net->ipv6.ip6_failed_policy_entry;
+ case FR_ACT_POLICY_FAILED:
+ err = -EACCES;
+ rt = net->ipv6.ip6_policy_failed_entry;
+ goto discard_pkt;
}
table = fib6_get_table(net, rule->table);
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -166,6 +166,8 @@ static int ip6mr_rule_action(struct fib_
@@ -169,6 +169,8 @@ static int ip6mr_rule_action(struct fib_
return -ENETUNREACH;
case FR_ACT_PROHIBIT:
return -EACCES;
+ case FR_ACT_FAILED_POLICY:
+ return -EPERM;
+ case FR_ACT_POLICY_FAILED:
+ return -EACCES;
case FR_ACT_BLACKHOLE:
default:
return -EINVAL;
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -252,6 +252,24 @@ static const struct rt6_info ip6_prohibi
@@ -86,6 +86,8 @@ static int ip6_pkt_discard(struct sk_bu
static int ip6_pkt_discard_out(struct sk_buff *skb);
static int ip6_pkt_prohibit(struct sk_buff *skb);
static int ip6_pkt_prohibit_out(struct sk_buff *skb);
+static int ip6_pkt_policy_failed(struct sk_buff *skb);
+static int ip6_pkt_policy_failed_out(struct sk_buff *skb);
static void ip6_link_failure(struct sk_buff *skb);
static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu);
@@ -251,6 +253,21 @@ static const struct rt6_info ip6_prohibi
.rt6i_ref = ATOMIC_INIT(1),
};
+static int ip6_pkt_failed_policy(struct sk_buff *skb);
+static int ip6_pkt_failed_policy_out(struct sk_buff *skb);
+
+static const struct rt6_info ip6_failed_policy_entry_template = {
+static const struct rt6_info ip6_policy_failed_entry_template = {
+ .dst = {
+ .__refcnt = ATOMIC_INIT(1),
+ .__use = 1,
+ .obsolete = DST_OBSOLETE_FORCE_CHK,
+ .error = -EPERM,
+ .input = ip6_pkt_failed_policy,
+ .output = ip6_pkt_failed_policy_out,
+ .error = -EACCES,
+ .input = ip6_pkt_policy_failed,
+ .output = ip6_pkt_policy_failed_out,
+ },
+ .rt6i_flags = (RTF_REJECT | RTF_NONEXTHOP),
+ .rt6i_protocol = RTPROT_KERNEL,
@ -127,82 +143,84 @@
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__refcnt = ATOMIC_INIT(1),
@@ -1583,6 +1601,9 @@ int ip6_route_add(struct fib6_config *cf
case RTN_THROW:
rt->dst.error = -EAGAIN;
@@ -1581,6 +1598,11 @@ int ip6_route_add(struct fib6_config *cf
rt->dst.output = ip6_pkt_prohibit_out;
rt->dst.input = ip6_pkt_prohibit;
break;
+ case RTN_FAILED_POLICY:
+ rt->dst.error = -EPERM;
+ case RTN_POLICY_FAILED:
+ rt->dst.error = -EACCES;
+ rt->dst.output = ip6_pkt_policy_failed_out;
+ rt->dst.input = ip6_pkt_policy_failed;
+ break;
case RTN_THROW:
default:
rt->dst.error = -ENETUNREACH;
break;
@@ -2162,6 +2183,17 @@ static int ip6_pkt_prohibit_out(struct s
rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN
@@ -2160,6 +2182,17 @@ static int ip6_pkt_prohibit_out(struct s
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
+static int ip6_pkt_failed_policy(struct sk_buff *skb)
+static int ip6_pkt_policy_failed(struct sk_buff *skb)
+{
+ return ip6_pkt_drop(skb, ICMPV6_POLICY_FAIL, IPSTATS_MIB_INNOROUTES);
+}
+
+static int ip6_pkt_failed_policy_out(struct sk_buff *skb)
+static int ip6_pkt_policy_failed_out(struct sk_buff *skb)
+{
+ skb->dev = skb_dst(skb)->dev;
+ return ip6_pkt_drop(skb, ICMPV6_POLICY_FAIL, IPSTATS_MIB_OUTNOROUTES);
+}
+
#endif
/*
@@ -2368,7 +2400,8 @@ static int rtm_to_fib6_config(struct sk_
* Allocate a dst for local (unicast / anycast) address.
*/
@@ -2362,7 +2395,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
- rtm->rtm_type == RTN_THROW)
+ rtm->rtm_type == RTN_THROW ||
+ rtm->rtm_type == RTN_FAILED_POLICY)
+ rtm->rtm_type == RTN_POLICY_FAILED)
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
@@ -2570,6 +2603,9 @@ static int rt6_fill_node(struct net *net
@@ -2564,6 +2598,9 @@ static int rt6_fill_node(struct net *net
case -EACCES:
rtm->rtm_type = RTN_PROHIBIT;
break;
+ case -EPERM:
+ rtm->rtm_type = RTN_FAILED_POLICY;
+ rtm->rtm_type = RTN_POLICY_FAILED;
+ break;
case -EAGAIN:
rtm->rtm_type = RTN_THROW;
break;
@@ -2820,6 +2856,8 @@ static int ip6_route_dev_notify(struct n
@@ -2814,6 +2851,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
+ net->ipv6.ip6_failed_policy_entry->dst.dev = dev;
+ net->ipv6.ip6_failed_policy_entry->rt6i_idev = in6_dev_get(dev);
+ net->ipv6.ip6_policy_failed_entry->dst.dev = dev;
+ net->ipv6.ip6_policy_failed_entry->rt6i_idev = in6_dev_get(dev);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
@@ -3080,6 +3118,17 @@ static int __net_init ip6_route_net_init
@@ -3074,6 +3113,17 @@ static int __net_init ip6_route_net_init
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true);
+
+ net->ipv6.ip6_failed_policy_entry =
+ kmemdup(&ip6_failed_policy_entry_template,
+ sizeof(*net->ipv6.ip6_failed_policy_entry), GFP_KERNEL);
+ if (!net->ipv6.ip6_failed_policy_entry)
+ net->ipv6.ip6_policy_failed_entry =
+ kmemdup(&ip6_policy_failed_entry_template,
+ sizeof(*net->ipv6.ip6_policy_failed_entry), GFP_KERNEL);
+ if (!net->ipv6.ip6_policy_failed_entry)
+ goto out_ip6_blk_hole_entry;
+ net->ipv6.ip6_failed_policy_entry->dst.path =
+ (struct dst_entry *)net->ipv6.ip6_failed_policy_entry;
+ net->ipv6.ip6_failed_policy_entry->dst.ops = &net->ipv6.ip6_dst_ops;
+ dst_init_metrics(&net->ipv6.ip6_failed_policy_entry->dst,
+ net->ipv6.ip6_policy_failed_entry->dst.path =
+ (struct dst_entry *)net->ipv6.ip6_policy_failed_entry;
+ net->ipv6.ip6_policy_failed_entry->dst.ops = &net->ipv6.ip6_dst_ops;
+ dst_init_metrics(&net->ipv6.ip6_policy_failed_entry->dst,
+ ip6_template_metrics, true);
#endif
net->ipv6.sysctl.flush_delay = 0;
@@ -3098,6 +3147,8 @@ out:
@@ -3092,6 +3142,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
@ -211,20 +229,20 @@
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
@@ -3115,6 +3166,7 @@ static void __net_exit ip6_route_net_exi
@@ -3109,6 +3161,7 @@ static void __net_exit ip6_route_net_exi
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
kfree(net->ipv6.ip6_blk_hole_entry);
+ kfree(net->ipv6.ip6_failed_policy_entry);
+ kfree(net->ipv6.ip6_policy_failed_entry);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
}
@@ -3211,6 +3263,9 @@ int __init ip6_route_init(void)
@@ -3205,6 +3258,9 @@ int __init ip6_route_init(void)
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
+ init_net.ipv6.ip6_failed_policy_entry->dst.dev = init_net.loopback_dev;
+ init_net.ipv6.ip6_failed_policy_entry->rt6i_idev =
+ init_net.ipv6.ip6_policy_failed_entry->dst.dev = init_net.loopback_dev;
+ init_net.ipv6.ip6_policy_failed_entry->rt6i_idev =
+ in6_dev_get(init_net.loopback_dev);
#endif
ret = fib6_init();

View File

@ -0,0 +1,53 @@
From 7749b481ce5d7e232b1f7da5e6b2c44816f51681 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sun, 19 Jan 2014 20:45:51 +0100
Subject: [PATCH 2/2] net: provide defines for _POLICY_FAILED until all code is
updated
Upstream introduced ICMPV6_POLICY_FAIL for code 5 of destination
unreachable, conflicting with our name.
Add appropriate defines to allow our code to build with the new
name until we have updated our local patches for older kernels
and userspace packages.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
include/uapi/linux/fib_rules.h | 2 ++
include/uapi/linux/icmpv6.h | 2 ++
include/uapi/linux/rtnetlink.h | 2 ++
3 files changed, 6 insertions(+)
--- a/include/uapi/linux/fib_rules.h
+++ b/include/uapi/linux/fib_rules.h
@@ -71,6 +71,8 @@ enum {
__FR_ACT_MAX,
};
+#define FR_ACT_FAILED_POLICY FR_ACT_POLICY_FAILED
+
#define FR_ACT_MAX (__FR_ACT_MAX - 1)
#endif
--- a/include/uapi/linux/icmpv6.h
+++ b/include/uapi/linux/icmpv6.h
@@ -118,6 +118,8 @@ struct icmp6hdr {
#define ICMPV6_POLICY_FAIL 5
#define ICMPV6_REJECT_ROUTE 6
+#define ICMPV6_FAILED_POLICY ICMPV6_POLICY_FAIL
+
/*
* Codes for Time Exceeded
*/
--- a/include/uapi/linux/rtnetlink.h
+++ b/include/uapi/linux/rtnetlink.h
@@ -207,6 +207,8 @@ enum {
__RTN_MAX
};
+#define RTN_FAILED_POLICY RTN_POLICY_FAILED
+
#define RTN_MAX (__RTN_MAX - 1)

View File

@ -34,7 +34,7 @@
#define IF_GET_IFACE 0x0001 /* for querying only */
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1771,6 +1771,10 @@ static inline int pskb_trim(struct sk_bu
@@ -1776,6 +1776,10 @@ static inline int pskb_trim(struct sk_bu
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
@ -45,7 +45,7 @@
/**
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
* @skb: buffer to alter
@@ -1898,16 +1902,6 @@ static inline struct sk_buff *dev_alloc_
@@ -1903,16 +1907,6 @@ static inline struct sk_buff *dev_alloc_
}

View File

@ -14,7 +14,7 @@ Signed-off-by: Paul Walmsley <paul@pwsan.com>
---
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -2357,6 +2357,8 @@ static struct device_node *of_dev_hwmod_
@@ -2393,6 +2393,8 @@ static struct device_node *of_dev_hwmod_
/**
* _init_mpu_rt_base - populate the virtual address for a hwmod
* @oh: struct omap_hwmod * to locate the virtual address
@ -23,7 +23,7 @@ Signed-off-by: Paul Walmsley <paul@pwsan.com>
*
* Cache the virtual address used by the MPU to access this IP block's
* registers. This address is needed early so the OCP registers that
@@ -2365,11 +2367,11 @@ static struct device_node *of_dev_hwmod_
@@ -2401,11 +2403,11 @@ static struct device_node *of_dev_hwmod_
* Returns 0 on success, -EINVAL if an invalid hwmod is passed, and
* -ENXIO on absent or invalid register target address space.
*/
@ -37,7 +37,7 @@ Signed-off-by: Paul Walmsley <paul@pwsan.com>
if (!oh)
return -EINVAL;
@@ -2385,12 +2387,10 @@ static int __init _init_mpu_rt_base(stru
@@ -2421,12 +2423,10 @@ static int __init _init_mpu_rt_base(stru
oh->name);
/* Extract the IO space from device tree blob */
@ -52,7 +52,7 @@ Signed-off-by: Paul Walmsley <paul@pwsan.com>
} else {
va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start);
}
@@ -2423,12 +2423,16 @@ static int __init _init_mpu_rt_base(stru
@@ -2459,12 +2459,16 @@ static int __init _init_mpu_rt_base(stru
static int __init _init(struct omap_hwmod *oh, void *data)
{
int r;
@ -70,7 +70,7 @@ Signed-off-by: Paul Walmsley <paul@pwsan.com>
if (r < 0) {
WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n",
oh->name);
@@ -2442,6 +2446,12 @@ static int __init _init(struct omap_hwmo
@@ -2478,6 +2482,12 @@ static int __init _init(struct omap_hwmo
return -EINVAL;
}