Refreshed all patches.
Altered patches:
- 666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
New symbol for arm targets:
- HARDEN_BRANCH_PREDICTOR
Compile-tested on: cns3xxx, imx6, x86_64
Runtime-tested on: cns3xxx, imx6, x86_64
Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Tested-by: Stijn Tintel <stijn@linux-ipv6.be>
LINUX_RELEASE?=1
LINUX_VERSION-4.9 = .134
-LINUX_VERSION-4.14 = .76
+LINUX_VERSION-4.14 = .77
LINUX_KERNEL_HASH-4.9.134 = 6dfbe8d122021c874945c0f2ebeace2248e58eed93c10ce61e4a134e70997a77
-LINUX_KERNEL_HASH-4.14.76 = ee3f19a4ff8a42793c193e361e1d34fcc821a5ca9b58db41befb2b4df0e482be
+LINUX_KERNEL_HASH-4.14.77 = 0496f4e194cadbe23f27e6f4b9c3cd264448983780b73b30f7f05c92273fa6f8
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))
# CONFIG_DEBUG_UART_8250 is not set
# CONFIG_DEBUG_USER is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HAVE_ARM_ARCH_TIMER=y
CONFIG_HAVE_CBPF_JIT=y
CONFIG_HAVE_IDE=y
#endif
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
-@@ -899,6 +899,17 @@ config DMA_CACHE_RWFO
+@@ -922,6 +922,17 @@ config DMA_CACHE_RWFO
in hardware, other workarounds are needed (e.g. cache
maintenance broadcasting in software via FIQ).
*/
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
-@@ -882,7 +882,7 @@ config VDSO
+@@ -905,7 +905,7 @@ config VDSO
config DMA_CACHE_RWFO
bool "Enable read/write for ownership DMA cache maintenance"
device, it has to decide which ones to send first, which ones to
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
-@@ -2014,7 +2014,7 @@ static int __init pktsched_init(void)
+@@ -2028,7 +2028,7 @@ static int __init pktsched_init(void)
return err;
}
help
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -2982,10 +2982,20 @@ static int xmit_one(struct sk_buff *skb,
+@@ -3004,10 +3004,20 @@ static int xmit_one(struct sk_buff *skb,
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
dev_queue_xmit_nit(skb, dev);
}
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
-@@ -1947,10 +1947,12 @@ void __init init_mm_internals(void)
+@@ -1951,10 +1951,12 @@ void __init init_mm_internals(void)
start_shepherd_timer();
#endif
#ifdef CONFIG_PROC_FS
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
-@@ -358,6 +358,8 @@ static inline int is_sp_move_ins(union m
+@@ -360,6 +360,8 @@ static inline int is_sp_move_ins(union m
if (ip->i_format.opcode == addiu_op ||
ip->i_format.opcode == daddiu_op) {
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
-@@ -6146,7 +6146,7 @@ static void __ref alloc_node_mem_map(str
+@@ -6153,7 +6153,7 @@ static void __ref alloc_node_mem_map(str
mem_map = NODE_DATA(0)->node_mem_map;
#if defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) || defined(CONFIG_FLATMEM)
if (page_to_pfn(mem_map) != pgdat->node_start_pfn)
if (!net_eq(dev_net(dev), sock_net(sk)))
goto drop;
-@@ -3262,6 +3264,7 @@ static int packet_create(struct net *net
+@@ -3265,6 +3267,7 @@ static int packet_create(struct net *net
mutex_init(&po->pg_vec_lock);
po->rollover = NULL;
po->prot_hook.func = packet_rcv;
if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt;
-@@ -3875,6 +3878,16 @@ packet_setsockopt(struct socket *sock, i
+@@ -3878,6 +3881,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0;
}
default:
return -ENOPROTOOPT;
}
-@@ -3927,6 +3940,13 @@ static int packet_getsockopt(struct sock
+@@ -3930,6 +3943,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR:
val = po->has_vnet_hdr;
break;
/**
* ip6_tnl_addr_conflict - compare packet addresses to tunnel's own
* @t: the outgoing tunnel device
-@@ -1299,6 +1439,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1304,6 +1444,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
{
struct ip6_tnl *t = netdev_priv(dev);
- struct ipv6hdr *ipv6h = ipv6_hdr(skb);
+ struct ipv6hdr *ipv6h;
+ struct __ip6_tnl_fmr *fmr;
int encap_limit = -1;
__u16 offset;
struct flowi6 fl6;
-@@ -1361,6 +1502,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1370,6 +1511,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
return -1;
-@@ -1489,6 +1642,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
+@@ -1498,6 +1651,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
t->parms.link = p->link;
t->parms.proto = p->proto;
t->parms.fwmark = p->fwmark;
dst_cache_reset(&t->dst_cache);
ip6_tnl_link_config(t);
return 0;
-@@ -1527,6 +1688,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
+@@ -1536,6 +1697,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
p->flowinfo = u->flowinfo;
p->link = u->link;
p->proto = u->proto;
memcpy(p->name, u->name, sizeof(u->name));
}
-@@ -1913,6 +2075,15 @@ static int ip6_tnl_validate(struct nlatt
+@@ -1922,6 +2084,15 @@ static int ip6_tnl_validate(struct nlatt
return 0;
}
static void ip6_tnl_netlink_parms(struct nlattr *data[],
struct __ip6_tnl_parm *parms)
{
-@@ -1950,6 +2121,46 @@ static void ip6_tnl_netlink_parms(struct
+@@ -1959,6 +2130,46 @@ static void ip6_tnl_netlink_parms(struct
if (data[IFLA_IPTUN_FWMARK])
parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
}
static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
-@@ -2065,6 +2276,12 @@ static void ip6_tnl_dellink(struct net_d
+@@ -2074,6 +2285,12 @@ static void ip6_tnl_dellink(struct net_d
static size_t ip6_tnl_get_size(const struct net_device *dev)
{
return
/* IFLA_IPTUN_LINK */
nla_total_size(4) +
-@@ -2094,6 +2311,24 @@ static size_t ip6_tnl_get_size(const str
+@@ -2103,6 +2320,24 @@ static size_t ip6_tnl_get_size(const str
nla_total_size(0) +
/* IFLA_IPTUN_FWMARK */
nla_total_size(4) +
0;
}
-@@ -2101,6 +2336,9 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2110,6 +2345,9 @@ static int ip6_tnl_fill_info(struct sk_b
{
struct ip6_tnl *tunnel = netdev_priv(dev);
struct __ip6_tnl_parm *parm = &tunnel->parms;
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
-@@ -2110,9 +2348,27 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2119,9 +2357,27 @@ static int ip6_tnl_fill_info(struct sk_b
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
-@@ -2152,6 +2408,7 @@ static const struct nla_policy ip6_tnl_p
+@@ -2161,6 +2417,7 @@ static const struct nla_policy ip6_tnl_p
[IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 },
[IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG },
[IFLA_IPTUN_FWMARK] = { .type = NLA_U32 },
__u16 tc_index; /* traffic control index */
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4783,6 +4783,9 @@ static enum gro_result dev_gro_receive(s
+@@ -4805,6 +4805,9 @@ static enum gro_result dev_gro_receive(s
enum gro_result ret;
int grow;
if (netif_elide_gro(skb->dev))
goto normal;
-@@ -6253,6 +6256,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -6275,6 +6278,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower);
}
static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info)
-@@ -6291,6 +6336,7 @@ static int __netdev_upper_dev_link(struc
+@@ -6313,6 +6358,7 @@ static int __netdev_upper_dev_link(struc
if (ret)
return ret;
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info);
ret = notifier_to_errno(ret);
-@@ -6368,6 +6414,7 @@ void netdev_upper_dev_unlink(struct net_
+@@ -6390,6 +6436,7 @@ void netdev_upper_dev_unlink(struct net_
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info);
}
-@@ -6938,6 +6985,7 @@ int dev_set_mac_address(struct net_devic
+@@ -6962,6 +7009,7 @@ int dev_set_mac_address(struct net_devic
if (err)
return err;
dev->addr_assign_type = NET_ADDR_SET;
CONFIG_GPIO_SYSFS=y
# CONFIG_GRO_CELLS is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
# CONFIG_GPIO_WATCHDOG_ARCH_INITCALL is not set
# CONFIG_GRO_CELLS is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_GPIOLIB_IRQCHIP=y
CONFIG_GPIO_SYSFS=y
CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_GPIO_SYSFS=y
# CONFIG_GRO_CELLS is not set
CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -3636,6 +3636,58 @@ set_rps_cpu(struct net_device *dev, stru
+@@ -3658,6 +3658,58 @@ set_rps_cpu(struct net_device *dev, stru
return rflow;
}
/*
* get_rps_cpu is called from netif_receive_skb and returns the target
* CPU from the RPS map of the receiving queue for a given skb.
-@@ -3725,7 +3777,7 @@ static int get_rps_cpu(struct net_device
+@@ -3747,7 +3799,7 @@ static int get_rps_cpu(struct net_device
try_rps:
if (map) {
if (cpu_online(tcpu)) {
cpu = tcpu;
goto done;
-@@ -8810,6 +8862,9 @@ static int __init net_dev_init(void)
+@@ -8834,6 +8886,9 @@ static int __init net_dev_init(void)
sd->backlog.weight = weight_p;
}
--- /dev/null
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_GPIO_TWL6040=y
CONFIG_GRACE_PERIOD=y
CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
CONFIG_DWMAC_SUN8I=y
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
# CONFIG_MACH_SUN4I is not set
# CONFIG_MACH_SUN5I is not set
# CONFIG_PINCTRL_GR8 is not set
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
# CONFIG_ARM_ERRATA_643719 is not set
# CONFIG_ARM_LPAE is not set
+CONFIG_HARDEN_BRANCH_PREDICTOR=y
# CONFIG_MACH_SUN6I is not set
# CONFIG_MACH_SUN7I is not set
# CONFIG_MACH_SUN8I is not set
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-@@ -318,10 +318,6 @@ static int stmmac_dt_phy(struct plat_stm
+@@ -317,10 +317,6 @@ static int stmmac_dt_phy(struct plat_stm
bool mdio = true;
static const struct of_device_id need_mdio_ids[] = {
{ .compatible = "snps,dwc-qos-ethernet-4.10" },