upgrade 3.12 to 3.12.10
authorImre Kaloz <kaloz@openwrt.org>
Thu, 13 Feb 2014 12:57:36 +0000 (12:57 +0000)
committerImre Kaloz <kaloz@openwrt.org>
Thu, 13 Feb 2014 12:57:36 +0000 (12:57 +0000)
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
SVN-Revision: 39581

13 files changed:
include/kernel-version.mk
target/linux/generic/patches-3.12/060-hso_devices.patch
target/linux/generic/patches-3.12/065-inet_fix_NULL_pointer.patch [deleted file]
target/linux/generic/patches-3.12/102-ehci_hcd_ignore_oc.patch
target/linux/generic/patches-3.12/203-kallsyms_uncompressed.patch
target/linux/generic/patches-3.12/630-packet_socket_type.patch
target/linux/generic/patches-3.12/644-bridge_optimize_netfilter_hooks.patch
target/linux/generic/patches-3.12/655-increase_skb_pad.patch
target/linux/generic/patches-3.12/656-skb_reduce_truesize-helper.patch
target/linux/generic/patches-3.12/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch
target/linux/generic/patches-3.12/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch [new file with mode: 0644]
target/linux/generic/patches-3.12/721-phy_packets.patch
target/linux/omap/patches-3.12/202-ARM-OMAP2-hwmod-Extract-no-idle-and-no-reset-info-from-DT.patch

index c9717e8fa1824ca70f50907cf020718781f1f320..2663b89ad61a8aa1f23bb61bdf2a7c18dcd3648c 100644 (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
index fd7cab75509b6397beb25a2bb24b27001ac14e7e..6196345f6cdf8c97e07418daba7e432e9b617749 100644 (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 ),
  
diff --git a/target/linux/generic/patches-3.12/065-inet_fix_NULL_pointer.patch b/target/linux/generic/patches-3.12/065-inet_fix_NULL_pointer.patch
deleted file mode 100644 (file)
index 727f876..0000000
+++ /dev/null
@@ -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
-        */
index 4ad049809e001854786fa042b43edd339e254873..de1765288b21ac0275cd4eb5e0443bc04298508b 100644 (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 */
index ea6b31062cc251f5df5cb92b6111475bf46587b8..3d587031674f9525ff7f75f40ea800c436bbd005 100644 (file)
@@ -71,9 +71,9 @@
  
 --- a/scripts/link-vmlinux.sh
 +++ b/scripts/link-vmlinux.sh
-@@ -84,6 +84,10 @@ kallsyms()
-       kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET"
+@@ -86,6 +86,10 @@ kallsyms()
+               kallsymopt="${kallsymopt} --page-offset=$CONFIG_PAGE_OFFSET"
+       fi
  
 +      if [ -n "${CONFIG_KALLSYMS_UNCOMPRESSED}" ]; then
 +              kallsymopt="${kallsymopt} --uncompressed"
index d1b0fe14da5ed36e97505fc48353de257083d6e7..1e915f61fb205e8583613a1e3fff0d3dffffc6bb 100644 (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;
index 85def08702358aa116054e03101f414740234a2b..578eed22cd6558cacee05c6773b4afba335de73f 100644 (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
index fd3d70b2052f98cae346b5f71d49a86e6edcdcf8..2c3e111685d1b62813545fc09158aaff99e9b73e 100644 (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
index 108a6315f9019c803d4c7374103ec96290e523a3..f1cf4524c62e3cb2ef79fe88a545f1de444a3119 100644 (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);
  }
  
index 27d115bf566016c53fb49bd1ed32729596cdc9ef..85a3ff392ada39623e518deb619b202abb3f7359 100644 (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,
  };
  
        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,
 +      },
  };
        [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,
  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
  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();
diff --git a/target/linux/generic/patches-3.12/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch b/target/linux/generic/patches-3.12/671-net-provide-defines-for-_POLICY_FAILED-until-all-cod.patch
new file mode 100644 (file)
index 0000000..25a8639
--- /dev/null
@@ -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)
index 9363ad125ef02103ca1d89808f6b40caf5442424..47649195d52855a12b8fd47cc1d110921c589ae9 100644 (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_
  }
  
  
index 56229603ab512dcdc37c4d2ecb55424f5199f09a..f17e18af211cb572824b6473bd2081eecbca9996 100644 (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;
        }