works for kernel-4.3.2
This commit is contained in:
Binary file not shown.
+49
@@ -0,0 +1,49 @@
|
||||
From 48dbc164b40dd9195dea8cd966e394819e420b64 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gortmaker <paul.gortmaker@windriver.com>
|
||||
Date: Wed, 21 Oct 2015 14:04:47 +0100
|
||||
Subject: [PATCH] certs: add .gitignore to stop git nagging about
|
||||
x509_certificate_list
|
||||
|
||||
Currently we see this in "git status" if we build in the source dir:
|
||||
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
|
||||
certs/x509_certificate_list
|
||||
|
||||
It looks like it used to live in kernel/ so we squash that .gitignore
|
||||
entry at the same time. I didn't bother to dig through git history to
|
||||
see when it moved, since it is just a minor annoyance at most.
|
||||
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: keyrings@linux-nfs.org
|
||||
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
|
||||
Signed-off-by: David Howells <dhowells@redhat.com>
|
||||
---
|
||||
certs/.gitignore | 4 ++++
|
||||
kernel/.gitignore | 1 -
|
||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||
create mode 100644 certs/.gitignore
|
||||
|
||||
diff --git a/certs/.gitignore b/certs/.gitignore
|
||||
new file mode 100644
|
||||
index 0000000..f51aea4
|
||||
--- /dev/null
|
||||
+++ b/certs/.gitignore
|
||||
@@ -0,0 +1,4 @@
|
||||
+#
|
||||
+# Generated files
|
||||
+#
|
||||
+x509_certificate_list
|
||||
diff --git a/kernel/.gitignore b/kernel/.gitignore
|
||||
index 790d83c..b3097bd 100644
|
||||
--- a/kernel/.gitignore
|
||||
+++ b/kernel/.gitignore
|
||||
@@ -5,4 +5,3 @@ config_data.h
|
||||
config_data.gz
|
||||
timeconst.h
|
||||
hz.bc
|
||||
-x509_certificate_list
|
||||
--
|
||||
2.6.4
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
From a0af2e538c80f3e47f1d6ddf120a153ad909e8ad Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Date: Wed, 2 Dec 2015 09:24:46 -0800
|
||||
Subject: drm: Fix an unwanted master inheritance v2
|
||||
|
||||
A client calling drmSetMaster() using a file descriptor that was opened
|
||||
when another client was master would inherit the latter client's master
|
||||
object and all its authenticated clients.
|
||||
|
||||
This is unwanted behaviour, and when this happens, instead allocate a
|
||||
brand new master object for the client calling drmSetMaster().
|
||||
|
||||
Fixes a BUG() throw in vmw_master_set().
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
|
||||
index 9362609..7dd6728 100644
|
||||
--- a/drivers/gpu/drm/drm_drv.c
|
||||
+++ b/drivers/gpu/drm/drm_drv.c
|
||||
@@ -160,6 +160,11 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
+ if (!file_priv->allowed_master) {
|
||||
+ ret = drm_new_set_master(dev, file_priv);
|
||||
+ goto out_unlock;
|
||||
+ }
|
||||
+
|
||||
file_priv->minor->master = drm_master_get(file_priv->master);
|
||||
file_priv->is_master = 1;
|
||||
if (dev->driver->master_set) {
|
||||
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
|
||||
index c59ce4d..6b5625e 100644
|
||||
--- a/drivers/gpu/drm/drm_fops.c
|
||||
+++ b/drivers/gpu/drm/drm_fops.c
|
||||
@@ -126,6 +126,60 @@ static int drm_cpu_valid(void)
|
||||
}
|
||||
|
||||
/**
|
||||
+ * drm_new_set_master - Allocate a new master object and become master for the
|
||||
+ * associated master realm.
|
||||
+ *
|
||||
+ * @dev: The associated device.
|
||||
+ * @fpriv: File private identifying the client.
|
||||
+ *
|
||||
+ * This function must be called with dev::struct_mutex held.
|
||||
+ * Returns negative error code on failure. Zero on success.
|
||||
+ */
|
||||
+int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv)
|
||||
+{
|
||||
+ struct drm_master *old_master;
|
||||
+ int ret;
|
||||
+
|
||||
+ lockdep_assert_held_once(&dev->master_mutex);
|
||||
+
|
||||
+ /* create a new master */
|
||||
+ fpriv->minor->master = drm_master_create(fpriv->minor);
|
||||
+ if (!fpriv->minor->master)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ /* take another reference for the copy in the local file priv */
|
||||
+ old_master = fpriv->master;
|
||||
+ fpriv->master = drm_master_get(fpriv->minor->master);
|
||||
+
|
||||
+ if (dev->driver->master_create) {
|
||||
+ ret = dev->driver->master_create(dev, fpriv->master);
|
||||
+ if (ret)
|
||||
+ goto out_err;
|
||||
+ }
|
||||
+ if (dev->driver->master_set) {
|
||||
+ ret = dev->driver->master_set(dev, fpriv, true);
|
||||
+ if (ret)
|
||||
+ goto out_err;
|
||||
+ }
|
||||
+
|
||||
+ fpriv->is_master = 1;
|
||||
+ fpriv->allowed_master = 1;
|
||||
+ fpriv->authenticated = 1;
|
||||
+ if (old_master)
|
||||
+ drm_master_put(&old_master);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+out_err:
|
||||
+ /* drop both references and restore old master on failure */
|
||||
+ drm_master_put(&fpriv->minor->master);
|
||||
+ drm_master_put(&fpriv->master);
|
||||
+ fpriv->master = old_master;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* Called whenever a process opens /dev/drm.
|
||||
*
|
||||
* \param filp file pointer.
|
||||
@@ -189,35 +243,9 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor)
|
||||
mutex_lock(&dev->master_mutex);
|
||||
if (drm_is_primary_client(priv) && !priv->minor->master) {
|
||||
/* create a new master */
|
||||
- priv->minor->master = drm_master_create(priv->minor);
|
||||
- if (!priv->minor->master) {
|
||||
- ret = -ENOMEM;
|
||||
+ ret = drm_new_set_master(dev, priv);
|
||||
+ if (ret)
|
||||
goto out_close;
|
||||
- }
|
||||
-
|
||||
- priv->is_master = 1;
|
||||
- /* take another reference for the copy in the local file priv */
|
||||
- priv->master = drm_master_get(priv->minor->master);
|
||||
- priv->authenticated = 1;
|
||||
-
|
||||
- if (dev->driver->master_create) {
|
||||
- ret = dev->driver->master_create(dev, priv->master);
|
||||
- if (ret) {
|
||||
- /* drop both references if this fails */
|
||||
- drm_master_put(&priv->minor->master);
|
||||
- drm_master_put(&priv->master);
|
||||
- goto out_close;
|
||||
- }
|
||||
- }
|
||||
- if (dev->driver->master_set) {
|
||||
- ret = dev->driver->master_set(dev, priv, true);
|
||||
- if (ret) {
|
||||
- /* drop both references if this fails */
|
||||
- drm_master_put(&priv->minor->master);
|
||||
- drm_master_put(&priv->master);
|
||||
- goto out_close;
|
||||
- }
|
||||
- }
|
||||
} else if (drm_is_primary_client(priv)) {
|
||||
/* get a reference to the master */
|
||||
priv->master = drm_master_get(priv->minor->master);
|
||||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
|
||||
index 0b921ae..441b26e 100644
|
||||
--- a/include/drm/drmP.h
|
||||
+++ b/include/drm/drmP.h
|
||||
@@ -309,6 +309,11 @@ struct drm_file {
|
||||
unsigned universal_planes:1;
|
||||
/* true if client understands atomic properties */
|
||||
unsigned atomic:1;
|
||||
+ /*
|
||||
+ * This client is allowed to gain master privileges for @master.
|
||||
+ * Protected by struct drm_device::master_mutex.
|
||||
+ */
|
||||
+ unsigned allowed_master:1;
|
||||
|
||||
struct pid *pid;
|
||||
kuid_t uid;
|
||||
@@ -910,6 +915,7 @@ extern int drm_open(struct inode *inode, struct file *filp);
|
||||
extern ssize_t drm_read(struct file *filp, char __user *buffer,
|
||||
size_t count, loff_t *offset);
|
||||
extern int drm_release(struct inode *inode, struct file *filp);
|
||||
+extern int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
|
||||
|
||||
/* Mapping support (drm_vm.h) */
|
||||
extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
|
||||
--
|
||||
cgit v0.10.2
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Subject: [PATCH] drm/i915: Fix RPS pointer passed from wait_ioctl to i915_wait_request
|
||||
Date: Wed, 2 Dec 2015 09:13:46 +0000
|
||||
|
||||
In commit 2e1b873072dfe3bbcc158a9c21acde1ab0d36c55 [v4.2]
|
||||
Author: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Mon Apr 27 13:41:22 2015 +0100
|
||||
|
||||
drm/i915: Convert RPS tracking to a intel_rps_client struct
|
||||
|
||||
we converted the __i915_wait_request() to take a new intel_rps_client
|
||||
struct (rather than having to pass fake drm_i915_file_private structs).
|
||||
However, due to use of passing a void pointer, I didn't spot one
|
||||
callsite in wait-ioctl was passing the wrong pointer.
|
||||
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
|
||||
index f5aef48b93db..cd8c4024af92 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_gem.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem.c
|
||||
@@ -3045,7 +3045,7 @@ i915_gem_wait_ioctl(struct drm_device *d
|
||||
if (ret == 0)
|
||||
ret = __i915_wait_request(req[i], reset_counter, true,
|
||||
args->timeout_ns > 0 ? &args->timeout_ns : NULL,
|
||||
- file->driver_priv);
|
||||
+ to_rps_client(file));
|
||||
i915_gem_request_unreference__unlocked(req[i]);
|
||||
}
|
||||
return ret;
|
||||
File diff suppressed because it is too large
Load Diff
-35
@@ -1,35 +0,0 @@
|
||||
From 38850d786a799c3ff2de0dc1980902c3263698dc Mon Sep 17 00:00:00 2001
|
||||
From: "H. Nikolaus Schaller" <hns@goldelico.com>
|
||||
Date: Wed, 28 Oct 2015 19:00:26 +0100
|
||||
Subject: ARM: 8449/1: fix bug in vdsomunge swab32 macro
|
||||
|
||||
From: "H. Nikolaus Schaller" <hns@goldelico.com>
|
||||
|
||||
commit 38850d786a799c3ff2de0dc1980902c3263698dc upstream.
|
||||
|
||||
Commit 8a603f91cc48 ("ARM: 8445/1: fix vdsomunge not to depend on
|
||||
glibc specific byteswap.h") unfortunately introduced a bug created but
|
||||
not found during discussion and patch simplification.
|
||||
|
||||
Reported-by: Efraim Yawitz <efraim.yawitz@gmail.com>
|
||||
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
|
||||
Fixes: 8a603f91cc48 ("ARM: 8445/1: fix vdsomunge not to depend on glibc specific byteswap.h")
|
||||
Signed-off-by: Nathan Lynch <nathan_lynch@mentor.com>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
arch/arm/vdso/vdsomunge.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm/vdso/vdsomunge.c
|
||||
+++ b/arch/arm/vdso/vdsomunge.c
|
||||
@@ -66,7 +66,7 @@
|
||||
((((x) & 0x000000ff) << 24) | \
|
||||
(((x) & 0x0000ff00) << 8) | \
|
||||
(((x) & 0x00ff0000) >> 8) | \
|
||||
- (((x) & 0xff000000) << 24))
|
||||
+ (((x) & 0xff000000) >> 24))
|
||||
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
#define HOST_ORDER ELFDATA2LSB
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Jay Vosburgh <jay.vosburgh@canonical.com>
|
||||
Date: Fri, 6 Nov 2015 17:23:23 -0800
|
||||
Subject: bonding: fix panic on non-ARPHRD_ETHER enslave failure
|
||||
|
||||
From: Jay Vosburgh <jay.vosburgh@canonical.com>
|
||||
|
||||
[ Upstream commit 40baec225765c54eefa870530dd613bad9829bb7 ]
|
||||
|
||||
Since commit 7d5cd2ce529b, when bond_enslave fails on devices that
|
||||
are not ARPHRD_ETHER, if needed, it resets the bonding device back to
|
||||
ARPHRD_ETHER by calling ether_setup.
|
||||
|
||||
Unfortunately, ether_setup clobbers dev->flags, clearing IFF_UP
|
||||
if the bond device is up, leaving it in a quasi-down state without
|
||||
having actually gone through dev_close. For bonding, if any periodic
|
||||
work queue items are active (miimon, arp_interval, etc), those will
|
||||
remain running, as they are stopped by bond_close. At this point, if
|
||||
the bonding module is unloaded or the bond is deleted, the system will
|
||||
panic when the work function is called.
|
||||
|
||||
This panic is resolved by calling dev_close on the bond itself
|
||||
prior to calling ether_setup.
|
||||
|
||||
Cc: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
|
||||
Signed-off-by: Jay Vosburgh <jay.vosburgh@canonical.com>
|
||||
Fixes: 7d5cd2ce5292 ("bonding: correctly handle bonding type change on enslave failure")
|
||||
Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/net/bonding/bond_main.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/net/bonding/bond_main.c
|
||||
+++ b/drivers/net/bonding/bond_main.c
|
||||
@@ -1749,6 +1749,7 @@ err_undo_flags:
|
||||
slave_dev->dev_addr))
|
||||
eth_hw_addr_random(bond_dev);
|
||||
if (bond_dev->type != ARPHRD_ETHER) {
|
||||
+ dev_close(bond_dev);
|
||||
ether_setup(bond_dev);
|
||||
bond_dev->flags |= IFF_MASTER;
|
||||
bond_dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||
-75
@@ -1,75 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Ani Sinha <ani@arista.com>
|
||||
Date: Fri, 30 Oct 2015 16:54:31 -0700
|
||||
Subject: ipmr: fix possible race resulting from improper usage of IP_INC_STATS_BH() in preemptible context.
|
||||
|
||||
From: Ani Sinha <ani@arista.com>
|
||||
|
||||
[ Upstream commit 44f49dd8b5a606870a1f21101522a0f9c4414784 ]
|
||||
|
||||
Fixes the following kernel BUG :
|
||||
|
||||
BUG: using __this_cpu_add() in preemptible [00000000] code: bash/2758
|
||||
caller is __this_cpu_preempt_check+0x13/0x15
|
||||
CPU: 0 PID: 2758 Comm: bash Tainted: P O 3.18.19 #2
|
||||
ffffffff8170eaca ffff880110d1b788 ffffffff81482b2a 0000000000000000
|
||||
0000000000000000 ffff880110d1b7b8 ffffffff812010ae ffff880007cab800
|
||||
ffff88001a060800 ffff88013a899108 ffff880108b84240 ffff880110d1b7c8
|
||||
Call Trace:
|
||||
[<ffffffff81482b2a>] dump_stack+0x52/0x80
|
||||
[<ffffffff812010ae>] check_preemption_disabled+0xce/0xe1
|
||||
[<ffffffff812010d4>] __this_cpu_preempt_check+0x13/0x15
|
||||
[<ffffffff81419d60>] ipmr_queue_xmit+0x647/0x70c
|
||||
[<ffffffff8141a154>] ip_mr_forward+0x32f/0x34e
|
||||
[<ffffffff8141af76>] ip_mroute_setsockopt+0xe03/0x108c
|
||||
[<ffffffff810553fc>] ? get_parent_ip+0x11/0x42
|
||||
[<ffffffff810e6974>] ? pollwake+0x4d/0x51
|
||||
[<ffffffff81058ac0>] ? default_wake_function+0x0/0xf
|
||||
[<ffffffff810553fc>] ? get_parent_ip+0x11/0x42
|
||||
[<ffffffff810613d9>] ? __wake_up_common+0x45/0x77
|
||||
[<ffffffff81486ea9>] ? _raw_spin_unlock_irqrestore+0x1d/0x32
|
||||
[<ffffffff810618bc>] ? __wake_up_sync_key+0x4a/0x53
|
||||
[<ffffffff8139a519>] ? sock_def_readable+0x71/0x75
|
||||
[<ffffffff813dd226>] do_ip_setsockopt+0x9d/0xb55
|
||||
[<ffffffff81429818>] ? unix_seqpacket_sendmsg+0x3f/0x41
|
||||
[<ffffffff813963fe>] ? sock_sendmsg+0x6d/0x86
|
||||
[<ffffffff813959d4>] ? sockfd_lookup_light+0x12/0x5d
|
||||
[<ffffffff8139650a>] ? SyS_sendto+0xf3/0x11b
|
||||
[<ffffffff810d5738>] ? new_sync_read+0x82/0xaa
|
||||
[<ffffffff813ddd19>] compat_ip_setsockopt+0x3b/0x99
|
||||
[<ffffffff813fb24a>] compat_raw_setsockopt+0x11/0x32
|
||||
[<ffffffff81399052>] compat_sock_common_setsockopt+0x18/0x1f
|
||||
[<ffffffff813c4d05>] compat_SyS_setsockopt+0x1a9/0x1cf
|
||||
[<ffffffff813c4149>] compat_SyS_socketcall+0x180/0x1e3
|
||||
[<ffffffff81488ea1>] cstar_dispatch+0x7/0x1e
|
||||
|
||||
Signed-off-by: Ani Sinha <ani@arista.com>
|
||||
Acked-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv4/ipmr.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/net/ipv4/ipmr.c
|
||||
+++ b/net/ipv4/ipmr.c
|
||||
@@ -1682,8 +1682,8 @@ static inline int ipmr_forward_finish(st
|
||||
{
|
||||
struct ip_options *opt = &(IPCB(skb)->opt);
|
||||
|
||||
- IP_INC_STATS_BH(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||
- IP_ADD_STATS_BH(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTOCTETS, skb->len);
|
||||
+ IP_INC_STATS(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
|
||||
+ IP_ADD_STATS(dev_net(skb_dst(skb)->dev), IPSTATS_MIB_OUTOCTETS, skb->len);
|
||||
|
||||
if (unlikely(opt->optlen))
|
||||
ip_forward_options(skb);
|
||||
@@ -1745,7 +1745,7 @@ static void ipmr_queue_xmit(struct net *
|
||||
* to blackhole.
|
||||
*/
|
||||
|
||||
- IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
|
||||
+ IP_INC_STATS(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
|
||||
ip_rt_put(rt);
|
||||
goto out_free;
|
||||
}
|
||||
-66
@@ -1,66 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: WANG Cong <xiyou.wangcong@gmail.com>
|
||||
Date: Tue, 3 Nov 2015 14:32:57 -0800
|
||||
Subject: ipv4: disable BH when changing ip local port range
|
||||
|
||||
From: WANG Cong <xiyou.wangcong@gmail.com>
|
||||
|
||||
[ Upstream commit 4ee3bd4a8c7463cdef0b82ebc33fc94a9170a7e0 ]
|
||||
|
||||
This fixes the following lockdep warning:
|
||||
|
||||
[ INFO: inconsistent lock state ]
|
||||
4.3.0-rc7+ #1197 Not tainted
|
||||
---------------------------------
|
||||
inconsistent {IN-SOFTIRQ-R} -> {SOFTIRQ-ON-W} usage.
|
||||
sysctl/1019 [HC0[0]:SC0[0]:HE1:SE1] takes:
|
||||
(&(&net->ipv4.ip_local_ports.lock)->seqcount){+.+-..}, at: [<ffffffff81921de7>] ipv4_local_port_range+0xb4/0x12a
|
||||
{IN-SOFTIRQ-R} state was registered at:
|
||||
[<ffffffff810bd682>] __lock_acquire+0x2f6/0xdf0
|
||||
[<ffffffff810be6d5>] lock_acquire+0x11c/0x1a4
|
||||
[<ffffffff818e599c>] inet_get_local_port_range+0x4e/0xae
|
||||
[<ffffffff8166e8e3>] udp_flow_src_port.constprop.40+0x23/0x116
|
||||
[<ffffffff81671cb9>] vxlan_xmit_one+0x219/0xa6a
|
||||
[<ffffffff81672f75>] vxlan_xmit+0xa6b/0xaa5
|
||||
[<ffffffff817f2deb>] dev_hard_start_xmit+0x2ae/0x465
|
||||
[<ffffffff817f35ed>] __dev_queue_xmit+0x531/0x633
|
||||
[<ffffffff817f3702>] dev_queue_xmit_sk+0x13/0x15
|
||||
[<ffffffff818004a5>] neigh_resolve_output+0x12f/0x14d
|
||||
[<ffffffff81959cfa>] ip6_finish_output2+0x344/0x39f
|
||||
[<ffffffff8195bf58>] ip6_finish_output+0x88/0x8e
|
||||
[<ffffffff8195bfef>] ip6_output+0x91/0xe5
|
||||
[<ffffffff819792ae>] dst_output_sk+0x47/0x4c
|
||||
[<ffffffff81979392>] NF_HOOK_THRESH.constprop.30+0x38/0x82
|
||||
[<ffffffff8197981e>] mld_sendpack+0x189/0x266
|
||||
[<ffffffff8197b28b>] mld_ifc_timer_expire+0x1ef/0x223
|
||||
[<ffffffff810de581>] call_timer_fn+0xfb/0x28c
|
||||
[<ffffffff810ded1e>] run_timer_softirq+0x1c7/0x1f1
|
||||
|
||||
Fixes: b8f1a55639e6 ("udp: Add function to make source port for UDP tunnels")
|
||||
Cc: Tom Herbert <tom@herbertland.com>
|
||||
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv4/sysctl_net_ipv4.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/net/ipv4/sysctl_net_ipv4.c
|
||||
+++ b/net/ipv4/sysctl_net_ipv4.c
|
||||
@@ -48,14 +48,14 @@ static void set_local_port_range(struct
|
||||
{
|
||||
bool same_parity = !((range[0] ^ range[1]) & 1);
|
||||
|
||||
- write_seqlock(&net->ipv4.ip_local_ports.lock);
|
||||
+ write_seqlock_bh(&net->ipv4.ip_local_ports.lock);
|
||||
if (same_parity && !net->ipv4.ip_local_ports.warned) {
|
||||
net->ipv4.ip_local_ports.warned = true;
|
||||
pr_err_ratelimited("ip_local_port_range: prefer different parity for start/end values.\n");
|
||||
}
|
||||
net->ipv4.ip_local_ports.range[0] = range[0];
|
||||
net->ipv4.ip_local_ports.range[1] = range[1];
|
||||
- write_sequnlock(&net->ipv4.ip_local_ports.lock);
|
||||
+ write_sequnlock_bh(&net->ipv4.ip_local_ports.lock);
|
||||
}
|
||||
|
||||
/* Validate changes from /proc interface. */
|
||||
-120
@@ -1,120 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Julian Anastasov <ja@ssi.bg>
|
||||
Date: Fri, 30 Oct 2015 10:23:33 +0200
|
||||
Subject: ipv4: fix to not remove local route on link down
|
||||
|
||||
From: Julian Anastasov <ja@ssi.bg>
|
||||
|
||||
[ Upstream commit 4f823defdd5b106a5e89745ee8b163c71855de1e ]
|
||||
|
||||
When fib_netdev_event calls fib_disable_ip on NETDEV_DOWN event
|
||||
we should not delete the local routes if the local address
|
||||
is still present. The confusion comes from the fact that both
|
||||
fib_netdev_event and fib_inetaddr_event use the NETDEV_DOWN
|
||||
constant. Fix it by returning back the variable 'force'.
|
||||
|
||||
Steps to reproduce:
|
||||
modprobe dummy
|
||||
ifconfig dummy0 192.168.168.1 up
|
||||
ifconfig dummy0 down
|
||||
ip route list table local | grep dummy | grep host
|
||||
local 192.168.168.1 dev dummy0 proto kernel scope host src 192.168.168.1
|
||||
|
||||
Fixes: 8a3d03166f19 ("net: track link-status of ipv4 nexthops")
|
||||
Signed-off-by: Julian Anastasov <ja@ssi.bg>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
include/net/ip_fib.h | 2 +-
|
||||
net/ipv4/fib_frontend.c | 13 +++++++------
|
||||
net/ipv4/fib_semantics.c | 11 ++++++++---
|
||||
3 files changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/include/net/ip_fib.h
|
||||
+++ b/include/net/ip_fib.h
|
||||
@@ -317,7 +317,7 @@ void fib_flush_external(struct net *net)
|
||||
|
||||
/* Exported by fib_semantics.c */
|
||||
int ip_fib_check_default(__be32 gw, struct net_device *dev);
|
||||
-int fib_sync_down_dev(struct net_device *dev, unsigned long event);
|
||||
+int fib_sync_down_dev(struct net_device *dev, unsigned long event, bool force);
|
||||
int fib_sync_down_addr(struct net *net, __be32 local);
|
||||
int fib_sync_up(struct net_device *dev, unsigned int nh_flags);
|
||||
void fib_select_multipath(struct fib_result *res);
|
||||
--- a/net/ipv4/fib_frontend.c
|
||||
+++ b/net/ipv4/fib_frontend.c
|
||||
@@ -1110,9 +1110,10 @@ static void nl_fib_lookup_exit(struct ne
|
||||
net->ipv4.fibnl = NULL;
|
||||
}
|
||||
|
||||
-static void fib_disable_ip(struct net_device *dev, unsigned long event)
|
||||
+static void fib_disable_ip(struct net_device *dev, unsigned long event,
|
||||
+ bool force)
|
||||
{
|
||||
- if (fib_sync_down_dev(dev, event))
|
||||
+ if (fib_sync_down_dev(dev, event, force))
|
||||
fib_flush(dev_net(dev));
|
||||
rt_cache_flush(dev_net(dev));
|
||||
arp_ifdown(dev);
|
||||
@@ -1140,7 +1141,7 @@ static int fib_inetaddr_event(struct not
|
||||
/* Last address was deleted from this interface.
|
||||
* Disable IP.
|
||||
*/
|
||||
- fib_disable_ip(dev, event);
|
||||
+ fib_disable_ip(dev, event, true);
|
||||
} else {
|
||||
rt_cache_flush(dev_net(dev));
|
||||
}
|
||||
@@ -1157,7 +1158,7 @@ static int fib_netdev_event(struct notif
|
||||
unsigned int flags;
|
||||
|
||||
if (event == NETDEV_UNREGISTER) {
|
||||
- fib_disable_ip(dev, event);
|
||||
+ fib_disable_ip(dev, event, true);
|
||||
rt_flush_dev(dev);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
@@ -1178,14 +1179,14 @@ static int fib_netdev_event(struct notif
|
||||
rt_cache_flush(net);
|
||||
break;
|
||||
case NETDEV_DOWN:
|
||||
- fib_disable_ip(dev, event);
|
||||
+ fib_disable_ip(dev, event, false);
|
||||
break;
|
||||
case NETDEV_CHANGE:
|
||||
flags = dev_get_flags(dev);
|
||||
if (flags & (IFF_RUNNING | IFF_LOWER_UP))
|
||||
fib_sync_up(dev, RTNH_F_LINKDOWN);
|
||||
else
|
||||
- fib_sync_down_dev(dev, event);
|
||||
+ fib_sync_down_dev(dev, event, false);
|
||||
/* fall through */
|
||||
case NETDEV_CHANGEMTU:
|
||||
rt_cache_flush(net);
|
||||
--- a/net/ipv4/fib_semantics.c
|
||||
+++ b/net/ipv4/fib_semantics.c
|
||||
@@ -1281,7 +1281,13 @@ int fib_sync_down_addr(struct net *net,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int fib_sync_down_dev(struct net_device *dev, unsigned long event)
|
||||
+/* Event force Flags Description
|
||||
+ * NETDEV_CHANGE 0 LINKDOWN Carrier OFF, not for scope host
|
||||
+ * NETDEV_DOWN 0 LINKDOWN|DEAD Link down, not for scope host
|
||||
+ * NETDEV_DOWN 1 LINKDOWN|DEAD Last address removed
|
||||
+ * NETDEV_UNREGISTER 1 LINKDOWN|DEAD Device removed
|
||||
+ */
|
||||
+int fib_sync_down_dev(struct net_device *dev, unsigned long event, bool force)
|
||||
{
|
||||
int ret = 0;
|
||||
int scope = RT_SCOPE_NOWHERE;
|
||||
@@ -1290,8 +1296,7 @@ int fib_sync_down_dev(struct net_device
|
||||
struct hlist_head *head = &fib_info_devhash[hash];
|
||||
struct fib_nh *nh;
|
||||
|
||||
- if (event == NETDEV_UNREGISTER ||
|
||||
- event == NETDEV_DOWN)
|
||||
+ if (force)
|
||||
scope = -1;
|
||||
|
||||
hlist_for_each_entry(nh, head, nh_hash) {
|
||||
-62
@@ -1,62 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Julian Anastasov <ja@ssi.bg>
|
||||
Date: Fri, 30 Oct 2015 10:23:34 +0200
|
||||
Subject: ipv4: update RTNH_F_LINKDOWN flag on UP event
|
||||
|
||||
From: Julian Anastasov <ja@ssi.bg>
|
||||
|
||||
[ Upstream commit c9b3292eeb52c6834e972eb5b8fe38914771ed12 ]
|
||||
|
||||
When nexthop is part of multipath route we should clear the
|
||||
LINKDOWN flag when link goes UP or when first address is added.
|
||||
This is needed because we always set LINKDOWN flag when DEAD flag
|
||||
was set but now on UP the nexthop is not dead anymore. Examples when
|
||||
LINKDOWN bit can be forgotten when no NETDEV_CHANGE is delivered:
|
||||
|
||||
- link goes down (LINKDOWN is set), then link goes UP and device
|
||||
shows carrier OK but LINKDOWN remains set
|
||||
|
||||
- last address is deleted (LINKDOWN is set), then address is
|
||||
added and device shows carrier OK but LINKDOWN remains set
|
||||
|
||||
Steps to reproduce:
|
||||
modprobe dummy
|
||||
ifconfig dummy0 192.168.168.1 up
|
||||
|
||||
here add a multipath route where one nexthop is for dummy0:
|
||||
|
||||
ip route add 1.2.3.4 nexthop dummy0 nexthop SOME_OTHER_DEVICE
|
||||
ifconfig dummy0 down
|
||||
ifconfig dummy0 up
|
||||
|
||||
now ip route shows nexthop that is not dead. Now set the sysctl var:
|
||||
|
||||
echo 1 > /proc/sys/net/ipv4/conf/dummy0/ignore_routes_with_linkdown
|
||||
|
||||
now ip route will show a dead nexthop because the forgotten
|
||||
RTNH_F_LINKDOWN is propagated as RTNH_F_DEAD.
|
||||
|
||||
Fixes: 8a3d03166f19 ("net: track link-status of ipv4 nexthops")
|
||||
Signed-off-by: Julian Anastasov <ja@ssi.bg>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv4/fib_semantics.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/net/ipv4/fib_semantics.c
|
||||
+++ b/net/ipv4/fib_semantics.c
|
||||
@@ -1445,6 +1445,13 @@ int fib_sync_up(struct net_device *dev,
|
||||
if (!(dev->flags & IFF_UP))
|
||||
return 0;
|
||||
|
||||
+ if (nh_flags & RTNH_F_DEAD) {
|
||||
+ unsigned int flags = dev_get_flags(dev);
|
||||
+
|
||||
+ if (flags & (IFF_RUNNING | IFF_LOWER_UP))
|
||||
+ nh_flags |= RTNH_F_LINKDOWN;
|
||||
+ }
|
||||
+
|
||||
prev_fi = NULL;
|
||||
hash = fib_devindex_hashfn(dev->ifindex);
|
||||
head = &fib_info_devhash[hash];
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Sabrina Dubroca <sd@queasysnail.net>
|
||||
Date: Wed, 4 Nov 2015 14:47:53 +0100
|
||||
Subject: ipv6: clean up dev_snmp6 proc entry when we fail to initialize inet6_dev
|
||||
|
||||
From: Sabrina Dubroca <sd@queasysnail.net>
|
||||
|
||||
[ Upstream commit 2a189f9e57650e9f310ddf4aad75d66c1233a064 ]
|
||||
|
||||
In ipv6_add_dev, when addrconf_sysctl_register fails, we do not clean up
|
||||
the dev_snmp6 entry that we have already registered for this device.
|
||||
Call snmp6_unregister_dev in this case.
|
||||
|
||||
Fixes: a317a2f19da7d ("ipv6: fail early when creating netdev named all or default")
|
||||
Reported-by: Dmitry Vyukov <dvyukov@google.com>
|
||||
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv6/addrconf.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -417,6 +417,7 @@ static struct inet6_dev *ipv6_add_dev(st
|
||||
if (err) {
|
||||
ipv6_mc_destroy_dev(ndev);
|
||||
del_timer(&ndev->regen_timer);
|
||||
+ snmp6_unregister_dev(ndev);
|
||||
goto err_release;
|
||||
}
|
||||
/* protected by rtnl_lock */
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Mon, 2 Nov 2015 07:50:07 -0800
|
||||
Subject: net: avoid NULL deref in inet_ctl_sock_destroy()
|
||||
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
|
||||
[ Upstream commit 8fa677d2706d325d71dab91bf6e6512c05214e37 ]
|
||||
|
||||
Under low memory conditions, tcp_sk_init() and icmp_sk_init()
|
||||
can both iterate on all possible cpus and call inet_ctl_sock_destroy(),
|
||||
with eventual NULL pointer.
|
||||
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Reported-by: Dmitry Vyukov <dvyukov@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
include/net/inet_common.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/inet_common.h
|
||||
+++ b/include/net/inet_common.h
|
||||
@@ -41,7 +41,8 @@ int inet_recv_error(struct sock *sk, str
|
||||
|
||||
static inline void inet_ctl_sock_destroy(struct sock *sk)
|
||||
{
|
||||
- sock_release(sk->sk_socket);
|
||||
+ if (sk)
|
||||
+ sock_release(sk->sk_socket);
|
||||
}
|
||||
|
||||
#endif
|
||||
-91
@@ -1,91 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Date: Thu, 29 Oct 2015 18:11:35 -0700
|
||||
Subject: net: bcmgenet: Software reset EPHY after power on
|
||||
|
||||
From: Florian Fainelli <f.fainelli@gmail.com>
|
||||
|
||||
[ Upstream commit 5dbebbb44a6ad94aab2cd1a46f7676f255403f64 ]
|
||||
|
||||
The EPHY on GENET v1->v3 is extremely finicky, and will show occasional
|
||||
failures based on the timing and reset sequence, ranging from duplicate
|
||||
packets, to extremely high latencies.
|
||||
|
||||
Perform an additional software reset, and re-configuration to make sure it is
|
||||
in a consistent and working state.
|
||||
|
||||
Fixes: 6ac3ce8295e6 ("net: bcmgenet: Remove excessive PHY reset")
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +++-
|
||||
drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 +
|
||||
drivers/net/ethernet/broadcom/genet/bcmmii.c | 18 ++++++++++++++++++
|
||||
3 files changed, 22 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -907,8 +907,10 @@ static void bcmgenet_power_up(struct bcm
|
||||
}
|
||||
|
||||
bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
|
||||
- if (mode == GENET_POWER_PASSIVE)
|
||||
+ if (mode == GENET_POWER_PASSIVE) {
|
||||
bcmgenet_phy_power_set(priv->dev, true);
|
||||
+ bcmgenet_mii_reset(priv->dev);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* ioctl handle special commands that are not present in ethtool. */
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
|
||||
@@ -674,6 +674,7 @@ int bcmgenet_mii_init(struct net_device
|
||||
int bcmgenet_mii_config(struct net_device *dev);
|
||||
int bcmgenet_mii_probe(struct net_device *dev);
|
||||
void bcmgenet_mii_exit(struct net_device *dev);
|
||||
+void bcmgenet_mii_reset(struct net_device *dev);
|
||||
void bcmgenet_phy_power_set(struct net_device *dev, bool enable);
|
||||
void bcmgenet_mii_setup(struct net_device *dev);
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
@@ -163,6 +163,7 @@ void bcmgenet_mii_setup(struct net_devic
|
||||
phy_print_status(phydev);
|
||||
}
|
||||
|
||||
+
|
||||
static int bcmgenet_fixed_phy_link_update(struct net_device *dev,
|
||||
struct fixed_phy_status *status)
|
||||
{
|
||||
@@ -172,6 +173,22 @@ static int bcmgenet_fixed_phy_link_updat
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Perform a voluntary PHY software reset, since the EPHY is very finicky about
|
||||
+ * not doing it and will start corrupting packets
|
||||
+ */
|
||||
+void bcmgenet_mii_reset(struct net_device *dev)
|
||||
+{
|
||||
+ struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||
+
|
||||
+ if (GENET_IS_V4(priv))
|
||||
+ return;
|
||||
+
|
||||
+ if (priv->phydev) {
|
||||
+ phy_init_hw(priv->phydev);
|
||||
+ phy_start_aneg(priv->phydev);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void bcmgenet_phy_power_set(struct net_device *dev, bool enable)
|
||||
{
|
||||
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||
@@ -214,6 +231,7 @@ static void bcmgenet_internal_phy_setup(
|
||||
reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT);
|
||||
reg |= EXT_PWR_DN_EN_LD;
|
||||
bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
|
||||
+ bcmgenet_mii_reset(dev);
|
||||
}
|
||||
|
||||
static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv)
|
||||
@@ -1,34 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Mon, 9 Nov 2015 17:51:23 -0800
|
||||
Subject: net: fix a race in dst_release()
|
||||
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
|
||||
[ Upstream commit d69bbf88c8d0b367cf3e3a052f6daadf630ee566 ]
|
||||
|
||||
Only cpu seeing dst refcount going to 0 can safely
|
||||
dereference dst->flags.
|
||||
|
||||
Otherwise an other cpu might already have freed the dst.
|
||||
|
||||
Fixes: 27b75c95f10d ("net: avoid RCU for NOCACHE dst")
|
||||
Reported-by: Greg Thelen <gthelen@google.com>
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/core/dst.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/net/core/dst.c
|
||||
+++ b/net/core/dst.c
|
||||
@@ -306,7 +306,7 @@ void dst_release(struct dst_entry *dst)
|
||||
if (unlikely(newrefcnt < 0))
|
||||
net_warn_ratelimited("%s: dst:%p refcnt:%d\n",
|
||||
__func__, dst, newrefcnt);
|
||||
- if (unlikely(dst->flags & DST_NOCACHE) && !newrefcnt)
|
||||
+ if (!newrefcnt && unlikely(dst->flags & DST_NOCACHE))
|
||||
call_rcu(&dst->rcu_head, dst_destroy_rcu);
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: David Ahern <dsa@cumulusnetworks.com>
|
||||
Date: Tue, 3 Nov 2015 15:59:28 -0800
|
||||
Subject: net: Fix prefsrc lookups
|
||||
|
||||
From: David Ahern <dsa@cumulusnetworks.com>
|
||||
|
||||
[ Upstream commit e1b8d903c6c3862160d2d5036806a94786c8fc4e ]
|
||||
|
||||
A bug report (https://bugzilla.kernel.org/show_bug.cgi?id=107071) noted
|
||||
that the follwoing ip command is failing with v4.3:
|
||||
|
||||
$ ip route add 10.248.5.0/24 dev bond0.250 table vlan_250 src 10.248.5.154
|
||||
RTNETLINK answers: Invalid argument
|
||||
|
||||
021dd3b8a142d changed the lookup of the given preferred source address to
|
||||
use the table id passed in, but this assumes the local entries are in the
|
||||
given table which is not necessarily true for non-VRF use cases. When
|
||||
validating the preferred source fallback to the local table on failure.
|
||||
|
||||
Fixes: 021dd3b8a142d ("net: Add routes to the table associated with the device")
|
||||
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv4/fib_semantics.c | 13 ++++++++++---
|
||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/net/ipv4/fib_semantics.c
|
||||
+++ b/net/ipv4/fib_semantics.c
|
||||
@@ -864,14 +864,21 @@ static bool fib_valid_prefsrc(struct fib
|
||||
if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst ||
|
||||
fib_prefsrc != cfg->fc_dst) {
|
||||
u32 tb_id = cfg->fc_table;
|
||||
+ int rc;
|
||||
|
||||
if (tb_id == RT_TABLE_MAIN)
|
||||
tb_id = RT_TABLE_LOCAL;
|
||||
|
||||
- if (inet_addr_type_table(cfg->fc_nlinfo.nl_net,
|
||||
- fib_prefsrc, tb_id) != RTN_LOCAL) {
|
||||
- return false;
|
||||
+ rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net,
|
||||
+ fib_prefsrc, tb_id);
|
||||
+
|
||||
+ if (rc != RTN_LOCAL && tb_id != RT_TABLE_LOCAL) {
|
||||
+ rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net,
|
||||
+ fib_prefsrc, RT_TABLE_LOCAL);
|
||||
}
|
||||
+
|
||||
+ if (rc != RTN_LOCAL)
|
||||
+ return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1,231 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Francesco Ruggeri <fruggeri@aristanetworks.com>
|
||||
Date: Thu, 5 Nov 2015 08:16:14 -0800
|
||||
Subject: packet: race condition in packet_bind
|
||||
|
||||
From: Francesco Ruggeri <fruggeri@aristanetworks.com>
|
||||
|
||||
[ Upstream commit 30f7ea1c2b5f5fb7462c5ae44fe2e40cb2d6a474 ]
|
||||
|
||||
There is a race conditions between packet_notifier and packet_bind{_spkt}.
|
||||
|
||||
It happens if packet_notifier(NETDEV_UNREGISTER) executes between the
|
||||
time packet_bind{_spkt} takes a reference on the new netdevice and the
|
||||
time packet_do_bind sets po->ifindex.
|
||||
In this case the notification can be missed.
|
||||
If this happens during a dev_change_net_namespace this can result in the
|
||||
netdevice to be moved to the new namespace while the packet_sock in the
|
||||
old namespace still holds a reference on it. When the netdevice is later
|
||||
deleted in the new namespace the deletion hangs since the packet_sock
|
||||
is not found in the new namespace' &net->packet.sklist.
|
||||
It can be reproduced with the script below.
|
||||
|
||||
This patch makes packet_do_bind check again for the presence of the
|
||||
netdevice in the packet_sock's namespace after the synchronize_net
|
||||
in unregister_prot_hook.
|
||||
More in general it also uses the rcu lock for the duration of the bind
|
||||
to stop dev_change_net_namespace/rollback_registered_many from
|
||||
going past the synchronize_net following unlist_netdevice, so that
|
||||
no NETDEV_UNREGISTER notifications can happen on the new netdevice
|
||||
while the bind is executing. In order to do this some code from
|
||||
packet_bind{_spkt} is consolidated into packet_do_dev.
|
||||
|
||||
import socket, os, time, sys
|
||||
proto=7
|
||||
realDev='em1'
|
||||
vlanId=400
|
||||
if len(sys.argv) > 1:
|
||||
vlanId=int(sys.argv[1])
|
||||
dev='vlan%d' % vlanId
|
||||
|
||||
os.system('taskset -p 0x10 %d' % os.getpid())
|
||||
|
||||
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, proto)
|
||||
os.system('ip link add link %s name %s type vlan id %d' %
|
||||
(realDev, dev, vlanId))
|
||||
os.system('ip netns add dummy')
|
||||
|
||||
pid=os.fork()
|
||||
|
||||
if pid == 0:
|
||||
# dev should be moved while packet_do_bind is in synchronize net
|
||||
os.system('taskset -p 0x20000 %d' % os.getpid())
|
||||
os.system('ip link set %s netns dummy' % dev)
|
||||
os.system('ip netns exec dummy ip link del %s' % dev)
|
||||
s.close()
|
||||
sys.exit(0)
|
||||
|
||||
time.sleep(.004)
|
||||
try:
|
||||
s.bind(('%s' % dev, proto+1))
|
||||
except:
|
||||
print 'Could not bind socket'
|
||||
s.close()
|
||||
os.system('ip netns del dummy')
|
||||
sys.exit(0)
|
||||
|
||||
os.waitpid(pid, 0)
|
||||
s.close()
|
||||
os.system('ip netns del dummy')
|
||||
sys.exit(0)
|
||||
|
||||
Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/packet/af_packet.c | 80 ++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 49 insertions(+), 31 deletions(-)
|
||||
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -2903,22 +2903,40 @@ static int packet_release(struct socket
|
||||
* Attach a packet hook.
|
||||
*/
|
||||
|
||||
-static int packet_do_bind(struct sock *sk, struct net_device *dev, __be16 proto)
|
||||
+static int packet_do_bind(struct sock *sk, const char *name, int ifindex,
|
||||
+ __be16 proto)
|
||||
{
|
||||
struct packet_sock *po = pkt_sk(sk);
|
||||
struct net_device *dev_curr;
|
||||
__be16 proto_curr;
|
||||
bool need_rehook;
|
||||
+ struct net_device *dev = NULL;
|
||||
+ int ret = 0;
|
||||
+ bool unlisted = false;
|
||||
|
||||
- if (po->fanout) {
|
||||
- if (dev)
|
||||
- dev_put(dev);
|
||||
-
|
||||
+ if (po->fanout)
|
||||
return -EINVAL;
|
||||
- }
|
||||
|
||||
lock_sock(sk);
|
||||
spin_lock(&po->bind_lock);
|
||||
+ rcu_read_lock();
|
||||
+
|
||||
+ if (name) {
|
||||
+ dev = dev_get_by_name_rcu(sock_net(sk), name);
|
||||
+ if (!dev) {
|
||||
+ ret = -ENODEV;
|
||||
+ goto out_unlock;
|
||||
+ }
|
||||
+ } else if (ifindex) {
|
||||
+ dev = dev_get_by_index_rcu(sock_net(sk), ifindex);
|
||||
+ if (!dev) {
|
||||
+ ret = -ENODEV;
|
||||
+ goto out_unlock;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (dev)
|
||||
+ dev_hold(dev);
|
||||
|
||||
proto_curr = po->prot_hook.type;
|
||||
dev_curr = po->prot_hook.dev;
|
||||
@@ -2926,14 +2944,29 @@ static int packet_do_bind(struct sock *s
|
||||
need_rehook = proto_curr != proto || dev_curr != dev;
|
||||
|
||||
if (need_rehook) {
|
||||
- unregister_prot_hook(sk, true);
|
||||
+ if (po->running) {
|
||||
+ rcu_read_unlock();
|
||||
+ __unregister_prot_hook(sk, true);
|
||||
+ rcu_read_lock();
|
||||
+ dev_curr = po->prot_hook.dev;
|
||||
+ if (dev)
|
||||
+ unlisted = !dev_get_by_index_rcu(sock_net(sk),
|
||||
+ dev->ifindex);
|
||||
+ }
|
||||
|
||||
po->num = proto;
|
||||
po->prot_hook.type = proto;
|
||||
- po->prot_hook.dev = dev;
|
||||
|
||||
- po->ifindex = dev ? dev->ifindex : 0;
|
||||
- packet_cached_dev_assign(po, dev);
|
||||
+ if (unlikely(unlisted)) {
|
||||
+ dev_put(dev);
|
||||
+ po->prot_hook.dev = NULL;
|
||||
+ po->ifindex = -1;
|
||||
+ packet_cached_dev_reset(po);
|
||||
+ } else {
|
||||
+ po->prot_hook.dev = dev;
|
||||
+ po->ifindex = dev ? dev->ifindex : 0;
|
||||
+ packet_cached_dev_assign(po, dev);
|
||||
+ }
|
||||
}
|
||||
if (dev_curr)
|
||||
dev_put(dev_curr);
|
||||
@@ -2941,7 +2974,7 @@ static int packet_do_bind(struct sock *s
|
||||
if (proto == 0 || !need_rehook)
|
||||
goto out_unlock;
|
||||
|
||||
- if (!dev || (dev->flags & IFF_UP)) {
|
||||
+ if (!unlisted && (!dev || (dev->flags & IFF_UP))) {
|
||||
register_prot_hook(sk);
|
||||
} else {
|
||||
sk->sk_err = ENETDOWN;
|
||||
@@ -2950,9 +2983,10 @@ static int packet_do_bind(struct sock *s
|
||||
}
|
||||
|
||||
out_unlock:
|
||||
+ rcu_read_unlock();
|
||||
spin_unlock(&po->bind_lock);
|
||||
release_sock(sk);
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2964,8 +2998,6 @@ static int packet_bind_spkt(struct socke
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
char name[15];
|
||||
- struct net_device *dev;
|
||||
- int err = -ENODEV;
|
||||
|
||||
/*
|
||||
* Check legality
|
||||
@@ -2975,19 +3007,13 @@ static int packet_bind_spkt(struct socke
|
||||
return -EINVAL;
|
||||
strlcpy(name, uaddr->sa_data, sizeof(name));
|
||||
|
||||
- dev = dev_get_by_name(sock_net(sk), name);
|
||||
- if (dev)
|
||||
- err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
|
||||
- return err;
|
||||
+ return packet_do_bind(sk, name, 0, pkt_sk(sk)->num);
|
||||
}
|
||||
|
||||
static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
{
|
||||
struct sockaddr_ll *sll = (struct sockaddr_ll *)uaddr;
|
||||
struct sock *sk = sock->sk;
|
||||
- struct net_device *dev = NULL;
|
||||
- int err;
|
||||
-
|
||||
|
||||
/*
|
||||
* Check legality
|
||||
@@ -2998,16 +3024,8 @@ static int packet_bind(struct socket *so
|
||||
if (sll->sll_family != AF_PACKET)
|
||||
return -EINVAL;
|
||||
|
||||
- if (sll->sll_ifindex) {
|
||||
- err = -ENODEV;
|
||||
- dev = dev_get_by_index(sock_net(sk), sll->sll_ifindex);
|
||||
- if (dev == NULL)
|
||||
- goto out;
|
||||
- }
|
||||
- err = packet_do_bind(sk, dev, sll->sll_protocol ? : pkt_sk(sk)->num);
|
||||
-
|
||||
-out:
|
||||
- return err;
|
||||
+ return packet_do_bind(sk, NULL, sll->sll_ifindex,
|
||||
+ sll->sll_protocol ? : pkt_sk(sk)->num);
|
||||
}
|
||||
|
||||
static struct proto packet_proto = {
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
|
||||
Date: Sun, 1 Nov 2015 01:34:50 +0100
|
||||
Subject: qmi_wwan: fix entry for HP lt4112 LTE/HSPA+ Gobi 4G Module
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
|
||||
|
||||
[ Upstream commit 70910791731b5956171e1bfcad707766b8e18fee ]
|
||||
|
||||
The lt4112 is a HP branded Huawei me906e modem. Like other Huawei
|
||||
modems, it does not have a fixed interface to function mapping.
|
||||
Instead it uses a Huawei specific scheme: functions are mapped by
|
||||
subclass and protocol.
|
||||
|
||||
However, the HP vendor ID is used for modems from many different
|
||||
manufacturers using different schemes, so we cannot apply a generic
|
||||
vendor rule like we do for the Huawei vendor ID.
|
||||
|
||||
Replace the previous lt4112 entry pointing to an arbitrary interface
|
||||
number with a device specific subclass + protocol match.
|
||||
|
||||
Reported-and-tested-by: Muri Nicanor <muri+libqmi@immerda.ch>
|
||||
Tested-by: Martin Hauke <mardnh@gmx.de>
|
||||
Fixes: bb2bdeb83fb1 ("qmi_wwan: Add support for HP lt4112 LTE/HSPA+ Gobi 4G Modem")
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/net/usb/qmi_wwan.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/usb/qmi_wwan.c
|
||||
+++ b/drivers/net/usb/qmi_wwan.c
|
||||
@@ -539,6 +539,10 @@ static const struct usb_device_id produc
|
||||
USB_CDC_PROTO_NONE),
|
||||
.driver_info = (unsigned long)&qmi_wwan_info,
|
||||
},
|
||||
+ { /* HP lt4112 LTE/HSPA+ Gobi 4G Module (Huawei me906e) */
|
||||
+ USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x581d, USB_CLASS_VENDOR_SPEC, 1, 7),
|
||||
+ .driver_info = (unsigned long)&qmi_wwan_info,
|
||||
+ },
|
||||
|
||||
/* 3. Combined interface devices matching on interface number */
|
||||
{QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
|
||||
@@ -791,7 +795,6 @@ static const struct usb_device_id produc
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a9, 8)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b1, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
|
||||
- {QMI_FIXED_INTF(0x03f0, 0x581d, 4)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Module (Huawei me906e) */
|
||||
|
||||
/* 4. Gobi 1000 devices */
|
||||
{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
|
||||
-137
@@ -1,137 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Martin Habets <mhabets@solarflare.com>
|
||||
Date: Mon, 2 Nov 2015 12:51:31 +0000
|
||||
Subject: sfc: push partner queue for skb->xmit_more
|
||||
|
||||
From: Martin Habets <mhabets@solarflare.com>
|
||||
|
||||
[ Upstream commit b2663a4f30e85ec606b806f5135413e6d5c78d1e ]
|
||||
|
||||
When the IP stack passes SKBs the sfc driver puts them in 2 different TX
|
||||
queues (called partners), one for checksummed and one for not checksummed.
|
||||
If the SKB has xmit_more set the driver will delay pushing the work to the
|
||||
NIC.
|
||||
|
||||
When later it does decide to push the buffers this patch ensures it also
|
||||
pushes the partner queue, if that also has any delayed work. Before this
|
||||
fix the work in the partner queue would be left for a long time and cause
|
||||
a netdev watchdog.
|
||||
|
||||
Fixes: 70b33fb ("sfc: add support for skb->xmit_more")
|
||||
Reported-by: Jianlin Shi <jishi@redhat.com>
|
||||
Signed-off-by: Martin Habets <mhabets@solarflare.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/net/ethernet/sfc/ef10.c | 4 +++-
|
||||
drivers/net/ethernet/sfc/farch.c | 4 +++-
|
||||
drivers/net/ethernet/sfc/net_driver.h | 2 ++
|
||||
drivers/net/ethernet/sfc/tx.c | 30 ++++++++++++++++++++++++++++--
|
||||
4 files changed, 36 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/sfc/ef10.c
|
||||
+++ b/drivers/net/ethernet/sfc/ef10.c
|
||||
@@ -1849,7 +1849,9 @@ static void efx_ef10_tx_write(struct efx
|
||||
unsigned int write_ptr;
|
||||
efx_qword_t *txd;
|
||||
|
||||
- BUG_ON(tx_queue->write_count == tx_queue->insert_count);
|
||||
+ tx_queue->xmit_more_available = false;
|
||||
+ if (unlikely(tx_queue->write_count == tx_queue->insert_count))
|
||||
+ return;
|
||||
|
||||
do {
|
||||
write_ptr = tx_queue->write_count & tx_queue->ptr_mask;
|
||||
--- a/drivers/net/ethernet/sfc/farch.c
|
||||
+++ b/drivers/net/ethernet/sfc/farch.c
|
||||
@@ -321,7 +321,9 @@ void efx_farch_tx_write(struct efx_tx_qu
|
||||
unsigned write_ptr;
|
||||
unsigned old_write_count = tx_queue->write_count;
|
||||
|
||||
- BUG_ON(tx_queue->write_count == tx_queue->insert_count);
|
||||
+ tx_queue->xmit_more_available = false;
|
||||
+ if (unlikely(tx_queue->write_count == tx_queue->insert_count))
|
||||
+ return;
|
||||
|
||||
do {
|
||||
write_ptr = tx_queue->write_count & tx_queue->ptr_mask;
|
||||
--- a/drivers/net/ethernet/sfc/net_driver.h
|
||||
+++ b/drivers/net/ethernet/sfc/net_driver.h
|
||||
@@ -219,6 +219,7 @@ struct efx_tx_buffer {
|
||||
* @tso_packets: Number of packets via the TSO xmit path
|
||||
* @pushes: Number of times the TX push feature has been used
|
||||
* @pio_packets: Number of times the TX PIO feature has been used
|
||||
+ * @xmit_more_available: Are any packets waiting to be pushed to the NIC
|
||||
* @empty_read_count: If the completion path has seen the queue as empty
|
||||
* and the transmission path has not yet checked this, the value of
|
||||
* @read_count bitwise-added to %EFX_EMPTY_COUNT_VALID; otherwise 0.
|
||||
@@ -253,6 +254,7 @@ struct efx_tx_queue {
|
||||
unsigned int tso_packets;
|
||||
unsigned int pushes;
|
||||
unsigned int pio_packets;
|
||||
+ bool xmit_more_available;
|
||||
/* Statistics to supplement MAC stats */
|
||||
unsigned long tx_packets;
|
||||
|
||||
--- a/drivers/net/ethernet/sfc/tx.c
|
||||
+++ b/drivers/net/ethernet/sfc/tx.c
|
||||
@@ -431,8 +431,20 @@ finish_packet:
|
||||
efx_tx_maybe_stop_queue(tx_queue);
|
||||
|
||||
/* Pass off to hardware */
|
||||
- if (!skb->xmit_more || netif_xmit_stopped(tx_queue->core_txq))
|
||||
+ if (!skb->xmit_more || netif_xmit_stopped(tx_queue->core_txq)) {
|
||||
+ struct efx_tx_queue *txq2 = efx_tx_queue_partner(tx_queue);
|
||||
+
|
||||
+ /* There could be packets left on the partner queue if those
|
||||
+ * SKBs had skb->xmit_more set. If we do not push those they
|
||||
+ * could be left for a long time and cause a netdev watchdog.
|
||||
+ */
|
||||
+ if (txq2->xmit_more_available)
|
||||
+ efx_nic_push_buffers(txq2);
|
||||
+
|
||||
efx_nic_push_buffers(tx_queue);
|
||||
+ } else {
|
||||
+ tx_queue->xmit_more_available = skb->xmit_more;
|
||||
+ }
|
||||
|
||||
tx_queue->tx_packets++;
|
||||
|
||||
@@ -722,6 +734,7 @@ void efx_init_tx_queue(struct efx_tx_que
|
||||
tx_queue->read_count = 0;
|
||||
tx_queue->old_read_count = 0;
|
||||
tx_queue->empty_read_count = 0 | EFX_EMPTY_COUNT_VALID;
|
||||
+ tx_queue->xmit_more_available = false;
|
||||
|
||||
/* Set up TX descriptor ring */
|
||||
efx_nic_init_tx(tx_queue);
|
||||
@@ -747,6 +760,7 @@ void efx_fini_tx_queue(struct efx_tx_que
|
||||
|
||||
++tx_queue->read_count;
|
||||
}
|
||||
+ tx_queue->xmit_more_available = false;
|
||||
netdev_tx_reset_queue(tx_queue->core_txq);
|
||||
}
|
||||
|
||||
@@ -1302,8 +1316,20 @@ static int efx_enqueue_skb_tso(struct ef
|
||||
efx_tx_maybe_stop_queue(tx_queue);
|
||||
|
||||
/* Pass off to hardware */
|
||||
- if (!skb->xmit_more || netif_xmit_stopped(tx_queue->core_txq))
|
||||
+ if (!skb->xmit_more || netif_xmit_stopped(tx_queue->core_txq)) {
|
||||
+ struct efx_tx_queue *txq2 = efx_tx_queue_partner(tx_queue);
|
||||
+
|
||||
+ /* There could be packets left on the partner queue if those
|
||||
+ * SKBs had skb->xmit_more set. If we do not push those they
|
||||
+ * could be left for a long time and cause a netdev watchdog.
|
||||
+ */
|
||||
+ if (txq2->xmit_more_available)
|
||||
+ efx_nic_push_buffers(txq2);
|
||||
+
|
||||
efx_nic_push_buffers(tx_queue);
|
||||
+ } else {
|
||||
+ tx_queue->xmit_more_available = skb->xmit_more;
|
||||
+ }
|
||||
|
||||
tx_queue->tso_bursts++;
|
||||
return NETDEV_TX_OK;
|
||||
-96
@@ -1,96 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Mon, 2 Nov 2015 17:08:19 -0800
|
||||
Subject: sit: fix sit0 percpu double allocations
|
||||
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
|
||||
[ Upstream commit 4ece9009774596ee3df0acba65a324b7ea79387c ]
|
||||
|
||||
sit0 device allocates its percpu storage twice :
|
||||
- One time in ipip6_tunnel_init()
|
||||
- One time in ipip6_fb_tunnel_init()
|
||||
|
||||
Thus we leak 48 bytes per possible cpu per network namespace dismantle.
|
||||
|
||||
ipip6_fb_tunnel_init() can be much simpler and does not
|
||||
return an error, and should be called after register_netdev()
|
||||
|
||||
Note that ipip6_tunnel_clone_6rd() also needs to be called
|
||||
after register_netdev() (calling ipip6_tunnel_init())
|
||||
|
||||
Fixes: ebe084aafb7e ("sit: Use ipip6_tunnel_init as the ndo_init function.")
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Reported-by: Dmitry Vyukov <dvyukov@google.com>
|
||||
Cc: Steffen Klassert <steffen.klassert@secunet.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/ipv6/sit.c | 26 ++++----------------------
|
||||
1 file changed, 4 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/net/ipv6/sit.c
|
||||
+++ b/net/ipv6/sit.c
|
||||
@@ -1394,34 +1394,20 @@ static int ipip6_tunnel_init(struct net_
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int __net_init ipip6_fb_tunnel_init(struct net_device *dev)
|
||||
+static void __net_init ipip6_fb_tunnel_init(struct net_device *dev)
|
||||
{
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
struct iphdr *iph = &tunnel->parms.iph;
|
||||
struct net *net = dev_net(dev);
|
||||
struct sit_net *sitn = net_generic(net, sit_net_id);
|
||||
|
||||
- tunnel->dev = dev;
|
||||
- tunnel->net = dev_net(dev);
|
||||
-
|
||||
iph->version = 4;
|
||||
iph->protocol = IPPROTO_IPV6;
|
||||
iph->ihl = 5;
|
||||
iph->ttl = 64;
|
||||
|
||||
- dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
|
||||
- if (!dev->tstats)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst);
|
||||
- if (!tunnel->dst_cache) {
|
||||
- free_percpu(dev->tstats);
|
||||
- return -ENOMEM;
|
||||
- }
|
||||
-
|
||||
dev_hold(dev);
|
||||
rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
|
||||
- return 0;
|
||||
}
|
||||
|
||||
static int ipip6_validate(struct nlattr *tb[], struct nlattr *data[])
|
||||
@@ -1831,23 +1817,19 @@ static int __net_init sit_init_net(struc
|
||||
*/
|
||||
sitn->fb_tunnel_dev->features |= NETIF_F_NETNS_LOCAL;
|
||||
|
||||
- err = ipip6_fb_tunnel_init(sitn->fb_tunnel_dev);
|
||||
- if (err)
|
||||
- goto err_dev_free;
|
||||
-
|
||||
- ipip6_tunnel_clone_6rd(sitn->fb_tunnel_dev, sitn);
|
||||
err = register_netdev(sitn->fb_tunnel_dev);
|
||||
if (err)
|
||||
goto err_reg_dev;
|
||||
|
||||
+ ipip6_tunnel_clone_6rd(sitn->fb_tunnel_dev, sitn);
|
||||
+ ipip6_fb_tunnel_init(sitn->fb_tunnel_dev);
|
||||
+
|
||||
t = netdev_priv(sitn->fb_tunnel_dev);
|
||||
|
||||
strcpy(t->parms.name, sitn->fb_tunnel_dev->name);
|
||||
return 0;
|
||||
|
||||
err_reg_dev:
|
||||
- dev_put(sitn->fb_tunnel_dev);
|
||||
-err_dev_free:
|
||||
ipip6_dev_free(sitn->fb_tunnel_dev);
|
||||
err_alloc_dev:
|
||||
return err;
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Phil Reid <preid@electromag.com.au>
|
||||
Date: Fri, 30 Oct 2015 16:43:55 +0800
|
||||
Subject: stmmac: Correctly report PTP capabilities.
|
||||
|
||||
From: Phil Reid <preid@electromag.com.au>
|
||||
|
||||
[ Upstream commit e6dbe1eb2db0d7a14991c06278dd3030c45fb825 ]
|
||||
|
||||
priv->hwts_*_en indicate if timestamping is enabled/disabled at run
|
||||
time. But priv->dma_cap.time_stamp and priv->dma_cap.atime_stamp
|
||||
indicates HW is support for PTPv1/PTPv2.
|
||||
|
||||
Signed-off-by: Phil Reid <preid@electromag.com.au>
|
||||
Acked-by: Richard Cochran <richardcochran@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
|
||||
@@ -721,10 +721,13 @@ static int stmmac_get_ts_info(struct net
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
|
||||
- if ((priv->hwts_tx_en) && (priv->hwts_rx_en)) {
|
||||
+ if ((priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp)) {
|
||||
|
||||
- info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
|
||||
+ info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
|
||||
+ SOF_TIMESTAMPING_TX_HARDWARE |
|
||||
+ SOF_TIMESTAMPING_RX_SOFTWARE |
|
||||
SOF_TIMESTAMPING_RX_HARDWARE |
|
||||
+ SOF_TIMESTAMPING_SOFTWARE |
|
||||
SOF_TIMESTAMPING_RAW_HARDWARE;
|
||||
|
||||
if (priv->ptp_clock)
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Jon Paul Maloy <jon.maloy@ericsson.com>
|
||||
Date: Wed, 28 Oct 2015 13:09:53 -0400
|
||||
Subject: tipc: linearize arriving NAME_DISTR and LINK_PROTO buffers
|
||||
|
||||
From: Jon Paul Maloy <jon.maloy@ericsson.com>
|
||||
|
||||
[ Upstream commit 5cbb28a4bf65c7e4daa6c25b651fed8eb888c620 ]
|
||||
|
||||
Testing of the new UDP bearer has revealed that reception of
|
||||
NAME_DISTRIBUTOR, LINK_PROTOCOL/RESET and LINK_PROTOCOL/ACTIVATE
|
||||
message buffers is not prepared for the case that those may be
|
||||
non-linear.
|
||||
|
||||
We now linearize all such buffers before they are delivered up to the
|
||||
generic reception layer.
|
||||
|
||||
In order for the commit to apply cleanly to 'net' and 'stable', we do
|
||||
the change in the function tipc_udp_recv() for now. Later, we will post
|
||||
a commit to 'net-next' moving the linearization to generic code, in
|
||||
tipc_named_rcv() and tipc_link_proto_rcv().
|
||||
|
||||
Fixes: commit d0f91938bede ("tipc: add ip/udp media type")
|
||||
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
net/tipc/udp_media.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/net/tipc/udp_media.c
|
||||
+++ b/net/tipc/udp_media.c
|
||||
@@ -48,6 +48,7 @@
|
||||
#include <linux/tipc_netlink.h>
|
||||
#include "core.h"
|
||||
#include "bearer.h"
|
||||
+#include "msg.h"
|
||||
|
||||
/* IANA assigned UDP port */
|
||||
#define UDP_PORT_DEFAULT 6118
|
||||
@@ -222,6 +223,10 @@ static int tipc_udp_recv(struct sock *sk
|
||||
{
|
||||
struct udp_bearer *ub;
|
||||
struct tipc_bearer *b;
|
||||
+ int usr = msg_user(buf_msg(skb));
|
||||
+
|
||||
+ if ((usr == LINK_PROTOCOL) || (usr == NAME_DISTRIBUTOR))
|
||||
+ skb_linearize(skb);
|
||||
|
||||
ub = rcu_dereference_sk_user_data(sk);
|
||||
if (!ub) {
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
From foo@baz Tue Nov 17 14:33:46 PST 2015
|
||||
From: Tobias Klauser <tklauser@distanz.ch>
|
||||
Date: Wed, 4 Nov 2015 13:49:49 +0100
|
||||
Subject: tun_dst: Fix potential NULL dereference
|
||||
|
||||
From: Tobias Klauser <tklauser@distanz.ch>
|
||||
|
||||
[ Upstream commit f63ce5b6fa5e9a0faf7a0e1ef2993a502878c78a ]
|
||||
|
||||
In tun_dst_unclone() the return value of skb_metadata_dst() is checked
|
||||
for being NULL after it is dereferenced. Fix this by moving the
|
||||
dereference after the NULL check.
|
||||
|
||||
Found by the Coverity scanner (CID 1338068).
|
||||
|
||||
Fixes: fc4099f17240 ("openvswitch: Fix egress tunnel info.")
|
||||
Cc: Pravin B Shelar <pshelar@nicira.com>
|
||||
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
include/net/dst_metadata.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/dst_metadata.h
|
||||
+++ b/include/net/dst_metadata.h
|
||||
@@ -63,12 +63,13 @@ static inline struct metadata_dst *tun_r
|
||||
static inline struct metadata_dst *tun_dst_unclone(struct sk_buff *skb)
|
||||
{
|
||||
struct metadata_dst *md_dst = skb_metadata_dst(skb);
|
||||
- int md_size = md_dst->u.tun_info.options_len;
|
||||
+ int md_size;
|
||||
struct metadata_dst *new_md;
|
||||
|
||||
if (!md_dst)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
+ md_size = md_dst->u.tun_info.options_len;
|
||||
new_md = metadata_dst_alloc(md_size, GFP_ATOMIC);
|
||||
if (!new_md)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
From f504ab1888026d15b5be8f9c262bf4ae9cacd177 Mon Sep 17 00:00:00 2001
|
||||
From: Bjørn Mork <bjorn@mork.no>
|
||||
Date: Thu, 22 Oct 2015 14:24:24 +0200
|
||||
Subject: USB: qcserial: add Sierra Wireless MC74xx/EM74xx
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Bjørn Mork <bjorn@mork.no>
|
||||
|
||||
commit f504ab1888026d15b5be8f9c262bf4ae9cacd177 upstream.
|
||||
|
||||
New device IDs shamelessly lifted from the vendor driver.
|
||||
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Acked-by: Johan Hovold <johan@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/usb/serial/qcserial.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/drivers/usb/serial/qcserial.c
|
||||
+++ b/drivers/usb/serial/qcserial.c
|
||||
@@ -153,6 +153,8 @@ static const struct usb_device_id id_tab
|
||||
{DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */
|
||||
{DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */
|
||||
{DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */
|
||||
+ {DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx/EM74xx */
|
||||
+ {DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx/EM74xx */
|
||||
{DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
{DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
-93
@@ -1,93 +0,0 @@
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Subject: [PATCH 1/3] KVM: x86: work around infinite loop in microcode when #AC is delivered
|
||||
Date: Tue, 10 Nov 2015 13:22:52 +0100
|
||||
|
||||
From: Eric Northup <digitaleric@google.com>
|
||||
|
||||
It was found that a guest can DoS a host by triggering an infinite
|
||||
stream of "alignment check" (#AC) exceptions. This causes the
|
||||
microcode to enter an infinite loop where the core never receives
|
||||
another interrupt. The host kernel panics pretty quickly due to the
|
||||
effects (CVE-2015-5307).
|
||||
|
||||
Signed-off-by: Eric Northup <digitaleric@google.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
---
|
||||
arch/x86/include/uapi/asm/svm.h | 1 +
|
||||
arch/x86/kvm/svm.c | 8 ++++++++
|
||||
arch/x86/kvm/vmx.c | 5 ++++-
|
||||
3 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/include/uapi/asm/svm.h b/arch/x86/include/uapi/asm/svm.h
|
||||
index b5d7640abc5d..8a4add8e4639 100644
|
||||
--- a/arch/x86/include/uapi/asm/svm.h
|
||||
+++ b/arch/x86/include/uapi/asm/svm.h
|
||||
@@ -100,6 +100,7 @@
|
||||
{ SVM_EXIT_EXCP_BASE + UD_VECTOR, "UD excp" }, \
|
||||
{ SVM_EXIT_EXCP_BASE + PF_VECTOR, "PF excp" }, \
|
||||
{ SVM_EXIT_EXCP_BASE + NM_VECTOR, "NM excp" }, \
|
||||
+ { SVM_EXIT_EXCP_BASE + AC_VECTOR, "AC excp" }, \
|
||||
{ SVM_EXIT_EXCP_BASE + MC_VECTOR, "MC excp" }, \
|
||||
{ SVM_EXIT_INTR, "interrupt" }, \
|
||||
{ SVM_EXIT_NMI, "nmi" }, \
|
||||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
|
||||
index f2ba91990b4e..183926483c3a 100644
|
||||
--- a/arch/x86/kvm/svm.c
|
||||
+++ b/arch/x86/kvm/svm.c
|
||||
@@ -1019,6 +1019,7 @@ static void init_vmcb(struct vcpu_svm *svm)
|
||||
set_exception_intercept(svm, PF_VECTOR);
|
||||
set_exception_intercept(svm, UD_VECTOR);
|
||||
set_exception_intercept(svm, MC_VECTOR);
|
||||
+ set_exception_intercept(svm, AC_VECTOR);
|
||||
|
||||
set_intercept(svm, INTERCEPT_INTR);
|
||||
set_intercept(svm, INTERCEPT_NMI);
|
||||
@@ -1707,6 +1708,12 @@ static int ud_interception(struct vcpu_svm *svm)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static int ac_interception(struct vcpu_svm *svm)
|
||||
+{
|
||||
+ kvm_queue_exception_e(&svm->vcpu, AC_VECTOR, 0);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static void svm_fpu_activate(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct vcpu_svm *svm = to_svm(vcpu);
|
||||
@@ -3270,6 +3277,7 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
|
||||
[SVM_EXIT_EXCP_BASE + PF_VECTOR] = pf_interception,
|
||||
[SVM_EXIT_EXCP_BASE + NM_VECTOR] = nm_interception,
|
||||
[SVM_EXIT_EXCP_BASE + MC_VECTOR] = mc_interception,
|
||||
+ [SVM_EXIT_EXCP_BASE + AC_VECTOR] = ac_interception,
|
||||
[SVM_EXIT_INTR] = intr_interception,
|
||||
[SVM_EXIT_NMI] = nmi_interception,
|
||||
[SVM_EXIT_SMI] = nop_on_interception,
|
||||
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
||||
index b765b036a048..89aaedd2a91d 100644
|
||||
--- a/arch/x86/kvm/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx.c
|
||||
@@ -1639,7 +1639,7 @@ static void update_exception_bitmap(struct kvm_vcpu *vcpu)
|
||||
u32 eb;
|
||||
|
||||
eb = (1u << PF_VECTOR) | (1u << UD_VECTOR) | (1u << MC_VECTOR) |
|
||||
- (1u << NM_VECTOR) | (1u << DB_VECTOR);
|
||||
+ (1u << NM_VECTOR) | (1u << DB_VECTOR) | (1u << AC_VECTOR);
|
||||
if ((vcpu->guest_debug &
|
||||
(KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) ==
|
||||
(KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP))
|
||||
@@ -5261,6 +5261,9 @@ static int handle_exception(struct kvm_vcpu *vcpu)
|
||||
return handle_rmode_exception(vcpu, ex_no, error_code);
|
||||
|
||||
switch (ex_no) {
|
||||
+ case AC_VECTOR:
|
||||
+ kvm_queue_exception_e(vcpu, AC_VECTOR, error_code);
|
||||
+ return 1;
|
||||
case DB_VECTOR:
|
||||
dr6 = vmcs_readl(EXIT_QUALIFICATION);
|
||||
if (!(vcpu->guest_debug &
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
+18
-23
@@ -28,39 +28,20 @@
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<!--Patch level="1" compressionType="xz">patches/linux/patch-4.2.6.xz</Patch-->
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.3.0/2.mga6/PATCHES/patches/series-->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.3.2.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.3.2/1.mga6/PATCHES/patches/series-->
|
||||
<!--stable patches-->
|
||||
<Patch level="1">patches/mageia/stable-arm-8449-1-fix-bug-in-vdsomunge-swab32-macro.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-usb-qcserial-add-sierra-wireless-mc74xx-em74xx.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-tipc-linearize-arriving-name_distr-and-link_proto-buffers.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-net-bcmgenet-software-reset-ephy-after-power-on.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-ipv4-fix-to-not-remove-local-route-on-link-down.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-ipv4-update-rtnh_f_linkdown-flag-on-up-event.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-stmmac-correctly-report-ptp-capabilities.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-ipmr-fix-possible-race-resulting-from-improper-usage-of-ip_inc_stats_bh-in-preemptible-context.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-qmi_wwan-fix-entry-for-hp-lt4112-lte-hspa-gobi-4g-module.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-sit-fix-sit0-percpu-double-allocations.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-sfc-push-partner-queue-for-skb-xmit_more.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-net-avoid-null-deref-in-inet_ctl_sock_destroy.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-ipv6-clean-up-dev_snmp6-proc-entry-when-we-fail-to-initialize-inet6_dev.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-ipv4-disable-bh-when-changing-ip-local-port-range.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-net-fix-prefsrc-lookups.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-tun_dst-fix-potential-null-dereference.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-packet-race-condition-in-packet_bind.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-bonding-fix-panic-on-non-arphrd_ether-enslave-failure.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-net-fix-a-race-in-dst_release.patch</Patch>
|
||||
<!--other patches-->
|
||||
<Patch level="1">patches/mageia/x86-pci-toshiba-equium-a60-assign-busses.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-boot-video-80x25-if-break.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-default_poweroff_up_machines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-KVM-x86-work-around-infinite-loop-in-microcode-when-AC-is-delivered.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-KVM-svm-unconditionally-intercept-DB.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-x86-efi-Request-desired-alignment-via-the-PE-.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-x86-mm-mtrr-Remove-kernel-internal-MTRR-inter.patch</Patch>
|
||||
<Patch level="1">patches/mageia/base-cacheinfo-silence-DT-warnings.patch</Patch>
|
||||
<Patch level="1">patches/mageia/certs-add-.gitignore-to-stop-git-nagging-about-x509_.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-add-ALI-M5229-ide-compatibility-mode-quirk.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-quirks-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-CLEVO-M360S-disable_acpi_irq.patch</Patch>
|
||||
@@ -101,6 +82,8 @@
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-linux-3.14-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.17-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.18-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-Fix-an-unwanted-master-inheritance-v2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-Fix-RPS-pointer-passed-from-wait_ioctl-to-i915_wait_request.patch</Patch>
|
||||
<Patch level="1">patches/mageia/input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-sis190-fix-list-usage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG.patch</Patch>
|
||||
@@ -117,6 +100,7 @@
|
||||
<Patch level="1">patches/mageia/net-netfilter-ipset-Fix-hash-type-expire-release-empty-hash-bucket-block.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-Fix-removal-of-GRE-expectation-entries-created-by-PPTP.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-rtlwifi-rtl8821ae-Fix-lockups-on-boot.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net_43.mbox.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-add-shuttle-wmi-driver.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.2-buildfix.patch</Patch>
|
||||
@@ -209,7 +193,18 @@
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<History>
|
||||
<Update release="68">
|
||||
<Date>2015-12-12</Date>
|
||||
<Version>4.3.2</Version>
|
||||
<Comment>Version bump to 4.3.2 https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.3.2</Comment>
|
||||
<Type package="kernel">security</Type>
|
||||
<Requires>
|
||||
<Action package="kernel">systemRestart</Action>
|
||||
</Requires>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="67">
|
||||
<Date>2015-12-01</Date>
|
||||
<Version>4.3.0</Version>
|
||||
|
||||
Reference in New Issue
Block a user