works for kernel-4.14.23
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86_64 4.14.18 Kernel Configuration
|
||||
# Linux/x86_64 4.14.23 Kernel Configuration
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_X86_64=y
|
||||
@@ -6740,7 +6740,6 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y
|
||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_HAVE_ARCH_KMEMCHECK=y
|
||||
CONFIG_HAVE_ARCH_KASAN=y
|
||||
# CONFIG_KASAN is not set
|
||||
CONFIG_ARCH_HAS_KCOV=y
|
||||
@@ -7256,5 +7255,6 @@ CONFIG_PARMAN=m
|
||||
#
|
||||
CONFIG_VIAHSS=m
|
||||
CONFIG_NDISWRAPPER=m
|
||||
CONFIG_RTL8723DE=m
|
||||
# CONFIG_RTL8812AU is not set
|
||||
CONFIG_AES2501=m
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
+49
@@ -0,0 +1,49 @@
|
||||
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||
Subject: [PATCH] ACPI / EC: Restore polling during noirq suspend/resume phases
|
||||
Date: Fri, 09 Feb 2018 22:55:28 +0100
|
||||
|
||||
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
|
||||
Commit 662591461c4b (ACPI / EC: Drop EC noirq hooks to fix a
|
||||
regression) modified the ACPI EC driver so that it doesn't switch
|
||||
over to busy polling mode during noirq stages of system suspend and
|
||||
resume in an attempt to fix an issue resulting from that behavior.
|
||||
|
||||
However, that modification introduced a system resume regression on
|
||||
Thinkpad X240, so make the EC driver switch over to the polling mode
|
||||
during noirq stages of system suspend and resume again, which
|
||||
effectively reverts the problematic commit.
|
||||
|
||||
Fixes: 662591461c4b (ACPI / EC: Drop EC noirq hooks to fix a regression)
|
||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=197863
|
||||
Reported-by: Markus Demleitner <m@tfiu.de>
|
||||
Tested-by: Markus Demleitner <m@tfiu.de>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/ec.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
Index: linux-pm/drivers/acpi/ec.c
|
||||
===================================================================
|
||||
--- linux-pm.orig/drivers/acpi/ec.c
|
||||
+++ linux-pm/drivers/acpi/ec.c
|
||||
@@ -1927,6 +1927,9 @@ static int acpi_ec_suspend_noirq(struct
|
||||
ec->reference_count >= 1)
|
||||
acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_DISABLE);
|
||||
|
||||
+ if (acpi_sleep_no_ec_events())
|
||||
+ acpi_ec_enter_noirq(ec);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1934,6 +1937,9 @@ static int acpi_ec_resume_noirq(struct d
|
||||
{
|
||||
struct acpi_ec *ec = acpi_driver_data(to_acpi_device(dev));
|
||||
|
||||
+ if (acpi_sleep_no_ec_events())
|
||||
+ acpi_ec_leave_noirq(ec);
|
||||
+
|
||||
if (ec_no_wakeup && test_bit(EC_FLAGS_STARTED, &ec->flags) &&
|
||||
ec->reference_count >= 1)
|
||||
acpi_set_gpe(NULL, ec->gpe, ACPI_GPE_ENABLE);
|
||||
@@ -0,0 +1,224 @@
|
||||
From a7877390614770965a6925dfed79cbd3eeeb61e0 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Wed, 7 Feb 2018 22:19:20 +0100
|
||||
Subject: [PATCH] block, bfq: add requeue-request hook
|
||||
|
||||
Commit 'a6a252e64914 ("blk-mq-sched: decide how to handle flush rq via
|
||||
RQF_FLUSH_SEQ")' makes all non-flush re-prepared requests for a device
|
||||
be re-inserted into the active I/O scheduler for that device. As a
|
||||
consequence, I/O schedulers may get the same request inserted again,
|
||||
even several times, without a finish_request invoked on that request
|
||||
before each re-insertion.
|
||||
|
||||
This fact is the cause of the failure reported in [1]. For an I/O
|
||||
scheduler, every re-insertion of the same re-prepared request is
|
||||
equivalent to the insertion of a new request. For schedulers like
|
||||
mq-deadline or kyber, this fact causes no harm. In contrast, it
|
||||
confuses a stateful scheduler like BFQ, which keeps state for an I/O
|
||||
request, until the finish_request hook is invoked on the request. In
|
||||
particular, BFQ may get stuck, waiting forever for the number of
|
||||
request dispatches, of the same request, to be balanced by an equal
|
||||
number of request completions (while there will be one completion for
|
||||
that request). In this state, BFQ may refuse to serve I/O requests
|
||||
from other bfq_queues. The hang reported in [1] then follows.
|
||||
|
||||
However, the above re-prepared requests undergo a requeue, thus the
|
||||
requeue_request hook of the active elevator is invoked for these
|
||||
requests, if set. This commit then addresses the above issue by
|
||||
properly implementing the hook requeue_request in BFQ.
|
||||
|
||||
[1] https://marc.info/?l=linux-block&m=151211117608676
|
||||
|
||||
Reported-by: Ivan Kozik <ivan@ludios.org>
|
||||
Reported-by: Alban Browaeys <alban.browaeys@gmail.com>
|
||||
Tested-by: Mike Galbraith <efault@gmx.de>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Serena Ziviani <ziviani.serena@gmail.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-iosched.c | 107 ++++++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 82 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
||||
index 47e6ec7427c4..aeca22d91101 100644
|
||||
--- a/block/bfq-iosched.c
|
||||
+++ b/block/bfq-iosched.c
|
||||
@@ -3823,24 +3823,26 @@ static struct request *__bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
|
||||
}
|
||||
|
||||
/*
|
||||
- * We exploit the bfq_finish_request hook to decrement
|
||||
- * rq_in_driver, but bfq_finish_request will not be
|
||||
- * invoked on this request. So, to avoid unbalance,
|
||||
- * just start this request, without incrementing
|
||||
- * rq_in_driver. As a negative consequence,
|
||||
- * rq_in_driver is deceptively lower than it should be
|
||||
- * while this request is in service. This may cause
|
||||
- * bfq_schedule_dispatch to be invoked uselessly.
|
||||
+ * We exploit the bfq_finish_requeue_request hook to
|
||||
+ * decrement rq_in_driver, but
|
||||
+ * bfq_finish_requeue_request will not be invoked on
|
||||
+ * this request. So, to avoid unbalance, just start
|
||||
+ * this request, without incrementing rq_in_driver. As
|
||||
+ * a negative consequence, rq_in_driver is deceptively
|
||||
+ * lower than it should be while this request is in
|
||||
+ * service. This may cause bfq_schedule_dispatch to be
|
||||
+ * invoked uselessly.
|
||||
*
|
||||
* As for implementing an exact solution, the
|
||||
- * bfq_finish_request hook, if defined, is probably
|
||||
- * invoked also on this request. So, by exploiting
|
||||
- * this hook, we could 1) increment rq_in_driver here,
|
||||
- * and 2) decrement it in bfq_finish_request. Such a
|
||||
- * solution would let the value of the counter be
|
||||
- * always accurate, but it would entail using an extra
|
||||
- * interface function. This cost seems higher than the
|
||||
- * benefit, being the frequency of non-elevator-private
|
||||
+ * bfq_finish_requeue_request hook, if defined, is
|
||||
+ * probably invoked also on this request. So, by
|
||||
+ * exploiting this hook, we could 1) increment
|
||||
+ * rq_in_driver here, and 2) decrement it in
|
||||
+ * bfq_finish_requeue_request. Such a solution would
|
||||
+ * let the value of the counter be always accurate,
|
||||
+ * but it would entail using an extra interface
|
||||
+ * function. This cost seems higher than the benefit,
|
||||
+ * being the frequency of non-elevator-private
|
||||
* requests very low.
|
||||
*/
|
||||
goto start_rq;
|
||||
@@ -4515,6 +4517,8 @@ static inline void bfq_update_insert_stats(struct request_queue *q,
|
||||
unsigned int cmd_flags) {}
|
||||
#endif
|
||||
|
||||
+static void bfq_prepare_request(struct request *rq, struct bio *bio);
|
||||
+
|
||||
static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
bool at_head)
|
||||
{
|
||||
@@ -4541,6 +4545,18 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
|
||||
else
|
||||
list_add_tail(&rq->queuelist, &bfqd->dispatch);
|
||||
} else {
|
||||
+ if (WARN_ON_ONCE(!bfqq)) {
|
||||
+ /*
|
||||
+ * This should never happen. Most likely rq is
|
||||
+ * a requeued regular request, being
|
||||
+ * re-inserted without being first
|
||||
+ * re-prepared. Do a prepare, to avoid
|
||||
+ * failure.
|
||||
+ */
|
||||
+ bfq_prepare_request(rq, rq->bio);
|
||||
+ bfqq = RQ_BFQQ(rq);
|
||||
+ }
|
||||
+
|
||||
idle_timer_disabled = __bfq_insert_request(bfqd, rq);
|
||||
/*
|
||||
* Update bfqq, because, if a queue merge has occurred
|
||||
@@ -4697,22 +4713,44 @@ static void bfq_completed_request(struct bfq_queue *bfqq, struct bfq_data *bfqd)
|
||||
bfq_schedule_dispatch(bfqd);
|
||||
}
|
||||
|
||||
-static void bfq_finish_request_body(struct bfq_queue *bfqq)
|
||||
+static void bfq_finish_requeue_request_body(struct bfq_queue *bfqq)
|
||||
{
|
||||
bfqq->allocated--;
|
||||
|
||||
bfq_put_queue(bfqq);
|
||||
}
|
||||
|
||||
-static void bfq_finish_request(struct request *rq)
|
||||
+/*
|
||||
+ * Handle either a requeue or a finish for rq. The things to do are
|
||||
+ * the same in both cases: all references to rq are to be dropped. In
|
||||
+ * particular, rq is considered completed from the point of view of
|
||||
+ * the scheduler.
|
||||
+ */
|
||||
+static void bfq_finish_requeue_request(struct request *rq)
|
||||
{
|
||||
- struct bfq_queue *bfqq;
|
||||
+ struct bfq_queue *bfqq = RQ_BFQQ(rq);
|
||||
struct bfq_data *bfqd;
|
||||
|
||||
- if (!rq->elv.icq)
|
||||
+ /*
|
||||
+ * Requeue and finish hooks are invoked in blk-mq without
|
||||
+ * checking whether the involved request is actually still
|
||||
+ * referenced in the scheduler. To handle this fact, the
|
||||
+ * following two checks make this function exit in case of
|
||||
+ * spurious invocations, for which there is nothing to do.
|
||||
+ *
|
||||
+ * First, check whether rq has nothing to do with an elevator.
|
||||
+ */
|
||||
+ if (unlikely(!(rq->rq_flags & RQF_ELVPRIV)))
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
+ * rq either is not associated with any icq, or is an already
|
||||
+ * requeued request that has not (yet) been re-inserted into
|
||||
+ * a bfq_queue.
|
||||
+ */
|
||||
+ if (!rq->elv.icq || !bfqq)
|
||||
return;
|
||||
|
||||
- bfqq = RQ_BFQQ(rq);
|
||||
bfqd = bfqq->bfqd;
|
||||
|
||||
if (rq->rq_flags & RQF_STARTED)
|
||||
@@ -4727,13 +4765,14 @@ static void bfq_finish_request(struct request *rq)
|
||||
spin_lock_irqsave(&bfqd->lock, flags);
|
||||
|
||||
bfq_completed_request(bfqq, bfqd);
|
||||
- bfq_finish_request_body(bfqq);
|
||||
+ bfq_finish_requeue_request_body(bfqq);
|
||||
|
||||
spin_unlock_irqrestore(&bfqd->lock, flags);
|
||||
} else {
|
||||
/*
|
||||
* Request rq may be still/already in the scheduler,
|
||||
- * in which case we need to remove it. And we cannot
|
||||
+ * in which case we need to remove it (this should
|
||||
+ * never happen in case of requeue). And we cannot
|
||||
* defer such a check and removal, to avoid
|
||||
* inconsistencies in the time interval from the end
|
||||
* of this function to the start of the deferred work.
|
||||
@@ -4748,9 +4787,26 @@ static void bfq_finish_request(struct request *rq)
|
||||
bfqg_stats_update_io_remove(bfqq_group(bfqq),
|
||||
rq->cmd_flags);
|
||||
}
|
||||
- bfq_finish_request_body(bfqq);
|
||||
+ bfq_finish_requeue_request_body(bfqq);
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * Reset private fields. In case of a requeue, this allows
|
||||
+ * this function to correctly do nothing if it is spuriously
|
||||
+ * invoked again on this same request (see the check at the
|
||||
+ * beginning of the function). Probably, a better general
|
||||
+ * design would be to prevent blk-mq from invoking the requeue
|
||||
+ * or finish hooks of an elevator, for a request that is not
|
||||
+ * referred by that elevator.
|
||||
+ *
|
||||
+ * Resetting the following fields would break the
|
||||
+ * request-insertion logic if rq is re-inserted into a bfq
|
||||
+ * internal queue, without a re-preparation. Here we assume
|
||||
+ * that re-insertions of requeued requests, without
|
||||
+ * re-preparation, can happen only for pass_through or at_head
|
||||
+ * requests (which are not re-inserted into bfq internal
|
||||
+ * queues).
|
||||
+ */
|
||||
rq->elv.priv[0] = NULL;
|
||||
rq->elv.priv[1] = NULL;
|
||||
}
|
||||
@@ -5426,7 +5482,8 @@ static struct elevator_type iosched_bfq_mq = {
|
||||
.ops.mq = {
|
||||
.limit_depth = bfq_limit_depth,
|
||||
.prepare_request = bfq_prepare_request,
|
||||
- .finish_request = bfq_finish_request,
|
||||
+ .requeue_request = bfq_finish_requeue_request,
|
||||
+ .finish_request = bfq_finish_requeue_request,
|
||||
.exit_icq = bfq_exit_icq,
|
||||
.insert_requests = bfq_insert_requests,
|
||||
.dispatch_request = bfq_dispatch_request,
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
From 52257ffbfcaf58d247b13fb148e27ed17c33e526 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@linaro.org>
|
||||
Date: Tue, 9 Jan 2018 10:27:58 +0100
|
||||
Subject: [PATCH] block, bfq: put async queues for root bfq groups too
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
For each pair [device for which bfq is selected as I/O scheduler,
|
||||
group in blkio/io], bfq maintains a corresponding bfq group. Each such
|
||||
bfq group contains a set of async queues, with each async queue
|
||||
created on demand, i.e., when some I/O request arrives for it. On
|
||||
creation, an async queue gets an extra reference, to make sure that
|
||||
the queue is not freed as long as its bfq group exists. Accordingly,
|
||||
to allow the queue to be freed after the group exited, this extra
|
||||
reference must released on group exit.
|
||||
|
||||
The above holds also for a bfq root group, i.e., for the bfq group
|
||||
corresponding to the root blkio/io root for a given device. Yet, by
|
||||
mistake, the references to the existing async queues of a root group
|
||||
are not released when the latter exits. This causes a memory leak when
|
||||
the instance of bfq for a given device exits. In a similar vein,
|
||||
bfqg_stats_xfer_dead is not executed for a root group.
|
||||
|
||||
This commit fixes bfq_pd_offline so that the latter executes the above
|
||||
missing operations for a root group too.
|
||||
|
||||
Reported-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Reported-by: Guoqing Jiang <gqjiang@suse.com>
|
||||
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Signed-off-by: Davide Ferrari <davideferrari8@gmail.com>
|
||||
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/bfq-cgroup.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
|
||||
index da1525ec4c87..d819dc77fe65 100644
|
||||
--- a/block/bfq-cgroup.c
|
||||
+++ b/block/bfq-cgroup.c
|
||||
@@ -775,10 +775,11 @@ static void bfq_pd_offline(struct blkg_policy_data *pd)
|
||||
unsigned long flags;
|
||||
int i;
|
||||
|
||||
+ spin_lock_irqsave(&bfqd->lock, flags);
|
||||
+
|
||||
if (!entity) /* root group */
|
||||
- return;
|
||||
+ goto put_async_queues;
|
||||
|
||||
- spin_lock_irqsave(&bfqd->lock, flags);
|
||||
/*
|
||||
* Empty all service_trees belonging to this group before
|
||||
* deactivating the group itself.
|
||||
@@ -809,6 +810,8 @@ static void bfq_pd_offline(struct blkg_policy_data *pd)
|
||||
}
|
||||
|
||||
__bfq_deactivate_entity(entity, false);
|
||||
+
|
||||
+put_async_queues:
|
||||
bfq_put_async_queues(bfqd, bfqg);
|
||||
|
||||
spin_unlock_irqrestore(&bfqd->lock, flags);
|
||||
--
|
||||
2.16.1
|
||||
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
From 5643205c6340b565a3be0fe0e7305dc4aa551c74 Mon Sep 17 00:00:00 2001
|
||||
From: Imre Deak <imre.deak@intel.com>
|
||||
Date: Wed, 29 Nov 2017 19:51:37 +0200
|
||||
Subject: drm/i915: Avoid PPS HW/SW state mismatch due to rounding
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We store a SW state of the t11_t12 timing in 100usec units but have to
|
||||
program it in 100msec as required by HW. The rounding used during
|
||||
programming means there will be a mismatch between the SW and HW states
|
||||
of this value triggering a "PPS state mismatch" error. Avoid this by
|
||||
storing the already rounded-up value in the SW state.
|
||||
|
||||
Note that we still calculate panel_power_cycle_delay with the finer
|
||||
100usec granularity to avoid any needless waits using that version of
|
||||
the delay.
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103903
|
||||
Cc: joks <joks@linux.pl>
|
||||
Signed-off-by: Imre Deak <imre.deak@intel.com>
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20171129175137.2889-1-imre.deak@intel.com
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_dp.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
(limited to 'drivers/gpu/drm/i915/intel_dp.c')
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index dd0b3a0..c603d4c 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -5355,6 +5355,12 @@ intel_dp_init_panel_power_sequencer(struct intel_dp *intel_dp)
|
||||
*/
|
||||
final->t8 = 1;
|
||||
final->t9 = 1;
|
||||
+
|
||||
+ /*
|
||||
+ * HW has only a 100msec granularity for t11_t12 so round it up
|
||||
+ * accordingly.
|
||||
+ */
|
||||
+ final->t11_t12 = roundup(final->t11_t12, 100 * 10);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
cgit v1.1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/allowedips.c 2018-02-02 20:01:07.000000000 +0200
|
||||
@@ -0,0 +1,326 @@
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/allowedips.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,327 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
+ * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
@@ -173,6 +173,7 @@
|
||||
+ return peer;
|
||||
+}
|
||||
+
|
||||
+__attribute__((nonnull(1)))
|
||||
+static inline bool node_placement(struct allowedips_node __rcu *trie, const u8 *key, u8 cidr, u8 bits, struct allowedips_node **rnode, struct mutex *lock)
|
||||
+{
|
||||
+ bool exact = false;
|
||||
@@ -327,8 +328,8 @@
|
||||
+}
|
||||
+
|
||||
+#include "selftest/allowedips.h"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/cookie.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/cookie.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,195 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -525,8 +526,8 @@
|
||||
+out:
|
||||
+ peer_put(entry->peer);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/device.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/device.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,421 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -949,8 +950,8 @@
|
||||
+#endif
|
||||
+ rcu_barrier_bh();
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/hashtables.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/hashtables.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,168 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -1120,8 +1121,8 @@
|
||||
+ rcu_read_unlock_bh();
|
||||
+ return entry;
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/main.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/main.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,69 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -1192,8 +1193,8 @@
|
||||
+MODULE_VERSION(WIREGUARD_VERSION);
|
||||
+MODULE_ALIAS_RTNL_LINK(KBUILD_MODNAME);
|
||||
+MODULE_ALIAS_GENL_FAMILY(WG_GENL_NAME);
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/netlink.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/netlink.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,517 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -1712,8 +1713,8 @@
|
||||
+{
|
||||
+ genl_unregister_family(&genl_family);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/noise.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/noise.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,635 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -2350,8 +2351,8 @@
|
||||
+ up_write(&handshake->lock);
|
||||
+ return false;
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/peer.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/peer.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,136 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -2489,8 +2490,8 @@
|
||||
+ list_for_each_entry_safe(peer, temp, &wg->peer_list, peer_list)
|
||||
+ peer_remove(peer);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/queueing.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/queueing.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,46 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -2538,8 +2539,8 @@
|
||||
+ WARN_ON(!ptr_ring_empty_bh(&queue->ring));
|
||||
+ ptr_ring_cleanup(&queue->ring, NULL);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/ratelimiter.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/ratelimiter.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,199 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -2740,8 +2741,8 @@
|
||||
+}
|
||||
+
|
||||
+#include "selftest/ratelimiter.h"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/receive.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/receive.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,490 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -3233,8 +3234,8 @@
|
||||
+err:
|
||||
+ dev_kfree_skb(skb);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/send.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/send.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,348 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -3584,9 +3585,9 @@
|
||||
+ */
|
||||
+ packet_send_queued_handshake_initiation(peer, false);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/socket.c 2018-02-02 20:01:07.000000000 +0200
|
||||
@@ -0,0 +1,391 @@
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/socket.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,393 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
+ * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
@@ -3752,6 +3753,8 @@
|
||||
+ ret = send4(peer->device, skb, &peer->endpoint, ds, &peer->endpoint_cache);
|
||||
+ else if (peer->endpoint.addr.sa_family == AF_INET6)
|
||||
+ ret = send6(peer->device, skb, &peer->endpoint, ds, &peer->endpoint_cache);
|
||||
+ else
|
||||
+ dev_kfree_skb(skb);
|
||||
+ if (likely(!ret))
|
||||
+ peer->tx_bytes += skb_len;
|
||||
+ read_unlock_bh(&peer->endpoint_lock);
|
||||
@@ -3978,8 +3981,8 @@
|
||||
+ sock_free(old4);
|
||||
+ sock_free(old6);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/timers.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/timers.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,199 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4180,8 +4183,8 @@
|
||||
+ del_timer_sync(&peer->timer_persistent_keepalive);
|
||||
+ flush_work(&peer->clear_peer_work);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/allowedips.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/allowedips.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,44 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4227,8 +4230,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_ALLOWEDIPS_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/cookie.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/cookie.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,52 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4282,8 +4285,8 @@
|
||||
+void cookie_message_consume(struct message_handshake_cookie *src, struct wireguard_device *wg);
|
||||
+
|
||||
+#endif /* _WG_COOKIE_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/device.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/device.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4349,8 +4352,8 @@
|
||||
+void device_uninit(void);
|
||||
+
|
||||
+#endif /* _WG_DEVICE_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/hashtables.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/hashtables.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,52 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4404,8 +4407,8 @@
|
||||
+struct index_hashtable_entry *index_hashtable_lookup(struct index_hashtable *table, const enum index_hashtable_type type_mask, const __le32 index);
|
||||
+
|
||||
+#endif /* _WG_HASHTABLES_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/messages.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/messages.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,129 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/*
|
||||
@@ -4536,8 +4539,8 @@
|
||||
+};
|
||||
+
|
||||
+#endif /* _WG_MESSAGES_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/netlink.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/netlink.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,12 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4551,8 +4554,8 @@
|
||||
+void genetlink_uninit(void);
|
||||
+
|
||||
+#endif /* _WG_NETLINK_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/noise.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/noise.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,117 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4671,8 +4674,8 @@
|
||||
+bool noise_handshake_begin_session(struct noise_handshake *handshake, struct noise_keypairs *keypairs);
|
||||
+
|
||||
+#endif /* _WG_NOISE_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/peer.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/peer.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,73 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4747,8 +4750,8 @@
|
||||
+struct wireguard_peer *peer_lookup_by_index(struct wireguard_device *wg, u32 index);
|
||||
+
|
||||
+#endif /* _WG_PEER_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/queueing.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/queueing.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,142 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4892,8 +4895,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_QUEUEING_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/ratelimiter.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/ratelimiter.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4914,8 +4917,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_RATELIMITER_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/socket.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/socket.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,35 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4952,8 +4955,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_SOCKET_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/timers.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/timers.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,21 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -4976,12 +4979,12 @@
|
||||
+void timers_any_authenticated_packet_traversal(struct wireguard_peer *peer);
|
||||
+
|
||||
+#endif /* _WG_TIMERS_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/version.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/version.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1 @@
|
||||
+#define WIREGUARD_VERSION "0.0.20180202"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/uapi/wireguard.h 2018-02-02 20:01:07.000000000 +0200
|
||||
+#define WIREGUARD_VERSION "0.0.20180218"
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/uapi/wireguard.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,182 @@
|
||||
+/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR MIT)
|
||||
+ *
|
||||
@@ -5165,8 +5168,8 @@
|
||||
+#define WGALLOWEDIP_A_MAX (__WGALLOWEDIP_A_LAST - 1)
|
||||
+
|
||||
+#endif /* _WG_UAPI_WIREGUARD_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/allowedips.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/allowedips.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,514 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -5682,8 +5685,8 @@
|
||||
+#undef init_peer
|
||||
+
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/blake2s.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/blake2s.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,559 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -6244,8 +6247,8 @@
|
||||
+ return success;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/chacha20poly1305.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/chacha20poly1305.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,333 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -6580,8 +6583,8 @@
|
||||
+ return success;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/counter.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/counter.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,92 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -6675,8 +6678,8 @@
|
||||
+ return success;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/curve25519.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/curve25519.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,103 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -6781,8 +6784,8 @@
|
||||
+ return success;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/poly1305.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/poly1305.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,1566 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -8277,7 +8280,7 @@
|
||||
+ bool success = true;
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
|
||||
+ for (i = 0; i < ARRAY_SIZE(poly1305_testvecs); ++i) {
|
||||
+ struct poly1305_ctx poly1305;
|
||||
+ const u8 *in = poly1305_testvecs[i].input.data;
|
||||
+ size_t inlen = poly1305_testvecs[i].input.size;
|
||||
@@ -8350,8 +8353,8 @@
|
||||
+ return success;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/selftest/ratelimiter.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/selftest/ratelimiter.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,157 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -8510,9 +8513,9 @@
|
||||
+ return ret;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s.c 2018-02-02 20:01:07.000000000 +0200
|
||||
@@ -0,0 +1,296 @@
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,294 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
+ * Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
@@ -8528,18 +8531,21 @@
|
||||
+#include <linux/bug.h>
|
||||
+#include <asm/unaligned.h>
|
||||
+
|
||||
+typedef struct {
|
||||
+ u8 digest_length;
|
||||
+ u8 key_length;
|
||||
+ u8 fanout;
|
||||
+ u8 depth;
|
||||
+ u32 leaf_length;
|
||||
+ u32 node_offset;
|
||||
+ u16 xof_length;
|
||||
+ u8 node_depth;
|
||||
+ u8 inner_length;
|
||||
+ u8 salt[8];
|
||||
+ u8 personal[8];
|
||||
+typedef union {
|
||||
+ struct {
|
||||
+ u8 digest_length;
|
||||
+ u8 key_length;
|
||||
+ u8 fanout;
|
||||
+ u8 depth;
|
||||
+ u32 leaf_length;
|
||||
+ u32 node_offset;
|
||||
+ u16 xof_length;
|
||||
+ u8 node_depth;
|
||||
+ u8 inner_length;
|
||||
+ u8 salt[8];
|
||||
+ u8 personal[8];
|
||||
+ };
|
||||
+ __le32 words[8];
|
||||
+} __packed blake2s_param;
|
||||
+
|
||||
+static const u32 blake2s_iv[8] = {
|
||||
@@ -8580,16 +8586,11 @@
|
||||
+
|
||||
+static inline void blake2s_init_param(struct blake2s_state *state, const blake2s_param *param)
|
||||
+{
|
||||
+ const __le32 *p;
|
||||
+ int i;
|
||||
+
|
||||
+ memset(state, 0, sizeof(struct blake2s_state));
|
||||
+ for (i = 0; i < 8; ++i)
|
||||
+ state->h[i] = blake2s_iv[i];
|
||||
+ p = (const __le32 *)param;
|
||||
+ /* IV XOR ParamBlock */
|
||||
+ for (i = 0; i < 8; ++i)
|
||||
+ state->h[i] ^= le32_to_cpu(p[i]);
|
||||
+ state->h[i] = blake2s_iv[i] ^ le32_to_cpu(param->words[i]);
|
||||
+}
|
||||
+
|
||||
+void blake2s_init(struct blake2s_state *state, const size_t outlen)
|
||||
@@ -8809,8 +8810,8 @@
|
||||
+}
|
||||
+
|
||||
+#include "../selftest/blake2s.h"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20poly1305.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20poly1305.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,852 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -9664,8 +9665,8 @@
|
||||
+
|
||||
+#include "../selftest/chacha20poly1305.h"
|
||||
+#include "../selftest/poly1305.h"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,81 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -9748,8 +9749,8 @@
|
||||
+}
|
||||
+
|
||||
+#include "../selftest/curve25519.h"
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,94 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -9845,8 +9846,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_BLAKE2S_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20poly1305.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20poly1305.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,93 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -9941,8 +9942,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_CHACHA20POLY1305_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-arm.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-arm.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,14 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -9958,8 +9959,8 @@
|
||||
+{
|
||||
+ curve25519_use_neon = elf_hwcap & HWCAP_NEON;
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-fiat32.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-fiat32.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,838 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -10799,8 +10800,8 @@
|
||||
+ memzero_explicit(&tmp1l, sizeof(tmp1l));
|
||||
+ memzero_explicit(&e, sizeof(e));
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -10827,8 +10828,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_CURVE25519_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-hacl64.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-hacl64.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,751 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -11581,8 +11582,8 @@
|
||||
+ }
|
||||
+ memzero_explicit(buf0, sizeof(buf0));
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-x86_64.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-x86_64.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,175 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -11759,8 +11760,8 @@
|
||||
+ memzero_explicit(x_51, sizeof(x_51));
|
||||
+ memzero_explicit(z_51, sizeof(z_51));
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s-x86_64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/blake2s-x86_64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,685 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -12447,8 +12448,8 @@
|
||||
+ retq
|
||||
+ENDPROC(blake2s_compress_avx512)
|
||||
+#endif /* CONFIG_AS_AVX512 */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-arm64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-arm64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,1940 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -14390,8 +14391,8 @@
|
||||
+.Labort_neon:
|
||||
+ ret
|
||||
+ENDPROC(chacha20_neon)
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-arm.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-arm.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,1471 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -15864,8 +15865,8 @@
|
||||
+.Lno_data_arm:
|
||||
+ ldmia sp!,{r4-r11,pc}
|
||||
+ENDPROC(chacha20_arm)
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-x86_64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/chacha20-x86_64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,2630 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -18497,8 +18498,8 @@
|
||||
+ENDPROC(chacha20_avx512vl)
|
||||
+
|
||||
+#endif /* CONFIG_AS_AVX512 */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-arm.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-arm.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,2110 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -20610,8 +20611,8 @@
|
||||
+ bx lr
|
||||
+ENDPROC(curve25519_neon)
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-x86_64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/curve25519-x86_64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,3261 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -23874,8 +23875,8 @@
|
||||
+ ret
|
||||
+ENDPROC(curve25519_sandy2x_ladder_base)
|
||||
+#endif /* CONFIG_AS_AVX */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-arm64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-arm64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,820 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -24697,8 +24698,8 @@
|
||||
+.align 5
|
||||
+.Lzeros:
|
||||
+.long 0,0,0,0,0,0,0,0
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-arm.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-arm.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,1115 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -25815,8 +25816,8 @@
|
||||
+.Lzeros:
|
||||
+.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-mips64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-mips64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,357 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -26175,8 +26176,8 @@
|
||||
+
|
||||
+ jr $31
|
||||
+.end poly1305_emit_mips
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-x86_64.S 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/crypto/poly1305-x86_64.S 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,2803 @@
|
||||
+/* SPDX-License-Identifier: OpenSSL OR (BSD-3-Clause OR GPL-2.0)
|
||||
+ *
|
||||
@@ -28981,8 +28982,8 @@
|
||||
+
|
||||
+ENDPROC(poly1305_blocks_avx512)
|
||||
+#endif /* CONFIG_AS_AVX512 */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/Makefile 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/Makefile 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,19 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0
|
||||
+#
|
||||
@@ -29003,8 +29004,8 @@
|
||||
+include $(src)/compat/Makefile.include
|
||||
+
|
||||
+obj-$(if $(KBUILD_EXTMOD),m,$(CONFIG_WIREGUARD)) := wireguard.o
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/Kconfig 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/Kconfig 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,30 @@
|
||||
+config WIREGUARD
|
||||
+ tristate "IP: WireGuard secure network tunnel"
|
||||
@@ -29036,12 +29037,12 @@
|
||||
+ only useful for debugging.
|
||||
+
|
||||
+ Say N here unless you know what you're doing.
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/simd/include/asm/simd.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/simd/include/asm/simd.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1 @@
|
||||
+#include <asm/i387.h>
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/udp_tunnel_partial_compat.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/udp_tunnel_partial_compat.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,226 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -29269,8 +29270,8 @@
|
||||
+#define udp_port_cfg udp_port_cfg_new
|
||||
+#define udp_sock_create(a, b, c) udp_sock_create_new(a, b, c)
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/include/net/udp_tunnel.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/include/net/udp_tunnel.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,94 @@
|
||||
+#ifndef _WG_NET_UDP_TUNNEL_H
|
||||
+#define _WG_NET_UDP_TUNNEL_H
|
||||
@@ -29366,8 +29367,8 @@
|
||||
+void udp_tunnel_sock_release(struct socket *sock);
|
||||
+
|
||||
+#endif /* _WG_NET_UDP_TUNNEL_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/udp_tunnel.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/udp_tunnel/udp_tunnel.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,385 @@
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/errno.h>
|
||||
@@ -29754,12 +29755,12 @@
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/fpu/include/asm/fpu/api.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/fpu/include/asm/fpu/api.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1 @@
|
||||
+#include <asm/i387.h>
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/checksum/checksum_partial_compat.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/checksum/checksum_partial_compat.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,208 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -29969,8 +29970,8 @@
|
||||
+ }
|
||||
+ return err;
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/Makefile.include 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/Makefile.include 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,70 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0
|
||||
+#
|
||||
@@ -30042,8 +30043,8 @@
|
||||
+ asflags-y += $(avx512_instr)
|
||||
+ endif
|
||||
+endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/siphash/siphash.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/siphash/siphash.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,539 @@
|
||||
+/* Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
+ *
|
||||
@@ -30584,8 +30585,8 @@
|
||||
+ HPOSTAMBLE
|
||||
+}
|
||||
+#endif
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/siphash/include/linux/siphash.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/siphash/include/linux/siphash.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,140 @@
|
||||
+/* Copyright (C) 2015-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
||||
+ *
|
||||
@@ -30727,8 +30728,8 @@
|
||||
+}
|
||||
+
|
||||
+#endif /* _WG_LINUX_SIPHASH_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/intel-family/include/asm/intel-family.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/intel-family/include/asm/intel-family.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,73 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+#ifndef _ASM_X86_INTEL_FAMILY_H
|
||||
@@ -30803,8 +30804,8 @@
|
||||
+#define INTEL_FAM6_XEON_PHI_KNM 0x85 /* Knights Mill */
|
||||
+
|
||||
+#endif /* _ASM_X86_INTEL_FAMILY_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/compat.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/compat.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,632 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
@@ -31438,8 +31439,8 @@
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _WG_COMPAT_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/ptr_ring/include/linux/ptr_ring.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/ptr_ring/include/linux/ptr_ring.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,640 @@
|
||||
+/*
|
||||
+ * Definitions for the 'struct ptr_ring' datastructure.
|
||||
@@ -32081,16 +32082,16 @@
|
||||
+}
|
||||
+
|
||||
+#endif /* _LINUX_PTR_RING_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/memneq/include.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/memneq/include.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,5 @@
|
||||
+extern noinline unsigned long __crypto_memneq(const void *a, const void *b, size_t size);
|
||||
+static inline int crypto_memneq(const void *a, const void *b, size_t size)
|
||||
+{
|
||||
+ return __crypto_memneq(a, b, size) != 0UL ? 1 : 0;
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/memneq/memneq.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/memneq/memneq.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,170 @@
|
||||
+/*
|
||||
+ * Constant-time equality testing of memory regions.
|
||||
@@ -32262,8 +32263,8 @@
|
||||
+}
|
||||
+
|
||||
+#endif /* __HAVE_ARCH_CRYPTO_MEMNEQ */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/dst_cache/dst_cache.c 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/dst_cache/dst_cache.c 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,175 @@
|
||||
+/*
|
||||
+ * net/core/dst_cache.c - dst entry cache
|
||||
@@ -32440,8 +32441,8 @@
|
||||
+
|
||||
+ free_percpu(dst_cache->cache);
|
||||
+}
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/dst_cache/include/net/dst_cache.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/dst_cache/include/net/dst_cache.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,97 @@
|
||||
+#ifndef _WG_NET_DST_CACHE_H
|
||||
+#define _WG_NET_DST_CACHE_H
|
||||
@@ -32540,8 +32541,8 @@
|
||||
+void dst_cache_destroy(struct dst_cache *dst_cache);
|
||||
+
|
||||
+#endif /* _WG_NET_DST_CACHE_H */
|
||||
--- /dev/null 2018-02-01 22:34:04.951119165 +0200
|
||||
+++ b/net/wireguard/compat/compat-asm.h 2018-02-02 20:01:07.000000000 +0200
|
||||
--- /dev/null 2018-02-18 13:06:28.903837808 +0200
|
||||
+++ b/net/wireguard/compat/compat-asm.h 2018-02-18 22:22:31.000000000 +0200
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0
|
||||
+ *
|
||||
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
From 69c64866ce072dea1d1e59a0d61e0f66c0dffb76 Mon Sep 17 00:00:00 2001
|
||||
From: Mohamed Ghannam <simo.ghannam@gmail.com>
|
||||
Date: Tue, 5 Dec 2017 20:58:35 +0000
|
||||
Subject: [PATCH] dccp: CVE-2017-8824: use-after-free in DCCP code
|
||||
|
||||
Whenever the sock object is in DCCP_CLOSED state,
|
||||
dccp_disconnect() must free dccps_hc_tx_ccid and
|
||||
dccps_hc_rx_ccid and set to NULL.
|
||||
|
||||
Signed-off-by: Mohamed Ghannam <simo.ghannam@gmail.com>
|
||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/dccp/proto.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
|
||||
index b68168fcc06a..9d43c1f40274 100644
|
||||
--- a/net/dccp/proto.c
|
||||
+++ b/net/dccp/proto.c
|
||||
@@ -259,6 +259,7 @@ int dccp_disconnect(struct sock *sk, int flags)
|
||||
{
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
+ struct dccp_sock *dp = dccp_sk(sk);
|
||||
int err = 0;
|
||||
const int old_state = sk->sk_state;
|
||||
|
||||
@@ -278,6 +279,10 @@ int dccp_disconnect(struct sock *sk, int flags)
|
||||
sk->sk_err = ECONNRESET;
|
||||
|
||||
dccp_clear_xmit_timers(sk);
|
||||
+ ccid_hc_rx_delete(dp->dccps_hc_rx_ccid, sk);
|
||||
+ ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
|
||||
+ dp->dccps_hc_rx_ccid = NULL;
|
||||
+ dp->dccps_hc_tx_ccid = NULL;
|
||||
|
||||
__skb_queue_purge(&sk->sk_receive_queue);
|
||||
__skb_queue_purge(&sk->sk_write_queue);
|
||||
--
|
||||
2.16.1
|
||||
|
||||
@@ -1,804 +0,0 @@
|
||||
diff --git a/.gitignore b/.gitignore
|
||||
index 0c39aa20b6ba..f6050b88e95b 100644
|
||||
--- a/.gitignore
|
||||
+++ b/.gitignore
|
||||
@@ -7,38 +7,40 @@
|
||||
# command after changing this file, to see if there are
|
||||
# any tracked files which get ignored after the change.
|
||||
#
|
||||
-# Normal rules
|
||||
+# Normal rules (sorted alphabetically)
|
||||
#
|
||||
.*
|
||||
+*.a
|
||||
+*.bin
|
||||
+*.bz2
|
||||
+*.c.[012]*.*
|
||||
+*.dtb
|
||||
+*.dtb.S
|
||||
+*.dwo
|
||||
+*.elf
|
||||
+*.gcno
|
||||
+*.gz
|
||||
+*.i
|
||||
+*.ko
|
||||
+*.ll
|
||||
+*.lst
|
||||
+*.lz4
|
||||
+*.lzma
|
||||
+*.lzo
|
||||
+*.mod.c
|
||||
*.o
|
||||
*.o.*
|
||||
-*.a
|
||||
+*.order
|
||||
+*.patch
|
||||
*.s
|
||||
-*.ko
|
||||
*.so
|
||||
*.so.dbg
|
||||
-*.mod.c
|
||||
-*.i
|
||||
-*.lst
|
||||
+*.su
|
||||
*.symtypes
|
||||
-*.order
|
||||
-*.elf
|
||||
-*.bin
|
||||
*.tar
|
||||
-*.gz
|
||||
-*.bz2
|
||||
-*.lzma
|
||||
*.xz
|
||||
-*.lz4
|
||||
-*.lzo
|
||||
-*.patch
|
||||
-*.gcno
|
||||
-*.ll
|
||||
-modules.builtin
|
||||
Module.symvers
|
||||
-*.dwo
|
||||
-*.su
|
||||
-*.c.[012]*.*
|
||||
+modules.builtin
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
@@ -53,6 +55,11 @@ Module.symvers
|
||||
/System.map
|
||||
/Module.markers
|
||||
|
||||
+#
|
||||
+# RPM spec file (make rpm-pkg)
|
||||
+#
|
||||
+/*.spec
|
||||
+
|
||||
#
|
||||
# Debian directory (make deb-pkg)
|
||||
#
|
||||
diff --git a/arch/arc/boot/.gitignore b/arch/arc/boot/.gitignore
|
||||
index 5246969a20c5..c4c5fd529c25 100644
|
||||
--- a/arch/arc/boot/.gitignore
|
||||
+++ b/arch/arc/boot/.gitignore
|
||||
@@ -1,2 +1 @@
|
||||
-*.dtb*
|
||||
uImage
|
||||
diff --git a/arch/arm/boot/.gitignore b/arch/arm/boot/.gitignore
|
||||
index 3c79f85975aa..ce1c5ff746e7 100644
|
||||
--- a/arch/arm/boot/.gitignore
|
||||
+++ b/arch/arm/boot/.gitignore
|
||||
@@ -3,4 +3,3 @@ zImage
|
||||
xipImage
|
||||
bootpImage
|
||||
uImage
|
||||
-*.dtb
|
||||
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
|
||||
index 0fcd82f01388..b8dc3b516f93 100644
|
||||
--- a/arch/arm/kernel/traps.c
|
||||
+++ b/arch/arm/kernel/traps.c
|
||||
@@ -790,7 +790,6 @@ void abort(void)
|
||||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
-EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
diff --git a/arch/arm64/boot/dts/.gitignore b/arch/arm64/boot/dts/.gitignore
|
||||
deleted file mode 100644
|
||||
index b60ed208c779..000000000000
|
||||
--- a/arch/arm64/boot/dts/.gitignore
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-*.dtb
|
||||
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c
|
||||
index cb79fba79d43..b88a8dd14933 100644
|
||||
--- a/arch/m32r/kernel/traps.c
|
||||
+++ b/arch/m32r/kernel/traps.c
|
||||
@@ -122,7 +122,6 @@ void abort(void)
|
||||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
-EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
diff --git a/arch/metag/boot/.gitignore b/arch/metag/boot/.gitignore
|
||||
index 2d6c0c160884..6c662ddb909a 100644
|
||||
--- a/arch/metag/boot/.gitignore
|
||||
+++ b/arch/metag/boot/.gitignore
|
||||
@@ -1,4 +1,3 @@
|
||||
vmlinux*
|
||||
uImage*
|
||||
ramdisk.*
|
||||
-*.dtb*
|
||||
diff --git a/arch/microblaze/boot/.gitignore b/arch/microblaze/boot/.gitignore
|
||||
index bf0459186027..679502d64a97 100644
|
||||
--- a/arch/microblaze/boot/.gitignore
|
||||
+++ b/arch/microblaze/boot/.gitignore
|
||||
@@ -1,3 +1,2 @@
|
||||
-*.dtb
|
||||
linux.bin*
|
||||
simpleImage.*
|
||||
diff --git a/arch/mips/boot/.gitignore b/arch/mips/boot/.gitignore
|
||||
index d3962cd5ce0c..a73d6e2c4f64 100644
|
||||
--- a/arch/mips/boot/.gitignore
|
||||
+++ b/arch/mips/boot/.gitignore
|
||||
@@ -5,4 +5,3 @@ zImage
|
||||
zImage.tmp
|
||||
calc_vmlinuz_load_addr
|
||||
uImage
|
||||
-*.dtb
|
||||
diff --git a/arch/nios2/boot/.gitignore b/arch/nios2/boot/.gitignore
|
||||
index 109279ca5a4d..64386a8dedd8 100644
|
||||
--- a/arch/nios2/boot/.gitignore
|
||||
+++ b/arch/nios2/boot/.gitignore
|
||||
@@ -1,2 +1 @@
|
||||
-*.dtb
|
||||
vmImage
|
||||
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore
|
||||
index 84774ccba1c2..f92d0530ceb1 100644
|
||||
--- a/arch/powerpc/boot/.gitignore
|
||||
+++ b/arch/powerpc/boot/.gitignore
|
||||
@@ -18,7 +18,6 @@ otheros.bld
|
||||
uImage
|
||||
cuImage.*
|
||||
dtbImage.*
|
||||
-*.dtb
|
||||
treeImage.*
|
||||
vmlinux.strip
|
||||
zImage
|
||||
diff --git a/arch/unicore32/kernel/traps.c b/arch/unicore32/kernel/traps.c
|
||||
index 5f25b39f04d4..c4ac6043ebb0 100644
|
||||
--- a/arch/unicore32/kernel/traps.c
|
||||
+++ b/arch/unicore32/kernel/traps.c
|
||||
@@ -298,7 +298,6 @@ void abort(void)
|
||||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
-EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
diff --git a/arch/xtensa/boot/.gitignore b/arch/xtensa/boot/.gitignore
|
||||
index be7655998b26..38177c7ebcab 100644
|
||||
--- a/arch/xtensa/boot/.gitignore
|
||||
+++ b/arch/xtensa/boot/.gitignore
|
||||
@@ -1,3 +1,2 @@
|
||||
uImage
|
||||
zImage.redboot
|
||||
-*.dtb
|
||||
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
|
||||
index f5f58a6eee5d..e339960dcac7 100644
|
||||
--- a/crypto/tcrypt.c
|
||||
+++ b/crypto/tcrypt.c
|
||||
@@ -221,11 +221,13 @@ static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
|
||||
}
|
||||
|
||||
sg_init_table(sg, np + 1);
|
||||
- np--;
|
||||
+ if (rem)
|
||||
+ np--;
|
||||
for (k = 0; k < np; k++)
|
||||
sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
|
||||
|
||||
- sg_set_buf(&sg[k + 1], xbuf[k], rem);
|
||||
+ if (rem)
|
||||
+ sg_set_buf(&sg[k + 1], xbuf[k], rem);
|
||||
}
|
||||
|
||||
static void test_aead_speed(const char *algo, int enc, unsigned int secs,
|
||||
diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c
|
||||
index 46768c056193..0c28d0b995cc 100644
|
||||
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c
|
||||
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c
|
||||
@@ -115,3 +115,6 @@ struct mtk_vcodec_ctx *mtk_vcodec_get_curr_ctx(struct mtk_vcodec_dev *dev)
|
||||
return ctx;
|
||||
}
|
||||
EXPORT_SYMBOL(mtk_vcodec_get_curr_ctx);
|
||||
+
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+MODULE_DESCRIPTION("Mediatek video codec driver");
|
||||
diff --git a/drivers/media/platform/soc_camera/soc_scale_crop.c b/drivers/media/platform/soc_camera/soc_scale_crop.c
|
||||
index 0116097c0c0f..092c73f24589 100644
|
||||
--- a/drivers/media/platform/soc_camera/soc_scale_crop.c
|
||||
+++ b/drivers/media/platform/soc_camera/soc_scale_crop.c
|
||||
@@ -419,3 +419,7 @@ void soc_camera_calc_client_output(struct soc_camera_device *icd,
|
||||
mf->height = soc_camera_shift_scale(rect->height, shift, scale_v);
|
||||
}
|
||||
EXPORT_SYMBOL(soc_camera_calc_client_output);
|
||||
+
|
||||
+MODULE_DESCRIPTION("soc-camera scaling-cropping functions");
|
||||
+MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
|
||||
index f7080d0ab874..46b0372dd032 100644
|
||||
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
|
||||
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
|
||||
@@ -3891,7 +3891,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
|
||||
struct list_head *head = &mbx->cmd_q;
|
||||
struct qlcnic_cmd_args *cmd = NULL;
|
||||
|
||||
- spin_lock(&mbx->queue_lock);
|
||||
+ spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
while (!list_empty(head)) {
|
||||
cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
|
||||
@@ -3902,7 +3902,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
|
||||
qlcnic_83xx_notify_cmd_completion(adapter, cmd);
|
||||
}
|
||||
|
||||
- spin_unlock(&mbx->queue_lock);
|
||||
+ spin_unlock_bh(&mbx->queue_lock);
|
||||
}
|
||||
|
||||
static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter)
|
||||
@@ -3938,12 +3938,12 @@ static void qlcnic_83xx_dequeue_mbx_cmd(struct qlcnic_adapter *adapter,
|
||||
{
|
||||
struct qlcnic_mailbox *mbx = adapter->ahw->mailbox;
|
||||
|
||||
- spin_lock(&mbx->queue_lock);
|
||||
+ spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
list_del(&cmd->list);
|
||||
mbx->num_cmds--;
|
||||
|
||||
- spin_unlock(&mbx->queue_lock);
|
||||
+ spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
qlcnic_83xx_notify_cmd_completion(adapter, cmd);
|
||||
}
|
||||
@@ -4008,7 +4008,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
|
||||
init_completion(&cmd->completion);
|
||||
cmd->rsp_opcode = QLC_83XX_MBX_RESPONSE_UNKNOWN;
|
||||
|
||||
- spin_lock(&mbx->queue_lock);
|
||||
+ spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
list_add_tail(&cmd->list, &mbx->cmd_q);
|
||||
mbx->num_cmds++;
|
||||
@@ -4016,7 +4016,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
|
||||
*timeout = cmd->total_cmds * QLC_83XX_MBX_TIMEOUT;
|
||||
queue_work(mbx->work_q, &mbx->work);
|
||||
|
||||
- spin_unlock(&mbx->queue_lock);
|
||||
+ spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -4112,15 +4112,15 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
|
||||
mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT;
|
||||
spin_unlock_irqrestore(&mbx->aen_lock, flags);
|
||||
|
||||
- spin_lock(&mbx->queue_lock);
|
||||
+ spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
if (list_empty(head)) {
|
||||
- spin_unlock(&mbx->queue_lock);
|
||||
+ spin_unlock_bh(&mbx->queue_lock);
|
||||
return;
|
||||
}
|
||||
cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
|
||||
|
||||
- spin_unlock(&mbx->queue_lock);
|
||||
+ spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
mbx_ops->encode_cmd(adapter, cmd);
|
||||
mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST);
|
||||
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
|
||||
index 958ff931e790..619a1b7281a0 100644
|
||||
--- a/drivers/net/ethernet/realtek/r8169.c
|
||||
+++ b/drivers/net/ethernet/realtek/r8169.c
|
||||
@@ -1388,7 +1388,7 @@ DECLARE_RTL_COND(rtl_ocp_tx_cond)
|
||||
{
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
|
||||
- return RTL_R8(IBISR0) & 0x02;
|
||||
+ return RTL_R8(IBISR0) & 0x20;
|
||||
}
|
||||
|
||||
static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
|
||||
@@ -1396,7 +1396,7 @@ static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
|
||||
RTL_W8(IBCR2, RTL_R8(IBCR2) & ~0x01);
|
||||
- rtl_msleep_loop_wait_low(tp, &rtl_ocp_tx_cond, 50, 2000);
|
||||
+ rtl_msleep_loop_wait_high(tp, &rtl_ocp_tx_cond, 50, 2000);
|
||||
RTL_W8(IBISR0, RTL_R8(IBISR0) | 0x20);
|
||||
RTL_W8(IBCR0, RTL_R8(IBCR0) & ~0x01);
|
||||
}
|
||||
diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
|
||||
index fc8f8bdf6579..056cb6093630 100644
|
||||
--- a/drivers/net/ethernet/rocker/rocker_main.c
|
||||
+++ b/drivers/net/ethernet/rocker/rocker_main.c
|
||||
@@ -2902,6 +2902,12 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
goto err_alloc_ordered_workqueue;
|
||||
}
|
||||
|
||||
+ err = rocker_probe_ports(rocker);
|
||||
+ if (err) {
|
||||
+ dev_err(&pdev->dev, "failed to probe ports\n");
|
||||
+ goto err_probe_ports;
|
||||
+ }
|
||||
+
|
||||
/* Only FIBs pointing to our own netdevs are programmed into
|
||||
* the device, so no need to pass a callback.
|
||||
*/
|
||||
@@ -2918,22 +2924,16 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
|
||||
rocker->hw.id = rocker_read64(rocker, SWITCH_ID);
|
||||
|
||||
- err = rocker_probe_ports(rocker);
|
||||
- if (err) {
|
||||
- dev_err(&pdev->dev, "failed to probe ports\n");
|
||||
- goto err_probe_ports;
|
||||
- }
|
||||
-
|
||||
dev_info(&pdev->dev, "Rocker switch with id %*phN\n",
|
||||
(int)sizeof(rocker->hw.id), &rocker->hw.id);
|
||||
|
||||
return 0;
|
||||
|
||||
-err_probe_ports:
|
||||
- unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
err_register_switchdev_notifier:
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
err_register_fib_notifier:
|
||||
+ rocker_remove_ports(rocker);
|
||||
+err_probe_ports:
|
||||
destroy_workqueue(rocker->rocker_owq);
|
||||
err_alloc_ordered_workqueue:
|
||||
free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
|
||||
@@ -2961,9 +2961,9 @@ static void rocker_remove(struct pci_dev *pdev)
|
||||
{
|
||||
struct rocker *rocker = pci_get_drvdata(pdev);
|
||||
|
||||
- rocker_remove_ports(rocker);
|
||||
unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
+ rocker_remove_ports(rocker);
|
||||
rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET);
|
||||
destroy_workqueue(rocker->rocker_owq);
|
||||
free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
|
||||
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
|
||||
index 2092febfcb42..8d9f02b7a71f 100644
|
||||
--- a/drivers/net/usb/qmi_wwan.c
|
||||
+++ b/drivers/net/usb/qmi_wwan.c
|
||||
@@ -1243,6 +1243,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
|
||||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
|
||||
{QMI_FIXED_INTF(0x2c7c, 0x0296, 4)}, /* Quectel BG96 */
|
||||
+ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0306, 4)}, /* Quectel EP06 Mini PCIe */
|
||||
|
||||
/* 4. Gobi 1000 devices */
|
||||
{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
|
||||
diff --git a/drivers/of/unittest-data/.gitignore b/drivers/of/unittest-data/.gitignore
|
||||
deleted file mode 100644
|
||||
index 4b3cf8b16de2..000000000000
|
||||
--- a/drivers/of/unittest-data/.gitignore
|
||||
+++ /dev/null
|
||||
@@ -1,2 +0,0 @@
|
||||
-testcases.dtb
|
||||
-testcases.dtb.S
|
||||
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
|
||||
index 5e7200f05873..c17ccb913fde 100644
|
||||
--- a/drivers/scsi/storvsc_drv.c
|
||||
+++ b/drivers/scsi/storvsc_drv.c
|
||||
@@ -1826,8 +1826,10 @@ static int storvsc_probe(struct hv_device *device,
|
||||
fc_host_node_name(host) = stor_device->node_name;
|
||||
fc_host_port_name(host) = stor_device->port_name;
|
||||
stor_device->rport = fc_remote_port_add(host, 0, &ids);
|
||||
- if (!stor_device->rport)
|
||||
+ if (!stor_device->rport) {
|
||||
+ ret = -ENOMEM;
|
||||
goto err_out3;
|
||||
+ }
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
|
||||
index bd15309ac5f1..082891dffd9d 100644
|
||||
--- a/drivers/vhost/net.c
|
||||
+++ b/drivers/vhost/net.c
|
||||
@@ -1212,6 +1212,7 @@ static long vhost_net_reset_owner(struct vhost_net *n)
|
||||
}
|
||||
vhost_net_stop(n, &tx_sock, &rx_sock);
|
||||
vhost_net_flush(n);
|
||||
+ vhost_dev_stop(&n->dev);
|
||||
vhost_dev_reset_owner(&n->dev, umem);
|
||||
vhost_net_vq_reset(n);
|
||||
done:
|
||||
diff --git a/kernel/exit.c b/kernel/exit.c
|
||||
index f6cad39f35df..e3a08761eb40 100644
|
||||
--- a/kernel/exit.c
|
||||
+++ b/kernel/exit.c
|
||||
@@ -1755,3 +1755,12 @@ COMPAT_SYSCALL_DEFINE5(waitid,
|
||||
return -EFAULT;
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+__weak void abort(void)
|
||||
+{
|
||||
+ BUG();
|
||||
+
|
||||
+ /* if that doesn't kill us, halt */
|
||||
+ panic("Oops failed to kill thread");
|
||||
+}
|
||||
+EXPORT_SYMBOL(abort);
|
||||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
|
||||
index 53f7c919b916..66e7efabf0a1 100644
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -5828,6 +5828,20 @@ void mem_cgroup_sk_alloc(struct sock *sk)
|
||||
if (!mem_cgroup_sockets_enabled)
|
||||
return;
|
||||
|
||||
+ /*
|
||||
+ * Socket cloning can throw us here with sk_memcg already
|
||||
+ * filled. It won't however, necessarily happen from
|
||||
+ * process context. So the test for root memcg given
|
||||
+ * the current task's memcg won't help us in this case.
|
||||
+ *
|
||||
+ * Respecting the original socket's memcg is a better
|
||||
+ * decision in this case.
|
||||
+ */
|
||||
+ if (sk->sk_memcg) {
|
||||
+ css_get(&sk->sk_memcg->css);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
rcu_read_lock();
|
||||
memcg = mem_cgroup_from_task(current);
|
||||
if (memcg == root_mem_cgroup)
|
||||
diff --git a/net/core/sock.c b/net/core/sock.c
|
||||
index 415f441c63b9..beb1e299fed3 100644
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -1677,16 +1677,13 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
|
||||
newsk->sk_dst_pending_confirm = 0;
|
||||
newsk->sk_wmem_queued = 0;
|
||||
newsk->sk_forward_alloc = 0;
|
||||
-
|
||||
- /* sk->sk_memcg will be populated at accept() time */
|
||||
- newsk->sk_memcg = NULL;
|
||||
-
|
||||
atomic_set(&newsk->sk_drops, 0);
|
||||
newsk->sk_send_head = NULL;
|
||||
newsk->sk_userlocks = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
|
||||
atomic_set(&newsk->sk_zckey, 0);
|
||||
|
||||
sock_reset_flag(newsk, SOCK_DONE);
|
||||
+ mem_cgroup_sk_alloc(newsk);
|
||||
cgroup_sk_alloc(&newsk->sk_cgrp_data);
|
||||
|
||||
rcu_read_lock();
|
||||
diff --git a/net/core/sock_reuseport.c b/net/core/sock_reuseport.c
|
||||
index 5eeb1d20cc38..676092d7bd81 100644
|
||||
--- a/net/core/sock_reuseport.c
|
||||
+++ b/net/core/sock_reuseport.c
|
||||
@@ -94,6 +94,16 @@ static struct sock_reuseport *reuseport_grow(struct sock_reuseport *reuse)
|
||||
return more_reuse;
|
||||
}
|
||||
|
||||
+static void reuseport_free_rcu(struct rcu_head *head)
|
||||
+{
|
||||
+ struct sock_reuseport *reuse;
|
||||
+
|
||||
+ reuse = container_of(head, struct sock_reuseport, rcu);
|
||||
+ if (reuse->prog)
|
||||
+ bpf_prog_destroy(reuse->prog);
|
||||
+ kfree(reuse);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* reuseport_add_sock - Add a socket to the reuseport group of another.
|
||||
* @sk: New socket to add to the group.
|
||||
@@ -102,7 +112,7 @@ static struct sock_reuseport *reuseport_grow(struct sock_reuseport *reuse)
|
||||
*/
|
||||
int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
||||
{
|
||||
- struct sock_reuseport *reuse;
|
||||
+ struct sock_reuseport *old_reuse, *reuse;
|
||||
|
||||
if (!rcu_access_pointer(sk2->sk_reuseport_cb)) {
|
||||
int err = reuseport_alloc(sk2);
|
||||
@@ -113,10 +123,13 @@ int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
||||
|
||||
spin_lock_bh(&reuseport_lock);
|
||||
reuse = rcu_dereference_protected(sk2->sk_reuseport_cb,
|
||||
- lockdep_is_held(&reuseport_lock)),
|
||||
- WARN_ONCE(rcu_dereference_protected(sk->sk_reuseport_cb,
|
||||
- lockdep_is_held(&reuseport_lock)),
|
||||
- "socket already in reuseport group");
|
||||
+ lockdep_is_held(&reuseport_lock));
|
||||
+ old_reuse = rcu_dereference_protected(sk->sk_reuseport_cb,
|
||||
+ lockdep_is_held(&reuseport_lock));
|
||||
+ if (old_reuse && old_reuse->num_socks != 1) {
|
||||
+ spin_unlock_bh(&reuseport_lock);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
|
||||
if (reuse->num_socks == reuse->max_socks) {
|
||||
reuse = reuseport_grow(reuse);
|
||||
@@ -134,19 +147,11 @@ int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
||||
|
||||
spin_unlock_bh(&reuseport_lock);
|
||||
|
||||
+ if (old_reuse)
|
||||
+ call_rcu(&old_reuse->rcu, reuseport_free_rcu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void reuseport_free_rcu(struct rcu_head *head)
|
||||
-{
|
||||
- struct sock_reuseport *reuse;
|
||||
-
|
||||
- reuse = container_of(head, struct sock_reuseport, rcu);
|
||||
- if (reuse->prog)
|
||||
- bpf_prog_destroy(reuse->prog);
|
||||
- kfree(reuse);
|
||||
-}
|
||||
-
|
||||
void reuseport_detach_sock(struct sock *sk)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
|
||||
index 013fed55b610..fbeb35ad804b 100644
|
||||
--- a/net/ipv4/igmp.c
|
||||
+++ b/net/ipv4/igmp.c
|
||||
@@ -386,7 +386,11 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
|
||||
pip->frag_off = htons(IP_DF);
|
||||
pip->ttl = 1;
|
||||
pip->daddr = fl4.daddr;
|
||||
+
|
||||
+ rcu_read_lock();
|
||||
pip->saddr = igmpv3_get_srcaddr(dev, &fl4);
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
pip->protocol = IPPROTO_IGMP;
|
||||
pip->tot_len = 0; /* filled in later */
|
||||
ip_select_ident(net, skb, NULL);
|
||||
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
|
||||
index b47a59cb3573..0cc08c512202 100644
|
||||
--- a/net/ipv4/inet_connection_sock.c
|
||||
+++ b/net/ipv4/inet_connection_sock.c
|
||||
@@ -475,7 +475,6 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern)
|
||||
}
|
||||
spin_unlock_bh(&queue->fastopenq.lock);
|
||||
}
|
||||
- mem_cgroup_sk_alloc(newsk);
|
||||
out:
|
||||
release_sock(sk);
|
||||
if (req)
|
||||
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
|
||||
index 2a65d806b562..fe11128d7df4 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -2379,6 +2379,12 @@ int tcp_disconnect(struct sock *sk, int flags)
|
||||
|
||||
WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
|
||||
|
||||
+ if (sk->sk_frag.page) {
|
||||
+ put_page(sk->sk_frag.page);
|
||||
+ sk->sk_frag.page = NULL;
|
||||
+ sk->sk_frag.offset = 0;
|
||||
+ }
|
||||
+
|
||||
sk->sk_error_report(sk);
|
||||
return err;
|
||||
}
|
||||
diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
index 8322f26e770e..25c5a0b60cfc 100644
|
||||
--- a/net/ipv4/tcp_bbr.c
|
||||
+++ b/net/ipv4/tcp_bbr.c
|
||||
@@ -481,7 +481,8 @@ static void bbr_advance_cycle_phase(struct sock *sk)
|
||||
|
||||
bbr->cycle_idx = (bbr->cycle_idx + 1) & (CYCLE_LEN - 1);
|
||||
bbr->cycle_mstamp = tp->delivered_mstamp;
|
||||
- bbr->pacing_gain = bbr_pacing_gain[bbr->cycle_idx];
|
||||
+ bbr->pacing_gain = bbr->lt_use_bw ? BBR_UNIT :
|
||||
+ bbr_pacing_gain[bbr->cycle_idx];
|
||||
}
|
||||
|
||||
/* Gain cycling: cycle pacing gain to converge to fair share of available bw. */
|
||||
@@ -490,8 +491,7 @@ static void bbr_update_cycle_phase(struct sock *sk,
|
||||
{
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
|
||||
- if ((bbr->mode == BBR_PROBE_BW) && !bbr->lt_use_bw &&
|
||||
- bbr_is_next_cycle_phase(sk, rs))
|
||||
+ if (bbr->mode == BBR_PROBE_BW && bbr_is_next_cycle_phase(sk, rs))
|
||||
bbr_advance_cycle_phase(sk);
|
||||
}
|
||||
|
||||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
|
||||
index c5318f5f6a14..6a76e41e6d51 100644
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -184,7 +184,8 @@ static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
|
||||
|
||||
static void addrconf_dad_start(struct inet6_ifaddr *ifp);
|
||||
static void addrconf_dad_work(struct work_struct *w);
|
||||
-static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id);
|
||||
+static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
|
||||
+ bool send_na);
|
||||
static void addrconf_dad_run(struct inet6_dev *idev);
|
||||
static void addrconf_rs_timer(unsigned long data);
|
||||
static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
|
||||
@@ -3825,12 +3826,17 @@ static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
|
||||
idev->cnf.accept_dad < 1) ||
|
||||
!(ifp->flags&IFA_F_TENTATIVE) ||
|
||||
ifp->flags & IFA_F_NODAD) {
|
||||
+ bool send_na = false;
|
||||
+
|
||||
+ if (ifp->flags & IFA_F_TENTATIVE &&
|
||||
+ !(ifp->flags & IFA_F_OPTIMISTIC))
|
||||
+ send_na = true;
|
||||
bump_id = ifp->flags & IFA_F_TENTATIVE;
|
||||
ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
|
||||
spin_unlock(&ifp->lock);
|
||||
read_unlock_bh(&idev->lock);
|
||||
|
||||
- addrconf_dad_completed(ifp, bump_id);
|
||||
+ addrconf_dad_completed(ifp, bump_id, send_na);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3959,16 +3965,21 @@ static void addrconf_dad_work(struct work_struct *w)
|
||||
}
|
||||
|
||||
if (ifp->dad_probes == 0) {
|
||||
+ bool send_na = false;
|
||||
+
|
||||
/*
|
||||
* DAD was successful
|
||||
*/
|
||||
|
||||
+ if (ifp->flags & IFA_F_TENTATIVE &&
|
||||
+ !(ifp->flags & IFA_F_OPTIMISTIC))
|
||||
+ send_na = true;
|
||||
bump_id = ifp->flags & IFA_F_TENTATIVE;
|
||||
ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
|
||||
spin_unlock(&ifp->lock);
|
||||
write_unlock_bh(&idev->lock);
|
||||
|
||||
- addrconf_dad_completed(ifp, bump_id);
|
||||
+ addrconf_dad_completed(ifp, bump_id, send_na);
|
||||
|
||||
goto out;
|
||||
}
|
||||
@@ -4006,7 +4017,8 @@ static bool ipv6_lonely_lladdr(struct inet6_ifaddr *ifp)
|
||||
return true;
|
||||
}
|
||||
|
||||
-static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
|
||||
+static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
|
||||
+ bool send_na)
|
||||
{
|
||||
struct net_device *dev = ifp->idev->dev;
|
||||
struct in6_addr lladdr;
|
||||
@@ -4038,6 +4050,16 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
|
||||
if (send_mld)
|
||||
ipv6_mc_dad_complete(ifp->idev);
|
||||
|
||||
+ /* send unsolicited NA if enabled */
|
||||
+ if (send_na &&
|
||||
+ (ifp->idev->cnf.ndisc_notify ||
|
||||
+ dev_net(dev)->ipv6.devconf_all->ndisc_notify)) {
|
||||
+ ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifp->addr,
|
||||
+ /*router=*/ !!ifp->idev->cnf.forwarding,
|
||||
+ /*solicited=*/ false, /*override=*/ true,
|
||||
+ /*inc_opt=*/ true);
|
||||
+ }
|
||||
+
|
||||
if (send_rs) {
|
||||
/*
|
||||
* If a host as already performed a random delay
|
||||
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
|
||||
index bcbd5f3bf8bd..9ccbf74deb99 100644
|
||||
--- a/net/ipv6/af_inet6.c
|
||||
+++ b/net/ipv6/af_inet6.c
|
||||
@@ -284,6 +284,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
struct net *net = sock_net(sk);
|
||||
__be32 v4addr = 0;
|
||||
unsigned short snum;
|
||||
+ bool saved_ipv6only;
|
||||
int addr_type = 0;
|
||||
int err = 0;
|
||||
|
||||
@@ -389,19 +390,21 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
if (!(addr_type & IPV6_ADDR_MULTICAST))
|
||||
np->saddr = addr->sin6_addr;
|
||||
|
||||
+ saved_ipv6only = sk->sk_ipv6only;
|
||||
+ if (addr_type != IPV6_ADDR_ANY && addr_type != IPV6_ADDR_MAPPED)
|
||||
+ sk->sk_ipv6only = 1;
|
||||
+
|
||||
/* Make sure we are allowed to bind here. */
|
||||
if ((snum || !inet->bind_address_no_port) &&
|
||||
sk->sk_prot->get_port(sk, snum)) {
|
||||
+ sk->sk_ipv6only = saved_ipv6only;
|
||||
inet_reset_saddr(sk);
|
||||
err = -EADDRINUSE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if (addr_type != IPV6_ADDR_ANY) {
|
||||
+ if (addr_type != IPV6_ADDR_ANY)
|
||||
sk->sk_userlocks |= SOCK_BINDADDR_LOCK;
|
||||
- if (addr_type != IPV6_ADDR_MAPPED)
|
||||
- sk->sk_ipv6only = 1;
|
||||
- }
|
||||
if (snum)
|
||||
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
||||
inet->inet_sport = htons(inet->inet_num);
|
||||
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
|
||||
index f5500f5444e9..e1060f28410d 100644
|
||||
--- a/net/ipv6/ip6mr.c
|
||||
+++ b/net/ipv6/ip6mr.c
|
||||
@@ -496,6 +496,7 @@ static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
||||
it->mrt = mrt;
|
||||
+ it->cache = NULL;
|
||||
return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1)
|
||||
: SEQ_START_TOKEN;
|
||||
}
|
||||
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
|
||||
index 266a530414d7..2a937c8d19e9 100644
|
||||
--- a/net/ipv6/ndisc.c
|
||||
+++ b/net/ipv6/ndisc.c
|
||||
@@ -558,6 +558,11 @@ static void ndisc_send_unsol_na(struct net_device *dev)
|
||||
|
||||
read_lock_bh(&idev->lock);
|
||||
list_for_each_entry(ifa, &idev->addr_list, if_list) {
|
||||
+ /* skip tentative addresses until dad completes */
|
||||
+ if (ifa->flags & IFA_F_TENTATIVE &&
|
||||
+ !(ifa->flags & IFA_F_OPTIMISTIC))
|
||||
+ continue;
|
||||
+
|
||||
ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr,
|
||||
/*router=*/ !!idev->cnf.forwarding,
|
||||
/*solicited=*/ false, /*override=*/ true,
|
||||
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
|
||||
index 34de8b953ecf..348af5b20618 100644
|
||||
--- a/scripts/package/Makefile
|
||||
+++ b/scripts/package/Makefile
|
||||
@@ -50,7 +50,6 @@ rpm-pkg rpm: FORCE
|
||||
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
|
||||
$(call cmd,src_tar,$(KERNELPATH),kernel.spec)
|
||||
+rpmbuild $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz
|
||||
- rm $(KERNELPATH).tar.gz kernel.spec
|
||||
|
||||
# binrpm-pkg
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -59,7 +58,8 @@ binrpm-pkg: FORCE
|
||||
$(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec
|
||||
+rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
|
||||
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec
|
||||
- rm binkernel.spec
|
||||
+
|
||||
+clean-files += $(objtree)/*.spec
|
||||
|
||||
# Deb target
|
||||
# ---------------------------------------------------------------------------
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
From: Aaron Ma <aaron.ma@canonical.com>
|
||||
Subject: [PATCH] platform/x86: ideapad-laptop: Increase timeout to wait for EC answer
|
||||
Date: Sun, 11 Feb 2018 17:18:49 +0800
|
||||
|
||||
Lenovo E41-20 needs more time than 100ms to read VPC,
|
||||
the funtion keys always failed responding.
|
||||
Increase timeout to get the value from VPC, then
|
||||
the funtion keys like mic mute key work well.
|
||||
|
||||
Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
|
||||
---
|
||||
drivers/platform/x86/ideapad-laptop.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
|
||||
index 5b6f18b18801..535199c9e6bc 100644
|
||||
--- a/drivers/platform/x86/ideapad-laptop.c
|
||||
+++ b/drivers/platform/x86/ideapad-laptop.c
|
||||
@@ -113,7 +113,7 @@ MODULE_PARM_DESC(no_bt_rfkill, "No rfkill for bluetooth.");
|
||||
/*
|
||||
* ACPI Helpers
|
||||
*/
|
||||
-#define IDEAPAD_EC_TIMEOUT (100) /* in ms */
|
||||
+#define IDEAPAD_EC_TIMEOUT (200) /* in ms */
|
||||
|
||||
static int read_method_int(acpi_handle handle, const char *method, int *val)
|
||||
{
|
||||
@@ -14,7 +14,6 @@
|
||||
###
|
||||
### Stable Queue
|
||||
###
|
||||
patch-4.14.19-rc1.patch
|
||||
|
||||
###
|
||||
### Arch x86
|
||||
@@ -39,11 +38,6 @@ x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch
|
||||
# slows down boot
|
||||
Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch
|
||||
|
||||
# Spectre mitigations
|
||||
x86-entry-64-Clear-extra-registers-beyond-syscall-ar.patch
|
||||
x86-entry-64-Clear-registers-for-exceptions-interrup.patch
|
||||
x86-entry-64-compat-Clear-registers-for-compat-sysca.patch
|
||||
|
||||
# Meltdown 32bit
|
||||
pti32bit-0001-x86-asm-offsets-Move-TSS_sp0-and-TSS_sp1-to-asm-offs.patch
|
||||
pti32bit-0002-x86-entry-32-Rename-TSS_sysenter_sp0-to-TSS_entry_st.patch
|
||||
@@ -77,6 +71,16 @@ pti32bit-0029-x86-ldt-Split-out-sanity-check-in-map_ldt_struct.patch
|
||||
pti32bit-0030-x86-ldt-Enable-LDT-user-mapping-for-PAE.patch
|
||||
pti32bit-0031-x86-pti-Allow-CONFIG_PAGE_TABLE_ISOLATION-for-x86_32.patch
|
||||
|
||||
# selected fixes from x86/pti
|
||||
x86-pti-0070-nospec-Kill-array_index_nospec_mask_check.patch
|
||||
x86-pti-0071-nospec-Allow-index-argument-to-have-const-qualified-.patch
|
||||
x86-pti-0072-nospec-Include-asm-barrier.h-dependency.patch
|
||||
x86-pti-0073-x86-microcode-Propagate-return-value-from-updating-f.patch
|
||||
x86-pti-0074-x86-CPU-Add-a-microcode-loader-callback.patch
|
||||
x86-pti-0075-x86-CPU-Check-CPU-feature-bits-after-microcode-upgra.patch
|
||||
x86-pti-0076-x86-entry-Reduce-the-code-footprint-of-the-idtentry-.patch
|
||||
x86-pti-0077-x86-entry-64-Use-xorl-for-faster-register-clearing.patch
|
||||
|
||||
###
|
||||
### Core
|
||||
###
|
||||
@@ -115,6 +119,9 @@ acpi-processor-M720SR-limit-to-C2.patch
|
||||
# backlight fixes
|
||||
ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch
|
||||
|
||||
# fixes resume on atleast Thinkpad X240
|
||||
acpi-ec-restore-polling-during-noirq-suspend_resume-phases.patch
|
||||
|
||||
###
|
||||
### Block
|
||||
###
|
||||
@@ -176,6 +183,8 @@ block-bfq-iosched-don-t-call-bfqg_and_blkg_put-for-CONFIG_.patch
|
||||
block-bfq-fix-occurrences-of-request-finish-method-s.patch
|
||||
block-bfq-limit-tags-for-writes-and-async-I-O.patch
|
||||
block-bfq-limit-sectors-served-with-interactive-weig.patch
|
||||
block-bfq-put-async-queues-for-root-bfq-groups-too.patch
|
||||
block-bfq-add-requeue-request-hook.patch
|
||||
|
||||
###
|
||||
### Char
|
||||
@@ -227,9 +236,6 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# i915
|
||||
gpu-drm-i915-Avoid-PPS-HW_SW-state-mismatch-due-to-rounding.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
###
|
||||
@@ -300,9 +306,6 @@ net-WireGuard.patch
|
||||
# net fixes
|
||||
net-tls-Correct-length-of-scatterlist-in-tls_sw_sendpage.patch
|
||||
|
||||
# CVE
|
||||
net-dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch
|
||||
|
||||
# silence message that gets reported as a bug
|
||||
net-netfilter-xt_addrtype-silence-BROADCAST-message.patch
|
||||
|
||||
@@ -323,6 +326,7 @@ platform-x86-shuttle-wmi-4.13-buildfix.patch
|
||||
|
||||
# ideapad-laptop
|
||||
platform-x86-ideapad-Add-IdeaPad-320-15IKB-to-no_hw_rfkill_list.patch
|
||||
platform-x86-ideapad-laptop-Increase-timeout-to-wait-for-ec-answer.patch
|
||||
|
||||
###
|
||||
### RTC
|
||||
@@ -365,6 +369,10 @@ usb-storage-unusual_devs-add-id-2.6.37-buildfix.patch
|
||||
# pwc driver name in /proc/bus/devices, /sys fix and "advertisement" removal
|
||||
media-usb-pwc-lie-in-proc-usb-devices.patch
|
||||
|
||||
###
|
||||
### Watchdog
|
||||
###
|
||||
|
||||
###
|
||||
### Video
|
||||
###
|
||||
@@ -421,6 +429,9 @@ video-mageia-logo.patch
|
||||
# add rtl8812 support (mga#21043)
|
||||
3rd-rtl8812au.patch
|
||||
|
||||
# add rtl8723de support (mga#22559)
|
||||
3rd-rtl8723de.patch
|
||||
|
||||
###
|
||||
### Security
|
||||
###
|
||||
|
||||
-76
@@ -1,76 +0,0 @@
|
||||
From 8e1eb3fa009aa7c0b944b3c8b26b07de0efb3200 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Mon, 5 Feb 2018 17:18:05 -0800
|
||||
Subject: [PATCH 1/3] x86/entry/64: Clear extra registers beyond syscall
|
||||
arguments, to reduce speculation attack surface
|
||||
|
||||
At entry userspace may have (maliciously) populated the extra registers
|
||||
outside the syscall calling convention with arbitrary values that could
|
||||
be useful in a speculative execution (Spectre style) attack.
|
||||
|
||||
Clear these registers to minimize the kernel's attack surface.
|
||||
|
||||
Note, this only clears the extra registers and not the unused
|
||||
registers for syscalls less than 6 arguments, since those registers are
|
||||
likely to be clobbered well before their values could be put to use
|
||||
under speculation.
|
||||
|
||||
Note, Linus found that the XOR instructions can be executed with
|
||||
minimized cost if interleaved with the PUSH instructions, and Ingo's
|
||||
analysis found that R10 and R11 should be included in the register
|
||||
clearing beyond the typical 'extra' syscall calling convention
|
||||
registers.
|
||||
|
||||
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Reported-by: Andi Kleen <ak@linux.intel.com>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Brian Gerst <brgerst@gmail.com>
|
||||
Cc: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Cc: H. Peter Anvin <hpa@zytor.com>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/151787988577.7847.16733592218894189003.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
[ Made small improvements to the changelog and the code comments. ]
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/entry/entry_64.S | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
|
||||
index c752abe89d80..065a71b90808 100644
|
||||
--- a/arch/x86/entry/entry_64.S
|
||||
+++ b/arch/x86/entry/entry_64.S
|
||||
@@ -235,13 +235,26 @@ GLOBAL(entry_SYSCALL_64_after_hwframe)
|
||||
pushq %r8 /* pt_regs->r8 */
|
||||
pushq %r9 /* pt_regs->r9 */
|
||||
pushq %r10 /* pt_regs->r10 */
|
||||
+ /*
|
||||
+ * Clear extra registers that a speculation attack might
|
||||
+ * otherwise want to exploit. Interleave XOR with PUSH
|
||||
+ * for better uop scheduling:
|
||||
+ */
|
||||
+ xorq %r10, %r10 /* nospec r10 */
|
||||
pushq %r11 /* pt_regs->r11 */
|
||||
+ xorq %r11, %r11 /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
+ xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp */
|
||||
+ xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq %r12 /* pt_regs->r12 */
|
||||
+ xorq %r12, %r12 /* nospec r12 */
|
||||
pushq %r13 /* pt_regs->r13 */
|
||||
+ xorq %r13, %r13 /* nospec r13 */
|
||||
pushq %r14 /* pt_regs->r14 */
|
||||
+ xorq %r14, %r14 /* nospec r14 */
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
+ xorq %r15, %r15 /* nospec r15 */
|
||||
UNWIND_HINT_REGS
|
||||
|
||||
TRACE_IRQS_OFF
|
||||
--
|
||||
2.16.1
|
||||
|
||||
-110
@@ -1,110 +0,0 @@
|
||||
From 3ac6d8c787b835b997eb23e43e09aa0895ef7d58 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Mon, 5 Feb 2018 17:18:11 -0800
|
||||
Subject: [PATCH 2/3] x86/entry/64: Clear registers for exceptions/interrupts,
|
||||
to reduce speculation attack surface
|
||||
|
||||
Clear the 'extra' registers on entering the 64-bit kernel for exceptions
|
||||
and interrupts. The common registers are not cleared since they are
|
||||
likely clobbered well before they can be exploited in a speculative
|
||||
execution attack.
|
||||
|
||||
Originally-From: Andi Kleen <ak@linux.intel.com>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Brian Gerst <brgerst@gmail.com>
|
||||
Cc: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Cc: H. Peter Anvin <hpa@zytor.com>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/151787989146.7847.15749181712358213254.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
[ Made small improvements to the changelog and the code comments. ]
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/entry/calling.h | 19 +++++++++++++++++++
|
||||
arch/x86/entry/entry_64.S | 6 +++++-
|
||||
2 files changed, 24 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
|
||||
index 3f48f695d5e6..f4b129d4af42 100644
|
||||
--- a/arch/x86/entry/calling.h
|
||||
+++ b/arch/x86/entry/calling.h
|
||||
@@ -147,6 +147,25 @@ For 32-bit we have the following conventions - kernel is built with
|
||||
UNWIND_HINT_REGS offset=\offset
|
||||
.endm
|
||||
|
||||
+ /*
|
||||
+ * Sanitize registers of values that a speculation attack
|
||||
+ * might otherwise want to exploit. The lower registers are
|
||||
+ * likely clobbered well before they could be put to use in
|
||||
+ * a speculative execution gadget:
|
||||
+ */
|
||||
+ .macro CLEAR_REGS_NOSPEC
|
||||
+ xorl %ebp, %ebp
|
||||
+ xorl %ebx, %ebx
|
||||
+ xorq %r8, %r8
|
||||
+ xorq %r9, %r9
|
||||
+ xorq %r10, %r10
|
||||
+ xorq %r11, %r11
|
||||
+ xorq %r12, %r12
|
||||
+ xorq %r13, %r13
|
||||
+ xorq %r14, %r14
|
||||
+ xorq %r15, %r15
|
||||
+ .endm
|
||||
+
|
||||
.macro POP_EXTRA_REGS
|
||||
popq %r15
|
||||
popq %r14
|
||||
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
|
||||
index 065a71b90808..9e48002b953b 100644
|
||||
--- a/arch/x86/entry/entry_64.S
|
||||
+++ b/arch/x86/entry/entry_64.S
|
||||
@@ -575,6 +575,7 @@ END(irq_entries_start)
|
||||
ALLOC_PT_GPREGS_ON_STACK
|
||||
SAVE_C_REGS
|
||||
SAVE_EXTRA_REGS
|
||||
+ CLEAR_REGS_NOSPEC
|
||||
ENCODE_FRAME_POINTER
|
||||
|
||||
testb $3, CS(%rsp)
|
||||
@@ -1133,6 +1134,7 @@ ENTRY(xen_failsafe_callback)
|
||||
ALLOC_PT_GPREGS_ON_STACK
|
||||
SAVE_C_REGS
|
||||
SAVE_EXTRA_REGS
|
||||
+ CLEAR_REGS_NOSPEC
|
||||
ENCODE_FRAME_POINTER
|
||||
jmp error_exit
|
||||
END(xen_failsafe_callback)
|
||||
@@ -1178,6 +1180,7 @@ ENTRY(paranoid_entry)
|
||||
cld
|
||||
SAVE_C_REGS 8
|
||||
SAVE_EXTRA_REGS 8
|
||||
+ CLEAR_REGS_NOSPEC
|
||||
ENCODE_FRAME_POINTER 8
|
||||
movl $1, %ebx
|
||||
movl $MSR_GS_BASE, %ecx
|
||||
@@ -1230,8 +1233,8 @@ ENTRY(error_entry)
|
||||
cld
|
||||
SAVE_C_REGS 8
|
||||
SAVE_EXTRA_REGS 8
|
||||
+ CLEAR_REGS_NOSPEC
|
||||
ENCODE_FRAME_POINTER 8
|
||||
- xorl %ebx, %ebx
|
||||
testb $3, CS+8(%rsp)
|
||||
jz .Lerror_kernelspace
|
||||
|
||||
@@ -1428,6 +1431,7 @@ ENTRY(nmi)
|
||||
pushq %r14 /* pt_regs->r14 */
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
UNWIND_HINT_REGS
|
||||
+ CLEAR_REGS_NOSPEC
|
||||
ENCODE_FRAME_POINTER
|
||||
|
||||
/*
|
||||
--
|
||||
2.16.1
|
||||
|
||||
-114
@@ -1,114 +0,0 @@
|
||||
From 6b8cf5cc9965673951f1ab3f0e3cf23d06e3e2ee Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Mon, 5 Feb 2018 17:18:17 -0800
|
||||
Subject: [PATCH 3/3] x86/entry/64/compat: Clear registers for compat syscalls,
|
||||
to reduce speculation attack surface
|
||||
|
||||
At entry userspace may have populated registers with values that could
|
||||
otherwise be useful in a speculative execution attack. Clear them to
|
||||
minimize the kernel's attack surface.
|
||||
|
||||
Originally-From: Andi Kleen <ak@linux.intel.com>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Brian Gerst <brgerst@gmail.com>
|
||||
Cc: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Cc: H. Peter Anvin <hpa@zytor.com>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/151787989697.7847.4083702787288600552.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
[ Made small improvements to the changelog. ]
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/entry/entry_64_compat.S | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
|
||||
index 98d5358e4041..fd65e016e413 100644
|
||||
--- a/arch/x86/entry/entry_64_compat.S
|
||||
+++ b/arch/x86/entry/entry_64_compat.S
|
||||
@@ -85,15 +85,25 @@ ENTRY(entry_SYSENTER_compat)
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
+ xorq %r8, %r8 /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
+ xorq %r9, %r9 /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
+ xorq %r10, %r10 /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
+ xorq %r11, %r11 /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
+ xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp (will be overwritten) */
|
||||
+ xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq $0 /* pt_regs->r12 = 0 */
|
||||
+ xorq %r12, %r12 /* nospec r12 */
|
||||
pushq $0 /* pt_regs->r13 = 0 */
|
||||
+ xorq %r13, %r13 /* nospec r13 */
|
||||
pushq $0 /* pt_regs->r14 = 0 */
|
||||
+ xorq %r14, %r14 /* nospec r14 */
|
||||
pushq $0 /* pt_regs->r15 = 0 */
|
||||
+ xorq %r15, %r15 /* nospec r15 */
|
||||
cld
|
||||
|
||||
/*
|
||||
@@ -214,15 +224,25 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe)
|
||||
pushq %rbp /* pt_regs->cx (stashed in bp) */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
+ xorq %r8, %r8 /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
+ xorq %r9, %r9 /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
+ xorq %r10, %r10 /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
+ xorq %r11, %r11 /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
+ xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp (will be overwritten) */
|
||||
+ xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq $0 /* pt_regs->r12 = 0 */
|
||||
+ xorq %r12, %r12 /* nospec r12 */
|
||||
pushq $0 /* pt_regs->r13 = 0 */
|
||||
+ xorq %r13, %r13 /* nospec r13 */
|
||||
pushq $0 /* pt_regs->r14 = 0 */
|
||||
+ xorq %r14, %r14 /* nospec r14 */
|
||||
pushq $0 /* pt_regs->r15 = 0 */
|
||||
+ xorq %r15, %r15 /* nospec r15 */
|
||||
|
||||
/*
|
||||
* User mode is traced as though IRQs are on, and SYSENTER
|
||||
@@ -338,15 +358,25 @@ ENTRY(entry_INT80_compat)
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
+ xorq %r8, %r8 /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
+ xorq %r9, %r9 /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
+ xorq %r10, %r10 /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
+ xorq %r11, %r11 /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
+ xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp */
|
||||
+ xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq %r12 /* pt_regs->r12 */
|
||||
+ xorq %r12, %r12 /* nospec r12 */
|
||||
pushq %r13 /* pt_regs->r13 */
|
||||
+ xorq %r13, %r13 /* nospec r13 */
|
||||
pushq %r14 /* pt_regs->r14 */
|
||||
+ xorq %r14, %r14 /* nospec r14 */
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
+ xorq %r15, %r15 /* nospec r15 */
|
||||
cld
|
||||
|
||||
/*
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
From 1d91c1d2c80cb70e2e553845e278b87a960c04da Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Fri, 16 Feb 2018 13:20:42 -0800
|
||||
Subject: [PATCH 70/77] nospec: Kill array_index_nospec_mask_check()
|
||||
|
||||
There are multiple problems with the dynamic sanity checking in
|
||||
array_index_nospec_mask_check():
|
||||
|
||||
* It causes unnecessary overhead in the 32-bit case since integer sized
|
||||
@index values will no longer cause the check to be compiled away like
|
||||
in the 64-bit case.
|
||||
|
||||
* In the 32-bit case it may trigger with user controllable input when
|
||||
the expectation is that should only trigger during development of new
|
||||
kernel enabling.
|
||||
|
||||
* The macro reuses the input parameter in multiple locations which is
|
||||
broken if someone passes an expression like 'index++' to
|
||||
array_index_nospec().
|
||||
|
||||
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Will Deacon <will.deacon@arm.com>
|
||||
Cc: linux-arch@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/151881604278.17395.6605847763178076520.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
include/linux/nospec.h | 22 +---------------------
|
||||
1 file changed, 1 insertion(+), 21 deletions(-)
|
||||
|
||||
diff --git a/include/linux/nospec.h b/include/linux/nospec.h
|
||||
index fbc98e2c8228..d6701e34424f 100644
|
||||
--- a/include/linux/nospec.h
|
||||
+++ b/include/linux/nospec.h
|
||||
@@ -29,26 +29,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
|
||||
}
|
||||
#endif
|
||||
|
||||
-/*
|
||||
- * Warn developers about inappropriate array_index_nospec() usage.
|
||||
- *
|
||||
- * Even if the CPU speculates past the WARN_ONCE branch, the
|
||||
- * sign bit of @index is taken into account when generating the
|
||||
- * mask.
|
||||
- *
|
||||
- * This warning is compiled out when the compiler can infer that
|
||||
- * @index and @size are less than LONG_MAX.
|
||||
- */
|
||||
-#define array_index_mask_nospec_check(index, size) \
|
||||
-({ \
|
||||
- if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, \
|
||||
- "array_index_nospec() limited to range of [0, LONG_MAX]\n")) \
|
||||
- _mask = 0; \
|
||||
- else \
|
||||
- _mask = array_index_mask_nospec(index, size); \
|
||||
- _mask; \
|
||||
-})
|
||||
-
|
||||
/*
|
||||
* array_index_nospec - sanitize an array index after a bounds check
|
||||
*
|
||||
@@ -67,7 +47,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
|
||||
({ \
|
||||
typeof(index) _i = (index); \
|
||||
typeof(size) _s = (size); \
|
||||
- unsigned long _mask = array_index_mask_nospec_check(_i, _s); \
|
||||
+ unsigned long _mask = array_index_mask_nospec(_i, _s); \
|
||||
\
|
||||
BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \
|
||||
BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
From b98c6a160a057d5686a8c54c79cc6c8c94a7d0c8 Mon Sep 17 00:00:00 2001
|
||||
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
|
||||
Date: Fri, 16 Feb 2018 13:20:48 -0800
|
||||
Subject: [PATCH 71/77] nospec: Allow index argument to have const-qualified
|
||||
type
|
||||
|
||||
The last expression in a statement expression need not be a bare
|
||||
variable, quoting gcc docs
|
||||
|
||||
The last thing in the compound statement should be an expression
|
||||
followed by a semicolon; the value of this subexpression serves as the
|
||||
value of the entire construct.
|
||||
|
||||
and we already use that in e.g. the min/max macros which end with a
|
||||
ternary expression.
|
||||
|
||||
This way, we can allow index to have const-qualified type, which will in
|
||||
some cases avoid the need for introducing a local copy of index of
|
||||
non-const qualified type. That, in turn, can prevent readers not
|
||||
familiar with the internals of array_index_nospec from wondering about
|
||||
the seemingly redundant extra variable, and I think that's worthwhile
|
||||
considering how confusing the whole _nospec business is.
|
||||
|
||||
The expression _i&_mask has type unsigned long (since that is the type
|
||||
of _mask, and the BUILD_BUG_ONs guarantee that _i will get promoted to
|
||||
that), so in order not to change the type of the whole expression, add
|
||||
a cast back to typeof(_i).
|
||||
|
||||
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Will Deacon <will.deacon@arm.com>
|
||||
Cc: linux-arch@vger.kernel.org
|
||||
Cc: stable@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/151881604837.17395.10812767547837568328.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
include/linux/nospec.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/linux/nospec.h b/include/linux/nospec.h
|
||||
index d6701e34424f..172a19dc35ab 100644
|
||||
--- a/include/linux/nospec.h
|
||||
+++ b/include/linux/nospec.h
|
||||
@@ -52,7 +52,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index,
|
||||
BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \
|
||||
BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
|
||||
\
|
||||
- _i &= _mask; \
|
||||
- _i; \
|
||||
+ (typeof(_i)) (_i & _mask); \
|
||||
})
|
||||
#endif /* _LINUX_NOSPEC_H */
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
From eb6174f6d1be16b19cfa43dac296bfed003ce1a6 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Fri, 16 Feb 2018 13:20:54 -0800
|
||||
Subject: [PATCH 72/77] nospec: Include <asm/barrier.h> dependency
|
||||
|
||||
The nospec.h header expects the per-architecture header file
|
||||
<asm/barrier.h> to optionally define array_index_mask_nospec(). Include
|
||||
that dependency to prevent inadvertent fallback to the default
|
||||
array_index_mask_nospec() implementation.
|
||||
|
||||
The default implementation may not provide a full mitigation
|
||||
on architectures that perform data value speculation.
|
||||
|
||||
Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Will Deacon <will.deacon@arm.com>
|
||||
Cc: linux-arch@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/151881605404.17395.1341935530792574707.stgit@dwillia2-desk3.amr.corp.intel.com
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
include/linux/nospec.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/include/linux/nospec.h b/include/linux/nospec.h
|
||||
index 172a19dc35ab..e791ebc65c9c 100644
|
||||
--- a/include/linux/nospec.h
|
||||
+++ b/include/linux/nospec.h
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#ifndef _LINUX_NOSPEC_H
|
||||
#define _LINUX_NOSPEC_H
|
||||
+#include <asm/barrier.h>
|
||||
|
||||
/**
|
||||
* array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+235
@@ -0,0 +1,235 @@
|
||||
From 3f1f576a195aa266813cbd4ca70291deb61e0129 Mon Sep 17 00:00:00 2001
|
||||
From: Borislav Petkov <bp@suse.de>
|
||||
Date: Fri, 16 Feb 2018 12:26:38 +0100
|
||||
Subject: [PATCH 73/77] x86/microcode: Propagate return value from updating
|
||||
functions
|
||||
|
||||
... so that callers can know when microcode was updated and act
|
||||
accordingly.
|
||||
|
||||
Tested-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/20180216112640.11554-2-bp@alien8.de
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/include/asm/microcode.h | 9 +++++++--
|
||||
arch/x86/kernel/cpu/microcode/amd.c | 10 +++++-----
|
||||
arch/x86/kernel/cpu/microcode/core.c | 33 +++++++++++++++++----------------
|
||||
arch/x86/kernel/cpu/microcode/intel.c | 10 +++++-----
|
||||
4 files changed, 34 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
|
||||
index 55520cec8b27..7fb1047d61c7 100644
|
||||
--- a/arch/x86/include/asm/microcode.h
|
||||
+++ b/arch/x86/include/asm/microcode.h
|
||||
@@ -37,7 +37,12 @@ struct cpu_signature {
|
||||
|
||||
struct device;
|
||||
|
||||
-enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };
|
||||
+enum ucode_state {
|
||||
+ UCODE_OK = 0,
|
||||
+ UCODE_UPDATED,
|
||||
+ UCODE_NFOUND,
|
||||
+ UCODE_ERROR,
|
||||
+};
|
||||
|
||||
struct microcode_ops {
|
||||
enum ucode_state (*request_microcode_user) (int cpu,
|
||||
@@ -54,7 +59,7 @@ struct microcode_ops {
|
||||
* are being called.
|
||||
* See also the "Synchronization" section in microcode_core.c.
|
||||
*/
|
||||
- int (*apply_microcode) (int cpu);
|
||||
+ enum ucode_state (*apply_microcode) (int cpu);
|
||||
int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
|
||||
};
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
|
||||
index 330b8462d426..a998e1a7d46f 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/amd.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/amd.c
|
||||
@@ -498,7 +498,7 @@ static unsigned int verify_patch_size(u8 family, u32 patch_size,
|
||||
return patch_size;
|
||||
}
|
||||
|
||||
-static int apply_microcode_amd(int cpu)
|
||||
+static enum ucode_state apply_microcode_amd(int cpu)
|
||||
{
|
||||
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
||||
struct microcode_amd *mc_amd;
|
||||
@@ -512,7 +512,7 @@ static int apply_microcode_amd(int cpu)
|
||||
|
||||
p = find_patch(cpu);
|
||||
if (!p)
|
||||
- return 0;
|
||||
+ return UCODE_NFOUND;
|
||||
|
||||
mc_amd = p->data;
|
||||
uci->mc = p->data;
|
||||
@@ -523,13 +523,13 @@ static int apply_microcode_amd(int cpu)
|
||||
if (rev >= mc_amd->hdr.patch_id) {
|
||||
c->microcode = rev;
|
||||
uci->cpu_sig.rev = rev;
|
||||
- return 0;
|
||||
+ return UCODE_OK;
|
||||
}
|
||||
|
||||
if (__apply_microcode_amd(mc_amd)) {
|
||||
pr_err("CPU%d: update failed for patch_level=0x%08x\n",
|
||||
cpu, mc_amd->hdr.patch_id);
|
||||
- return -1;
|
||||
+ return UCODE_ERROR;
|
||||
}
|
||||
pr_info("CPU%d: new patch_level=0x%08x\n", cpu,
|
||||
mc_amd->hdr.patch_id);
|
||||
@@ -537,7 +537,7 @@ static int apply_microcode_amd(int cpu)
|
||||
uci->cpu_sig.rev = mc_amd->hdr.patch_id;
|
||||
c->microcode = mc_amd->hdr.patch_id;
|
||||
|
||||
- return 0;
|
||||
+ return UCODE_UPDATED;
|
||||
}
|
||||
|
||||
static int install_equiv_cpu_table(const u8 *buf)
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
|
||||
index 319dd65f98a2..6fdaf7cf3182 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/core.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/core.c
|
||||
@@ -374,7 +374,7 @@ static int collect_cpu_info(int cpu)
|
||||
}
|
||||
|
||||
struct apply_microcode_ctx {
|
||||
- int err;
|
||||
+ enum ucode_state err;
|
||||
};
|
||||
|
||||
static void apply_microcode_local(void *arg)
|
||||
@@ -489,31 +489,29 @@ static void __exit microcode_dev_exit(void)
|
||||
/* fake device for request_firmware */
|
||||
static struct platform_device *microcode_pdev;
|
||||
|
||||
-static int reload_for_cpu(int cpu)
|
||||
+static enum ucode_state reload_for_cpu(int cpu)
|
||||
{
|
||||
struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
|
||||
enum ucode_state ustate;
|
||||
- int err = 0;
|
||||
|
||||
if (!uci->valid)
|
||||
- return err;
|
||||
+ return UCODE_OK;
|
||||
|
||||
ustate = microcode_ops->request_microcode_fw(cpu, µcode_pdev->dev, true);
|
||||
- if (ustate == UCODE_OK)
|
||||
- apply_microcode_on_target(cpu);
|
||||
- else
|
||||
- if (ustate == UCODE_ERROR)
|
||||
- err = -EINVAL;
|
||||
- return err;
|
||||
+ if (ustate != UCODE_OK)
|
||||
+ return ustate;
|
||||
+
|
||||
+ return apply_microcode_on_target(cpu);
|
||||
}
|
||||
|
||||
static ssize_t reload_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
+ enum ucode_state tmp_ret = UCODE_OK;
|
||||
unsigned long val;
|
||||
+ ssize_t ret = 0;
|
||||
int cpu;
|
||||
- ssize_t ret = 0, tmp_ret;
|
||||
|
||||
ret = kstrtoul(buf, 0, &val);
|
||||
if (ret)
|
||||
@@ -526,15 +524,18 @@ static ssize_t reload_store(struct device *dev,
|
||||
mutex_lock(µcode_mutex);
|
||||
for_each_online_cpu(cpu) {
|
||||
tmp_ret = reload_for_cpu(cpu);
|
||||
- if (tmp_ret != 0)
|
||||
+ if (tmp_ret > UCODE_NFOUND) {
|
||||
pr_warn("Error reloading microcode on CPU %d\n", cpu);
|
||||
|
||||
- /* save retval of the first encountered reload error */
|
||||
- if (!ret)
|
||||
- ret = tmp_ret;
|
||||
+ /* set retval for the first encountered reload error */
|
||||
+ if (!ret)
|
||||
+ ret = -EINVAL;
|
||||
+ }
|
||||
}
|
||||
- if (!ret)
|
||||
+
|
||||
+ if (!ret && tmp_ret == UCODE_UPDATED)
|
||||
perf_check_microcode();
|
||||
+
|
||||
mutex_unlock(µcode_mutex);
|
||||
put_online_cpus();
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
|
||||
index a15db2b4e0d6..923054a6b760 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/intel.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/intel.c
|
||||
@@ -772,7 +772,7 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int apply_microcode_intel(int cpu)
|
||||
+static enum ucode_state apply_microcode_intel(int cpu)
|
||||
{
|
||||
struct microcode_intel *mc;
|
||||
struct ucode_cpu_info *uci;
|
||||
@@ -782,7 +782,7 @@ static int apply_microcode_intel(int cpu)
|
||||
|
||||
/* We should bind the task to the CPU */
|
||||
if (WARN_ON(raw_smp_processor_id() != cpu))
|
||||
- return -1;
|
||||
+ return UCODE_ERROR;
|
||||
|
||||
uci = ucode_cpu_info + cpu;
|
||||
mc = uci->mc;
|
||||
@@ -790,7 +790,7 @@ static int apply_microcode_intel(int cpu)
|
||||
/* Look for a newer patch in our cache: */
|
||||
mc = find_patch(uci);
|
||||
if (!mc)
|
||||
- return 0;
|
||||
+ return UCODE_NFOUND;
|
||||
}
|
||||
|
||||
/* write microcode via MSR 0x79 */
|
||||
@@ -801,7 +801,7 @@ static int apply_microcode_intel(int cpu)
|
||||
if (rev != mc->hdr.rev) {
|
||||
pr_err("CPU%d update to revision 0x%x failed\n",
|
||||
cpu, mc->hdr.rev);
|
||||
- return -1;
|
||||
+ return UCODE_ERROR;
|
||||
}
|
||||
|
||||
if (rev != prev_rev) {
|
||||
@@ -818,7 +818,7 @@ static int apply_microcode_intel(int cpu)
|
||||
uci->cpu_sig.rev = rev;
|
||||
c->microcode = rev;
|
||||
|
||||
- return 0;
|
||||
+ return UCODE_UPDATED;
|
||||
}
|
||||
|
||||
static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
From 1008c52c09dcb23d93f8e0ea83a6246265d2cce0 Mon Sep 17 00:00:00 2001
|
||||
From: Borislav Petkov <bp@suse.de>
|
||||
Date: Fri, 16 Feb 2018 12:26:39 +0100
|
||||
Subject: [PATCH 74/77] x86/CPU: Add a microcode loader callback
|
||||
|
||||
Add a callback function which the microcode loader calls when microcode
|
||||
has been updated to a newer revision. Do the callback only when no error
|
||||
was encountered during loading.
|
||||
|
||||
Tested-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/20180216112640.11554-3-bp@alien8.de
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/include/asm/processor.h | 1 +
|
||||
arch/x86/kernel/cpu/common.c | 10 ++++++++++
|
||||
arch/x86/kernel/cpu/microcode/core.c | 8 ++++++--
|
||||
3 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
|
||||
index 1bd9ed87606f..b0ccd4847a58 100644
|
||||
--- a/arch/x86/include/asm/processor.h
|
||||
+++ b/arch/x86/include/asm/processor.h
|
||||
@@ -977,4 +977,5 @@ bool xen_set_default_idle(void);
|
||||
|
||||
void stop_this_cpu(void *dummy);
|
||||
void df_debug(struct pt_regs *regs, long error_code);
|
||||
+void microcode_check(void);
|
||||
#endif /* _ASM_X86_PROCESSOR_H */
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index 824aee0117bb..84f1cd88608b 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -1749,3 +1749,13 @@ static int __init init_cpu_syscore(void)
|
||||
return 0;
|
||||
}
|
||||
core_initcall(init_cpu_syscore);
|
||||
+
|
||||
+/*
|
||||
+ * The microcode loader calls this upon late microcode load to recheck features,
|
||||
+ * only when microcode has been updated. Caller holds microcode_mutex and CPU
|
||||
+ * hotplug lock.
|
||||
+ */
|
||||
+void microcode_check(void)
|
||||
+{
|
||||
+ perf_check_microcode();
|
||||
+}
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
|
||||
index 6fdaf7cf3182..aa1b9a422f2b 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/core.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/core.c
|
||||
@@ -509,6 +509,7 @@ static ssize_t reload_store(struct device *dev,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
enum ucode_state tmp_ret = UCODE_OK;
|
||||
+ bool do_callback = false;
|
||||
unsigned long val;
|
||||
ssize_t ret = 0;
|
||||
int cpu;
|
||||
@@ -531,10 +532,13 @@ static ssize_t reload_store(struct device *dev,
|
||||
if (!ret)
|
||||
ret = -EINVAL;
|
||||
}
|
||||
+
|
||||
+ if (tmp_ret == UCODE_UPDATED)
|
||||
+ do_callback = true;
|
||||
}
|
||||
|
||||
- if (!ret && tmp_ret == UCODE_UPDATED)
|
||||
- perf_check_microcode();
|
||||
+ if (!ret && do_callback)
|
||||
+ microcode_check();
|
||||
|
||||
mutex_unlock(µcode_mutex);
|
||||
put_online_cpus();
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
From 42ca8082e260dcfd8afa2afa6ec1940b9d41724c Mon Sep 17 00:00:00 2001
|
||||
From: Borislav Petkov <bp@suse.de>
|
||||
Date: Fri, 16 Feb 2018 12:26:40 +0100
|
||||
Subject: [PATCH 75/77] x86/CPU: Check CPU feature bits after microcode upgrade
|
||||
|
||||
With some microcode upgrades, new CPUID features can become visible on
|
||||
the CPU. Check what the kernel has mirrored now and issue a warning
|
||||
hinting at possible things the user/admin can do to make use of the
|
||||
newly visible features.
|
||||
|
||||
Originally-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Tested-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/20180216112640.11554-4-bp@alien8.de
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/kernel/cpu/common.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index 84f1cd88608b..348cf4821240 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -1757,5 +1757,25 @@ core_initcall(init_cpu_syscore);
|
||||
*/
|
||||
void microcode_check(void)
|
||||
{
|
||||
+ struct cpuinfo_x86 info;
|
||||
+
|
||||
perf_check_microcode();
|
||||
+
|
||||
+ /* Reload CPUID max function as it might've changed. */
|
||||
+ info.cpuid_level = cpuid_eax(0);
|
||||
+
|
||||
+ /*
|
||||
+ * Copy all capability leafs to pick up the synthetic ones so that
|
||||
+ * memcmp() below doesn't fail on that. The ones coming from CPUID will
|
||||
+ * get overwritten in get_cpu_cap().
|
||||
+ */
|
||||
+ memcpy(&info.x86_capability, &boot_cpu_data.x86_capability, sizeof(info.x86_capability));
|
||||
+
|
||||
+ get_cpu_cap(&info);
|
||||
+
|
||||
+ if (!memcmp(&info.x86_capability, &boot_cpu_data.x86_capability, sizeof(info.x86_capability)))
|
||||
+ return;
|
||||
+
|
||||
+ pr_warn("x86/CPU: CPU features have changed after loading microcode, but might not take effect.\n");
|
||||
+ pr_warn("x86/CPU: Please consider either early loading through initrd/built-in or a potential BIOS update.\n");
|
||||
}
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
From 9e809d15d6b692fa061d74be7aaab1c79f6784b8 Mon Sep 17 00:00:00 2001
|
||||
From: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
Date: Wed, 14 Feb 2018 18:59:23 +0100
|
||||
Subject: [PATCH 76/77] x86/entry: Reduce the code footprint of the 'idtentry'
|
||||
macro
|
||||
|
||||
Play a little trick in the generic PUSH_AND_CLEAR_REGS macro
|
||||
to insert the GP registers "above" the original return address.
|
||||
|
||||
This allows us to (re-)insert the macro in error_entry() and
|
||||
paranoid_entry() and to remove it from the idtentry macro. This
|
||||
reduces the static footprint significantly:
|
||||
|
||||
text data bss dec hex filename
|
||||
24307 0 0 24307 5ef3 entry_64.o-orig
|
||||
20987 0 0 20987 51fb entry_64.o
|
||||
|
||||
Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/20180214175924.23065-2-linux@dominikbrodowski.net
|
||||
[ Small tweaks to comments. ]
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/entry/calling.h | 11 ++++++++++-
|
||||
arch/x86/entry/entry_64.S | 18 ++++++++----------
|
||||
2 files changed, 18 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
|
||||
index dce7092ab24a..196b6103edf6 100644
|
||||
--- a/arch/x86/entry/calling.h
|
||||
+++ b/arch/x86/entry/calling.h
|
||||
@@ -97,7 +97,7 @@ For 32-bit we have the following conventions - kernel is built with
|
||||
|
||||
#define SIZEOF_PTREGS 21*8
|
||||
|
||||
-.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax
|
||||
+.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax save_ret=0
|
||||
/*
|
||||
* Push registers and sanitize registers of values that a
|
||||
* speculation attack might otherwise want to exploit. The
|
||||
@@ -105,8 +105,14 @@ For 32-bit we have the following conventions - kernel is built with
|
||||
* could be put to use in a speculative execution gadget.
|
||||
* Interleave XOR with PUSH for better uop scheduling:
|
||||
*/
|
||||
+ .if \save_ret
|
||||
+ pushq %rsi /* pt_regs->si */
|
||||
+ movq 8(%rsp), %rsi /* temporarily store the return address in %rsi */
|
||||
+ movq %rdi, 8(%rsp) /* pt_regs->di (overwriting original return address) */
|
||||
+ .else
|
||||
pushq %rdi /* pt_regs->di */
|
||||
pushq %rsi /* pt_regs->si */
|
||||
+ .endif
|
||||
pushq \rdx /* pt_regs->dx */
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq \rax /* pt_regs->ax */
|
||||
@@ -131,6 +137,9 @@ For 32-bit we have the following conventions - kernel is built with
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
xorq %r15, %r15 /* nospec r15*/
|
||||
UNWIND_HINT_REGS
|
||||
+ .if \save_ret
|
||||
+ pushq %rsi /* return address on top of stack */
|
||||
+ .endif
|
||||
.endm
|
||||
|
||||
.macro POP_REGS pop_rdi=1 skip_r11rcx=0
|
||||
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
|
||||
index 8971bd64d515..77edc2390868 100644
|
||||
--- a/arch/x86/entry/entry_64.S
|
||||
+++ b/arch/x86/entry/entry_64.S
|
||||
@@ -875,12 +875,8 @@ ENTRY(\sym)
|
||||
pushq $-1 /* ORIG_RAX: no syscall to restart */
|
||||
.endif
|
||||
|
||||
- /* Save all registers in pt_regs */
|
||||
- PUSH_AND_CLEAR_REGS
|
||||
- ENCODE_FRAME_POINTER
|
||||
-
|
||||
.if \paranoid < 2
|
||||
- testb $3, CS(%rsp) /* If coming from userspace, switch stacks */
|
||||
+ testb $3, CS-ORIG_RAX(%rsp) /* If coming from userspace, switch stacks */
|
||||
jnz .Lfrom_usermode_switch_stack_\@
|
||||
.endif
|
||||
|
||||
@@ -1130,13 +1126,15 @@ idtentry machine_check do_mce has_error_code=0 paranoid=1
|
||||
#endif
|
||||
|
||||
/*
|
||||
- * Switch gs if needed.
|
||||
+ * Save all registers in pt_regs, and switch gs if needed.
|
||||
* Use slow, but surefire "are we in kernel?" check.
|
||||
* Return: ebx=0: need swapgs on exit, ebx=1: otherwise
|
||||
*/
|
||||
ENTRY(paranoid_entry)
|
||||
UNWIND_HINT_FUNC
|
||||
cld
|
||||
+ PUSH_AND_CLEAR_REGS save_ret=1
|
||||
+ ENCODE_FRAME_POINTER 8
|
||||
movl $1, %ebx
|
||||
movl $MSR_GS_BASE, %ecx
|
||||
rdmsr
|
||||
@@ -1181,12 +1179,14 @@ ENTRY(paranoid_exit)
|
||||
END(paranoid_exit)
|
||||
|
||||
/*
|
||||
- * Switch gs if needed.
|
||||
+ * Save all registers in pt_regs, and switch GS if needed.
|
||||
* Return: EBX=0: came from user mode; EBX=1: otherwise
|
||||
*/
|
||||
ENTRY(error_entry)
|
||||
- UNWIND_HINT_REGS offset=8
|
||||
+ UNWIND_HINT_FUNC
|
||||
cld
|
||||
+ PUSH_AND_CLEAR_REGS save_ret=1
|
||||
+ ENCODE_FRAME_POINTER 8
|
||||
testb $3, CS+8(%rsp)
|
||||
jz .Lerror_kernelspace
|
||||
|
||||
@@ -1577,8 +1577,6 @@ end_repeat_nmi:
|
||||
* frame to point back to repeat_nmi.
|
||||
*/
|
||||
pushq $-1 /* ORIG_RAX: no syscall to restart */
|
||||
- PUSH_AND_CLEAR_REGS
|
||||
- ENCODE_FRAME_POINTER
|
||||
|
||||
/*
|
||||
* Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
From ced5d0bf603fa0baee8ea889e1d70971fd210894 Mon Sep 17 00:00:00 2001
|
||||
From: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
Date: Wed, 14 Feb 2018 18:59:24 +0100
|
||||
Subject: [PATCH 77/77] x86/entry/64: Use 'xorl' for faster register clearing
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
On some x86 CPU microarchitectures using 'xorq' to clear general-purpose
|
||||
registers is slower than 'xorl'. As 'xorl' is sufficient to clear all
|
||||
64 bits of these registers due to zero-extension [*], switch the x86
|
||||
64-bit entry code to use 'xorl'.
|
||||
|
||||
No change in functionality and no change in code size.
|
||||
|
||||
[*] According to Intel 64 and IA-32 Architecture Software Developer's
|
||||
Manual, section 3.4.1.1, the result of 32-bit operands are "zero-
|
||||
extended to a 64-bit result in the destination general-purpose
|
||||
register." The AMD64 Architecture Programmer’s Manual Volume 3,
|
||||
Appendix B.1, describes the same behaviour.
|
||||
|
||||
Suggested-by: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
Cc: Andy Lutomirski <luto@kernel.org>
|
||||
Cc: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Dan Williams <dan.j.williams@intel.com>
|
||||
Cc: Dave Hansen <dave.hansen@linux.intel.com>
|
||||
Cc: David Woodhouse <dwmw2@infradead.org>
|
||||
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Link: http://lkml.kernel.org/r/20180214175924.23065-3-linux@dominikbrodowski.net
|
||||
[ Improved on the changelog a bit. ]
|
||||
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
||||
---
|
||||
arch/x86/entry/calling.h | 16 ++++++------
|
||||
arch/x86/entry/entry_64_compat.S | 54 ++++++++++++++++++++--------------------
|
||||
2 files changed, 35 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
|
||||
index 196b6103edf6..5d10b7a85cad 100644
|
||||
--- a/arch/x86/entry/calling.h
|
||||
+++ b/arch/x86/entry/calling.h
|
||||
@@ -117,25 +117,25 @@ For 32-bit we have the following conventions - kernel is built with
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq \rax /* pt_regs->ax */
|
||||
pushq %r8 /* pt_regs->r8 */
|
||||
- xorq %r8, %r8 /* nospec r8 */
|
||||
+ xorl %r8d, %r8d /* nospec r8 */
|
||||
pushq %r9 /* pt_regs->r9 */
|
||||
- xorq %r9, %r9 /* nospec r9 */
|
||||
+ xorl %r9d, %r9d /* nospec r9 */
|
||||
pushq %r10 /* pt_regs->r10 */
|
||||
- xorq %r10, %r10 /* nospec r10 */
|
||||
+ xorl %r10d, %r10d /* nospec r10 */
|
||||
pushq %r11 /* pt_regs->r11 */
|
||||
- xorq %r11, %r11 /* nospec r11*/
|
||||
+ xorl %r11d, %r11d /* nospec r11*/
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
xorl %ebx, %ebx /* nospec rbx*/
|
||||
pushq %rbp /* pt_regs->rbp */
|
||||
xorl %ebp, %ebp /* nospec rbp*/
|
||||
pushq %r12 /* pt_regs->r12 */
|
||||
- xorq %r12, %r12 /* nospec r12*/
|
||||
+ xorl %r12d, %r12d /* nospec r12*/
|
||||
pushq %r13 /* pt_regs->r13 */
|
||||
- xorq %r13, %r13 /* nospec r13*/
|
||||
+ xorl %r13d, %r13d /* nospec r13*/
|
||||
pushq %r14 /* pt_regs->r14 */
|
||||
- xorq %r14, %r14 /* nospec r14*/
|
||||
+ xorl %r14d, %r14d /* nospec r14*/
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
- xorq %r15, %r15 /* nospec r15*/
|
||||
+ xorl %r15d, %r15d /* nospec r15*/
|
||||
UNWIND_HINT_REGS
|
||||
.if \save_ret
|
||||
pushq %rsi /* return address on top of stack */
|
||||
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
|
||||
index fd65e016e413..364ea4a207be 100644
|
||||
--- a/arch/x86/entry/entry_64_compat.S
|
||||
+++ b/arch/x86/entry/entry_64_compat.S
|
||||
@@ -85,25 +85,25 @@ ENTRY(entry_SYSENTER_compat)
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
- xorq %r8, %r8 /* nospec r8 */
|
||||
+ xorl %r8d, %r8d /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
- xorq %r9, %r9 /* nospec r9 */
|
||||
+ xorl %r9d, %r9d /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
- xorq %r10, %r10 /* nospec r10 */
|
||||
+ xorl %r10d, %r10d /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
- xorq %r11, %r11 /* nospec r11 */
|
||||
+ xorl %r11d, %r11d /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp (will be overwritten) */
|
||||
xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq $0 /* pt_regs->r12 = 0 */
|
||||
- xorq %r12, %r12 /* nospec r12 */
|
||||
+ xorl %r12d, %r12d /* nospec r12 */
|
||||
pushq $0 /* pt_regs->r13 = 0 */
|
||||
- xorq %r13, %r13 /* nospec r13 */
|
||||
+ xorl %r13d, %r13d /* nospec r13 */
|
||||
pushq $0 /* pt_regs->r14 = 0 */
|
||||
- xorq %r14, %r14 /* nospec r14 */
|
||||
+ xorl %r14d, %r14d /* nospec r14 */
|
||||
pushq $0 /* pt_regs->r15 = 0 */
|
||||
- xorq %r15, %r15 /* nospec r15 */
|
||||
+ xorl %r15d, %r15d /* nospec r15 */
|
||||
cld
|
||||
|
||||
/*
|
||||
@@ -224,25 +224,25 @@ GLOBAL(entry_SYSCALL_compat_after_hwframe)
|
||||
pushq %rbp /* pt_regs->cx (stashed in bp) */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
- xorq %r8, %r8 /* nospec r8 */
|
||||
+ xorl %r8d, %r8d /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
- xorq %r9, %r9 /* nospec r9 */
|
||||
+ xorl %r9d, %r9d /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
- xorq %r10, %r10 /* nospec r10 */
|
||||
+ xorl %r10d, %r10d /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
- xorq %r11, %r11 /* nospec r11 */
|
||||
+ xorl %r11d, %r11d /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp (will be overwritten) */
|
||||
xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq $0 /* pt_regs->r12 = 0 */
|
||||
- xorq %r12, %r12 /* nospec r12 */
|
||||
+ xorl %r12d, %r12d /* nospec r12 */
|
||||
pushq $0 /* pt_regs->r13 = 0 */
|
||||
- xorq %r13, %r13 /* nospec r13 */
|
||||
+ xorl %r13d, %r13d /* nospec r13 */
|
||||
pushq $0 /* pt_regs->r14 = 0 */
|
||||
- xorq %r14, %r14 /* nospec r14 */
|
||||
+ xorl %r14d, %r14d /* nospec r14 */
|
||||
pushq $0 /* pt_regs->r15 = 0 */
|
||||
- xorq %r15, %r15 /* nospec r15 */
|
||||
+ xorl %r15d, %r15d /* nospec r15 */
|
||||
|
||||
/*
|
||||
* User mode is traced as though IRQs are on, and SYSENTER
|
||||
@@ -298,9 +298,9 @@ sysret32_from_system_call:
|
||||
*/
|
||||
SWITCH_TO_USER_CR3_NOSTACK scratch_reg=%r8 scratch_reg2=%r9
|
||||
|
||||
- xorq %r8, %r8
|
||||
- xorq %r9, %r9
|
||||
- xorq %r10, %r10
|
||||
+ xorl %r8d, %r8d
|
||||
+ xorl %r9d, %r9d
|
||||
+ xorl %r10d, %r10d
|
||||
swapgs
|
||||
sysretl
|
||||
END(entry_SYSCALL_compat)
|
||||
@@ -358,25 +358,25 @@ ENTRY(entry_INT80_compat)
|
||||
pushq %rcx /* pt_regs->cx */
|
||||
pushq $-ENOSYS /* pt_regs->ax */
|
||||
pushq $0 /* pt_regs->r8 = 0 */
|
||||
- xorq %r8, %r8 /* nospec r8 */
|
||||
+ xorl %r8d, %r8d /* nospec r8 */
|
||||
pushq $0 /* pt_regs->r9 = 0 */
|
||||
- xorq %r9, %r9 /* nospec r9 */
|
||||
+ xorl %r9d, %r9d /* nospec r9 */
|
||||
pushq $0 /* pt_regs->r10 = 0 */
|
||||
- xorq %r10, %r10 /* nospec r10 */
|
||||
+ xorl %r10d, %r10d /* nospec r10 */
|
||||
pushq $0 /* pt_regs->r11 = 0 */
|
||||
- xorq %r11, %r11 /* nospec r11 */
|
||||
+ xorl %r11d, %r11d /* nospec r11 */
|
||||
pushq %rbx /* pt_regs->rbx */
|
||||
xorl %ebx, %ebx /* nospec rbx */
|
||||
pushq %rbp /* pt_regs->rbp */
|
||||
xorl %ebp, %ebp /* nospec rbp */
|
||||
pushq %r12 /* pt_regs->r12 */
|
||||
- xorq %r12, %r12 /* nospec r12 */
|
||||
+ xorl %r12d, %r12d /* nospec r12 */
|
||||
pushq %r13 /* pt_regs->r13 */
|
||||
- xorq %r13, %r13 /* nospec r13 */
|
||||
+ xorl %r13d, %r13d /* nospec r13 */
|
||||
pushq %r14 /* pt_regs->r14 */
|
||||
- xorq %r14, %r14 /* nospec r14 */
|
||||
+ xorl %r14d, %r14d /* nospec r14 */
|
||||
pushq %r15 /* pt_regs->r15 */
|
||||
- xorq %r15, %r15 /* nospec r15 */
|
||||
+ xorl %r15d, %r15d /* nospec r15 */
|
||||
cld
|
||||
|
||||
/*
|
||||
--
|
||||
2.16.1
|
||||
|
||||
+29
-11
@@ -28,8 +28,8 @@
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.14.18.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.14.18/2.mga7/PATCHES/patches/series-->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.14.23.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.14.22/1.mga7/PATCHES/patches/series-->
|
||||
<!--stable patches-->
|
||||
<!--CVE-2016-8405-->
|
||||
<!--other patches-->
|
||||
@@ -38,9 +38,6 @@
|
||||
<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-entry-64-Clear-extra-registers-beyond-syscall-ar.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-entry-64-Clear-registers-for-exceptions-interrup.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-entry-64-compat-Clear-registers-for-compat-sysca.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pti32bit-0001-x86-asm-offsets-Move-TSS_sp0-and-TSS_sp1-to-asm-offs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pti32bit-0002-x86-entry-32-Rename-TSS_sysenter_sp0-to-TSS_entry_st.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pti32bit-0003-x86-entry-32-Load-task-stack-from-x86_tss.sp1-in-SYS.patch</Patch>
|
||||
@@ -72,12 +69,21 @@
|
||||
<Patch level="1">patches/mageia/pti32bit-0029-x86-ldt-Split-out-sanity-check-in-map_ldt_struct.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pti32bit-0030-x86-ldt-Enable-LDT-user-mapping-for-PAE.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pti32bit-0031-x86-pti-Allow-CONFIG_PAGE_TABLE_ISOLATION-for-x86_32.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0070-nospec-Kill-array_index_nospec_mask_check.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0071-nospec-Allow-index-argument-to-have-const-qualified-.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0072-nospec-Include-asm-barrier.h-dependency.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0073-x86-microcode-Propagate-return-value-from-updating-f.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0074-x86-CPU-Add-a-microcode-loader-callback.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0075-x86-CPU-Check-CPU-feature-bits-after-microcode-upgra.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0076-x86-entry-Reduce-the-code-footprint-of-the-idtentry-.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pti-0077-x86-entry-64-Use-xorl-for-faster-register-clearing.patch</Patch>
|
||||
<Patch level="1">patches/mageia/sched-topology-Introduce-NUMA-identity-node-sched-domain.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>
|
||||
<Patch level="1">patches/mageia/acpi-processor-M720SR-limit-to-C2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-ec-restore-polling-during-noirq-suspend_resume-phases.patch</Patch>
|
||||
<!--Patch level="1">patches/mageia/scsi-ppscsi-2.6.2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi_fixes.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-sg-helper-update.patch</Patch>
|
||||
@@ -111,6 +117,8 @@
|
||||
<Patch level="1">patches/mageia/block-bfq-fix-occurrences-of-request-finish-method-s.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-bfq-limit-tags-for-writes-and-async-I-O.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-bfq-limit-sectors-served-with-interactive-weig.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-bfq-add-requeue-request-hook.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-bfq-put-async-queues-for-root-bfq-groups-too.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.14.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.14-modular.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-include-vmalloc.patch</Patch>
|
||||
@@ -133,7 +141,6 @@
|
||||
<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-i915-Avoid-PPS-HW_SW-state-mismatch-due-to-rounding.patch</Patch>
|
||||
<Patch level="1">patches/mageia/hwmon-k10temp-Move-chip-specific-code-into-probe-function.patch</Patch>
|
||||
<Patch level="1">patches/mageia/hwmon-k10temp-Add-support-for-family-17h.patch</Patch>
|
||||
<Patch level="1">patches/mageia/hwmon-k10temp-Add-support-for-temperature-offsets.patch</Patch>
|
||||
@@ -154,13 +161,13 @@
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-fix-redefines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-WireGuard.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-tls-Correct-length-of-scatterlist-in-tls_sw_sendpage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-xt_addrtype-silence-BROADCAST-message.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>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.13-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-ideapad-Add-IdeaPad-320-15IKB-to-no_hw_rfkill_list.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-ideapad-laptop-Increase-timeout-to-wait-for-ec-answer.patch</Patch>
|
||||
<Patch level="1">patches/mageia/hid-usbhid-IBM-BladeCenterHS20-quirk.patch</Patch>
|
||||
<Patch level="1">patches/mageia/usb-storage-unusual_devs-add-id.patch</Patch>
|
||||
<Patch level="1">patches/mageia/usb-storage-unusual_devs-add-id-2.6.37-buildfix.patch</Patch>
|
||||
@@ -191,8 +198,8 @@
|
||||
<Patch level="1">patches/mageia/3rd-viahss-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-3.0-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8812au.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-testing-selftest-Makefile-remove-powerpc-reference.patch</Patch>
|
||||
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723de.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-testing-selftest-Makefile-remove-powerpc-reference.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -247,9 +254,20 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="17">
|
||||
<Date>2018-03-03</Date>
|
||||
<Version>4.14.23</Version>
|
||||
<Comment>Version Bump.</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="16">
|
||||
<Date>2018-02-11</Date>
|
||||
<Version>4.14.18</Version>
|
||||
<Date>2018-03-02</Date>
|
||||
<Version>4.9.80</Version>
|
||||
<Comment>Version Bump.</Comment>
|
||||
<Type package="kernel">security</Type>
|
||||
<Requires>
|
||||
|
||||
Reference in New Issue
Block a user