public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Piotr Krysiuk <piotras@gmail.com>,
	Benedict Schlueter <benedict.schlueter@rub.de>,
	Alexei Starovoitov <ast@kernel.org>,
	Sasha Levin <sashal@kernel.org>,
	Ovidiu Panait <ovidiu.panait@windriver.com>
Subject: [PATCH 5.4 128/144] bpf: Fix leakage due to insufficient speculative store bypass mitigation
Date: Mon, 13 Sep 2021 15:15:09 +0200	[thread overview]
Message-ID: <20210913131052.206766091@linuxfoundation.org> (raw)
In-Reply-To: <20210913131047.974309396@linuxfoundation.org>

From: Daniel Borkmann <daniel@iogearbox.net>

commit 2039f26f3aca5b0e419b98f65dd36481337b86ee upstream.

Spectre v4 gadgets make use of memory disambiguation, which is a set of
techniques that execute memory access instructions, that is, loads and
stores, out of program order; Intel's optimization manual, section 2.4.4.5:

  A load instruction micro-op may depend on a preceding store. Many
  microarchitectures block loads until all preceding store addresses are
  known. The memory disambiguator predicts which loads will not depend on
  any previous stores. When the disambiguator predicts that a load does
  not have such a dependency, the load takes its data from the L1 data
  cache. Eventually, the prediction is verified. If an actual conflict is
  detected, the load and all succeeding instructions are re-executed.

af86ca4e3088 ("bpf: Prevent memory disambiguation attack") tried to mitigate
this attack by sanitizing the memory locations through preemptive "fast"
(low latency) stores of zero prior to the actual "slow" (high latency) store
of a pointer value such that upon dependency misprediction the CPU then
speculatively executes the load of the pointer value and retrieves the zero
value instead of the attacker controlled scalar value previously stored at
that location, meaning, subsequent access in the speculative domain is then
redirected to the "zero page".

The sanitized preemptive store of zero prior to the actual "slow" store is
done through a simple ST instruction based on r10 (frame pointer) with
relative offset to the stack location that the verifier has been tracking
on the original used register for STX, which does not have to be r10. Thus,
there are no memory dependencies for this store, since it's only using r10
and immediate constant of zero; hence af86ca4e3088 /assumed/ a low latency
operation.

However, a recent attack demonstrated that this mitigation is not sufficient
since the preemptive store of zero could also be turned into a "slow" store
and is thus bypassed as well:

  [...]
  // r2 = oob address (e.g. scalar)
  // r7 = pointer to map value
  31: (7b) *(u64 *)(r10 -16) = r2
  // r9 will remain "fast" register, r10 will become "slow" register below
  32: (bf) r9 = r10
  // JIT maps BPF reg to x86 reg:
  //  r9  -> r15 (callee saved)
  //  r10 -> rbp
  // train store forward prediction to break dependency link between both r9
  // and r10 by evicting them from the predictor's LRU table.
  33: (61) r0 = *(u32 *)(r7 +24576)
  34: (63) *(u32 *)(r7 +29696) = r0
  35: (61) r0 = *(u32 *)(r7 +24580)
  36: (63) *(u32 *)(r7 +29700) = r0
  37: (61) r0 = *(u32 *)(r7 +24584)
  38: (63) *(u32 *)(r7 +29704) = r0
  39: (61) r0 = *(u32 *)(r7 +24588)
  40: (63) *(u32 *)(r7 +29708) = r0
  [...]
  543: (61) r0 = *(u32 *)(r7 +25596)
  544: (63) *(u32 *)(r7 +30716) = r0
  // prepare call to bpf_ringbuf_output() helper. the latter will cause rbp
  // to spill to stack memory while r13/r14/r15 (all callee saved regs) remain
  // in hardware registers. rbp becomes slow due to push/pop latency. below is
  // disasm of bpf_ringbuf_output() helper for better visual context:
  //
  // ffffffff8117ee20: 41 54                 push   r12
  // ffffffff8117ee22: 55                    push   rbp
  // ffffffff8117ee23: 53                    push   rbx
  // ffffffff8117ee24: 48 f7 c1 fc ff ff ff  test   rcx,0xfffffffffffffffc
  // ffffffff8117ee2b: 0f 85 af 00 00 00     jne    ffffffff8117eee0 <-- jump taken
  // [...]
  // ffffffff8117eee0: 49 c7 c4 ea ff ff ff  mov    r12,0xffffffffffffffea
  // ffffffff8117eee7: 5b                    pop    rbx
  // ffffffff8117eee8: 5d                    pop    rbp
  // ffffffff8117eee9: 4c 89 e0              mov    rax,r12
  // ffffffff8117eeec: 41 5c                 pop    r12
  // ffffffff8117eeee: c3                    ret
  545: (18) r1 = map[id:4]
  547: (bf) r2 = r7
  548: (b7) r3 = 0
  549: (b7) r4 = 4
  550: (85) call bpf_ringbuf_output#194288
  // instruction 551 inserted by verifier    \
  551: (7a) *(u64 *)(r10 -16) = 0            | /both/ are now slow stores here
  // storing map value pointer r7 at fp-16   | since value of r10 is "slow".
  552: (7b) *(u64 *)(r10 -16) = r7           /
  // following "fast" read to the same memory location, but due to dependency
  // misprediction it will speculatively execute before insn 551/552 completes.
  553: (79) r2 = *(u64 *)(r9 -16)
  // in speculative domain contains attacker controlled r2. in non-speculative
  // domain this contains r7, and thus accesses r7 +0 below.
  554: (71) r3 = *(u8 *)(r2 +0)
  // leak r3

As can be seen, the current speculative store bypass mitigation which the
verifier inserts at line 551 is insufficient since /both/, the write of
the zero sanitation as well as the map value pointer are a high latency
instruction due to prior memory access via push/pop of r10 (rbp) in contrast
to the low latency read in line 553 as r9 (r15) which stays in hardware
registers. Thus, architecturally, fp-16 is r7, however, microarchitecturally,
fp-16 can still be r2.

Initial thoughts to address this issue was to track spilled pointer loads
from stack and enforce their load via LDX through r10 as well so that /both/
the preemptive store of zero /as well as/ the load use the /same/ register
such that a dependency is created between the store and load. However, this
option is not sufficient either since it can be bypassed as well under
speculation. An updated attack with pointer spill/fills now _all_ based on
r10 would look as follows:

  [...]
  // r2 = oob address (e.g. scalar)
  // r7 = pointer to map value
  [...]
  // longer store forward prediction training sequence than before.
  2062: (61) r0 = *(u32 *)(r7 +25588)
  2063: (63) *(u32 *)(r7 +30708) = r0
  2064: (61) r0 = *(u32 *)(r7 +25592)
  2065: (63) *(u32 *)(r7 +30712) = r0
  2066: (61) r0 = *(u32 *)(r7 +25596)
  2067: (63) *(u32 *)(r7 +30716) = r0
  // store the speculative load address (scalar) this time after the store
  // forward prediction training.
  2068: (7b) *(u64 *)(r10 -16) = r2
  // preoccupy the CPU store port by running sequence of dummy stores.
  2069: (63) *(u32 *)(r7 +29696) = r0
  2070: (63) *(u32 *)(r7 +29700) = r0
  2071: (63) *(u32 *)(r7 +29704) = r0
  2072: (63) *(u32 *)(r7 +29708) = r0
  2073: (63) *(u32 *)(r7 +29712) = r0
  2074: (63) *(u32 *)(r7 +29716) = r0
  2075: (63) *(u32 *)(r7 +29720) = r0
  2076: (63) *(u32 *)(r7 +29724) = r0
  2077: (63) *(u32 *)(r7 +29728) = r0
  2078: (63) *(u32 *)(r7 +29732) = r0
  2079: (63) *(u32 *)(r7 +29736) = r0
  2080: (63) *(u32 *)(r7 +29740) = r0
  2081: (63) *(u32 *)(r7 +29744) = r0
  2082: (63) *(u32 *)(r7 +29748) = r0
  2083: (63) *(u32 *)(r7 +29752) = r0
  2084: (63) *(u32 *)(r7 +29756) = r0
  2085: (63) *(u32 *)(r7 +29760) = r0
  2086: (63) *(u32 *)(r7 +29764) = r0
  2087: (63) *(u32 *)(r7 +29768) = r0
  2088: (63) *(u32 *)(r7 +29772) = r0
  2089: (63) *(u32 *)(r7 +29776) = r0
  2090: (63) *(u32 *)(r7 +29780) = r0
  2091: (63) *(u32 *)(r7 +29784) = r0
  2092: (63) *(u32 *)(r7 +29788) = r0
  2093: (63) *(u32 *)(r7 +29792) = r0
  2094: (63) *(u32 *)(r7 +29796) = r0
  2095: (63) *(u32 *)(r7 +29800) = r0
  2096: (63) *(u32 *)(r7 +29804) = r0
  2097: (63) *(u32 *)(r7 +29808) = r0
  2098: (63) *(u32 *)(r7 +29812) = r0
  // overwrite scalar with dummy pointer; same as before, also including the
  // sanitation store with 0 from the current mitigation by the verifier.
  2099: (7a) *(u64 *)(r10 -16) = 0         | /both/ are now slow stores here
  2100: (7b) *(u64 *)(r10 -16) = r7        | since store unit is still busy.
  // load from stack intended to bypass stores.
  2101: (79) r2 = *(u64 *)(r10 -16)
  2102: (71) r3 = *(u8 *)(r2 +0)
  // leak r3
  [...]

Looking at the CPU microarchitecture, the scheduler might issue loads (such
as seen in line 2101) before stores (line 2099,2100) because the load execution
units become available while the store execution unit is still busy with the
sequence of dummy stores (line 2069-2098). And so the load may use the prior
stored scalar from r2 at address r10 -16 for speculation. The updated attack
may work less reliable on CPU microarchitectures where loads and stores share
execution resources.

This concludes that the sanitizing with zero stores from af86ca4e3088 ("bpf:
Prevent memory disambiguation attack") is insufficient. Moreover, the detection
of stack reuse from af86ca4e3088 where previously data (STACK_MISC) has been
written to a given stack slot where a pointer value is now to be stored does
not have sufficient coverage as precondition for the mitigation either; for
several reasons outlined as follows:

 1) Stack content from prior program runs could still be preserved and is
    therefore not "random", best example is to split a speculative store
    bypass attack between tail calls, program A would prepare and store the
    oob address at a given stack slot and then tail call into program B which
    does the "slow" store of a pointer to the stack with subsequent "fast"
    read. From program B PoV such stack slot type is STACK_INVALID, and
    therefore also must be subject to mitigation.

 2) The STACK_SPILL must not be coupled to register_is_const(&stack->spilled_ptr)
    condition, for example, the previous content of that memory location could
    also be a pointer to map or map value. Without the fix, a speculative
    store bypass is not mitigated in such precondition and can then lead to
    a type confusion in the speculative domain leaking kernel memory near
    these pointer types.

While brainstorming on various alternative mitigation possibilities, we also
stumbled upon a retrospective from Chrome developers [0]:

  [...] For variant 4, we implemented a mitigation to zero the unused memory
  of the heap prior to allocation, which cost about 1% when done concurrently
  and 4% for scavenging. Variant 4 defeats everything we could think of. We
  explored more mitigations for variant 4 but the threat proved to be more
  pervasive and dangerous than we anticipated. For example, stack slots used
  by the register allocator in the optimizing compiler could be subject to
  type confusion, leading to pointer crafting. Mitigating type confusion for
  stack slots alone would have required a complete redesign of the backend of
  the optimizing compiler, perhaps man years of work, without a guarantee of
  completeness. [...]

>From BPF side, the problem space is reduced, however, options are rather
limited. One idea that has been explored was to xor-obfuscate pointer spills
to the BPF stack:

  [...]
  // preoccupy the CPU store port by running sequence of dummy stores.
  [...]
  2106: (63) *(u32 *)(r7 +29796) = r0
  2107: (63) *(u32 *)(r7 +29800) = r0
  2108: (63) *(u32 *)(r7 +29804) = r0
  2109: (63) *(u32 *)(r7 +29808) = r0
  2110: (63) *(u32 *)(r7 +29812) = r0
  // overwrite scalar with dummy pointer; xored with random 'secret' value
  // of 943576462 before store ...
  2111: (b4) w11 = 943576462
  2112: (af) r11 ^= r7
  2113: (7b) *(u64 *)(r10 -16) = r11
  2114: (79) r11 = *(u64 *)(r10 -16)
  2115: (b4) w2 = 943576462
  2116: (af) r2 ^= r11
  // ... and restored with the same 'secret' value with the help of AX reg.
  2117: (71) r3 = *(u8 *)(r2 +0)
  [...]

While the above would not prevent speculation, it would make data leakage
infeasible by directing it to random locations. In order to be effective
and prevent type confusion under speculation, such random secret would have
to be regenerated for each store. The additional complexity involved for a
tracking mechanism that prevents jumps such that restoring spilled pointers
would not get corrupted is not worth the gain for unprivileged. Hence, the
fix in here eventually opted for emitting a non-public BPF_ST | BPF_NOSPEC
instruction which the x86 JIT translates into a lfence opcode. Inserting the
latter in between the store and load instruction is one of the mitigations
options [1]. The x86 instruction manual notes:

  [...] An LFENCE that follows an instruction that stores to memory might
  complete before the data being stored have become globally visible. [...]

The latter meaning that the preceding store instruction finished execution
and the store is at minimum guaranteed to be in the CPU's store queue, but
it's not guaranteed to be in that CPU's L1 cache at that point (globally
visible). The latter would only be guaranteed via sfence. So the load which
is guaranteed to execute after the lfence for that local CPU would have to
rely on store-to-load forwarding. [2], in section 2.3 on store buffers says:

  [...] For every store operation that is added to the ROB, an entry is
  allocated in the store buffer. This entry requires both the virtual and
  physical address of the target. Only if there is no free entry in the store
  buffer, the frontend stalls until there is an empty slot available in the
  store buffer again. Otherwise, the CPU can immediately continue adding
  subsequent instructions to the ROB and execute them out of order. On Intel
  CPUs, the store buffer has up to 56 entries. [...]

One small upside on the fix is that it lifts constraints from af86ca4e3088
where the sanitize_stack_off relative to r10 must be the same when coming
from different paths. The BPF_ST | BPF_NOSPEC gets emitted after a BPF_STX
or BPF_ST instruction. This happens either when we store a pointer or data
value to the BPF stack for the first time, or upon later pointer spills.
The former needs to be enforced since otherwise stale stack data could be
leaked under speculation as outlined earlier. For non-x86 JITs the BPF_ST |
BPF_NOSPEC mapping is currently optimized away, but others could emit a
speculation barrier as well if necessary. For real-world unprivileged
programs e.g. generated by LLVM, pointer spill/fill is only generated upon
register pressure and LLVM only tries to do that for pointers which are not
used often. The program main impact will be the initial BPF_ST | BPF_NOSPEC
sanitation for the STACK_INVALID case when the first write to a stack slot
occurs e.g. upon map lookup. In future we might refine ways to mitigate
the latter cost.

  [0] https://arxiv.org/pdf/1902.05178.pdf
  [1] https://msrc-blog.microsoft.com/2018/05/21/analysis-and-mitigation-of-speculative-store-bypass-cve-2018-3639/
  [2] https://arxiv.org/pdf/1905.05725.pdf

Fixes: af86ca4e3088 ("bpf: Prevent memory disambiguation attack")
Fixes: f7cf25b2026d ("bpf: track spill/fill of constants")
Co-developed-by: Piotr Krysiuk <piotras@gmail.com>
Co-developed-by: Benedict Schlueter <benedict.schlueter@rub.de>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Piotr Krysiuk <piotras@gmail.com>
Signed-off-by: Benedict Schlueter <benedict.schlueter@rub.de>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
[OP: - apply check_stack_write_fixed_off() changes in check_stack_write()
     - replace env->bypass_spec_v4 -> env->allow_ptr_leaks]
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/bpf_verifier.h |    2 
 kernel/bpf/verifier.c        |   87 +++++++++++++++----------------------------
 2 files changed, 33 insertions(+), 56 deletions(-)

--- a/include/linux/bpf_verifier.h
+++ b/include/linux/bpf_verifier.h
@@ -301,8 +301,8 @@ struct bpf_insn_aux_data {
 		};
 	};
 	int ctx_field_size; /* the ctx field size for load insn, maybe 0 */
-	int sanitize_stack_off; /* stack slot to be cleared */
 	bool seen; /* this insn was processed by the verifier */
+	bool sanitize_stack_spill; /* subject to Spectre v4 sanitation */
 	bool zext_dst; /* this insn zero extends dst reg */
 	u8 alu_state; /* used in combination with alu_limit */
 	bool prune_point;
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -1920,6 +1920,19 @@ static int check_stack_write(struct bpf_
 	cur = env->cur_state->frame[env->cur_state->curframe];
 	if (value_regno >= 0)
 		reg = &cur->regs[value_regno];
+	if (!env->allow_ptr_leaks) {
+		bool sanitize = reg && is_spillable_regtype(reg->type);
+
+		for (i = 0; i < size; i++) {
+			if (state->stack[spi].slot_type[i] == STACK_INVALID) {
+				sanitize = true;
+				break;
+			}
+		}
+
+		if (sanitize)
+			env->insn_aux_data[insn_idx].sanitize_stack_spill = true;
+	}
 
 	if (reg && size == BPF_REG_SIZE && register_is_const(reg) &&
 	    !register_is_null(reg) && env->allow_ptr_leaks) {
@@ -1942,47 +1955,10 @@ static int check_stack_write(struct bpf_
 			verbose(env, "invalid size of register spill\n");
 			return -EACCES;
 		}
-
 		if (state != cur && reg->type == PTR_TO_STACK) {
 			verbose(env, "cannot spill pointers to stack into stack frame of the caller\n");
 			return -EINVAL;
 		}
-
-		if (!env->allow_ptr_leaks) {
-			bool sanitize = false;
-
-			if (state->stack[spi].slot_type[0] == STACK_SPILL &&
-			    register_is_const(&state->stack[spi].spilled_ptr))
-				sanitize = true;
-			for (i = 0; i < BPF_REG_SIZE; i++)
-				if (state->stack[spi].slot_type[i] == STACK_MISC) {
-					sanitize = true;
-					break;
-				}
-			if (sanitize) {
-				int *poff = &env->insn_aux_data[insn_idx].sanitize_stack_off;
-				int soff = (-spi - 1) * BPF_REG_SIZE;
-
-				/* detected reuse of integer stack slot with a pointer
-				 * which means either llvm is reusing stack slot or
-				 * an attacker is trying to exploit CVE-2018-3639
-				 * (speculative store bypass)
-				 * Have to sanitize that slot with preemptive
-				 * store of zero.
-				 */
-				if (*poff && *poff != soff) {
-					/* disallow programs where single insn stores
-					 * into two different stack slots, since verifier
-					 * cannot sanitize them
-					 */
-					verbose(env,
-						"insn %d cannot access two stack slots fp%d and fp%d",
-						insn_idx, *poff, soff);
-					return -EINVAL;
-				}
-				*poff = soff;
-			}
-		}
 		save_register_state(state, spi, reg);
 	} else {
 		u8 type = STACK_MISC;
@@ -8854,35 +8830,33 @@ static int convert_ctx_accesses(struct b
 
 	for (i = 0; i < insn_cnt; i++, insn++) {
 		bpf_convert_ctx_access_t convert_ctx_access;
+		bool ctx_access;
 
 		if (insn->code == (BPF_LDX | BPF_MEM | BPF_B) ||
 		    insn->code == (BPF_LDX | BPF_MEM | BPF_H) ||
 		    insn->code == (BPF_LDX | BPF_MEM | BPF_W) ||
-		    insn->code == (BPF_LDX | BPF_MEM | BPF_DW))
+		    insn->code == (BPF_LDX | BPF_MEM | BPF_DW)) {
 			type = BPF_READ;
-		else if (insn->code == (BPF_STX | BPF_MEM | BPF_B) ||
-			 insn->code == (BPF_STX | BPF_MEM | BPF_H) ||
-			 insn->code == (BPF_STX | BPF_MEM | BPF_W) ||
-			 insn->code == (BPF_STX | BPF_MEM | BPF_DW))
+			ctx_access = true;
+		} else if (insn->code == (BPF_STX | BPF_MEM | BPF_B) ||
+			   insn->code == (BPF_STX | BPF_MEM | BPF_H) ||
+			   insn->code == (BPF_STX | BPF_MEM | BPF_W) ||
+			   insn->code == (BPF_STX | BPF_MEM | BPF_DW) ||
+			   insn->code == (BPF_ST | BPF_MEM | BPF_B) ||
+			   insn->code == (BPF_ST | BPF_MEM | BPF_H) ||
+			   insn->code == (BPF_ST | BPF_MEM | BPF_W) ||
+			   insn->code == (BPF_ST | BPF_MEM | BPF_DW)) {
 			type = BPF_WRITE;
-		else
+			ctx_access = BPF_CLASS(insn->code) == BPF_STX;
+		} else {
 			continue;
+		}
 
 		if (type == BPF_WRITE &&
-		    env->insn_aux_data[i + delta].sanitize_stack_off) {
+		    env->insn_aux_data[i + delta].sanitize_stack_spill) {
 			struct bpf_insn patch[] = {
-				/* Sanitize suspicious stack slot with zero.
-				 * There are no memory dependencies for this store,
-				 * since it's only using frame pointer and immediate
-				 * constant of zero
-				 */
-				BPF_ST_MEM(BPF_DW, BPF_REG_FP,
-					   env->insn_aux_data[i + delta].sanitize_stack_off,
-					   0),
-				/* the original STX instruction will immediately
-				 * overwrite the same stack slot with appropriate value
-				 */
 				*insn,
+				BPF_ST_NOSPEC(),
 			};
 
 			cnt = ARRAY_SIZE(patch);
@@ -8896,6 +8870,9 @@ static int convert_ctx_accesses(struct b
 			continue;
 		}
 
+		if (!ctx_access)
+			continue;
+
 		switch (env->insn_aux_data[i + delta].ptr_type) {
 		case PTR_TO_CTX:
 			if (!ops->convert_ctx_access)



  parent reply	other threads:[~2021-09-13 13:27 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-13 13:13 [PATCH 5.4 000/144] 5.4.146-rc1 review Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 001/144] locking/mutex: Fix HANDOFF condition Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 002/144] regmap: fix the offset of register error log Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 003/144] crypto: mxs-dcp - Check for DMA mapping errors Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 004/144] sched/deadline: Fix reset_on_fork reporting of DL tasks Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 005/144] power: supply: axp288_fuel_gauge: Report register-address on readb / writeb errors Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 006/144] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 007/144] sched/deadline: Fix missing clock update in migrate_task_rq_dl() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 008/144] rcu/tree: Handle VM stoppage in stall detection Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 009/144] posix-cpu-timers: Force next expiration recalc after itimer reset Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 010/144] hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 011/144] hrtimer: Ensure timerfd notification for HIGHRES=n Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 012/144] udf: Check LVID earlier Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 013/144] udf: Fix iocharset=utf8 mount option Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 014/144] isofs: joliet: " Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 015/144] bcache: add proper error unwinding in bcache_device_init Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 016/144] nvme-tcp: dont update queue count when failing to set io queues Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 017/144] nvme-rdma: " Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 018/144] nvmet: pass back cntlid on successful completion Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 019/144] power: supply: max17042_battery: fix typo in MAx17042_TOFF Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 020/144] s390/cio: add dev_busid sysfs entry for each subchannel Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 021/144] libata: fix ata_host_start() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 022/144] crypto: qat - do not ignore errors from enable_vf2pf_comms() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 023/144] crypto: qat - handle both source of interrupt in VF ISR Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 024/144] crypto: qat - fix reuse of completion variable Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 025/144] crypto: qat - fix naming for init/shutdown VF to PF notifications Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 026/144] crypto: qat - do not export adf_iov_putmsg() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 027/144] fcntl: fix potential deadlock for &fasync_struct.fa_lock Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 028/144] udf_get_extendedattr() had no boundary checks Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 029/144] s390/kasan: fix large PMD pages address alignment check Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 030/144] s390/debug: fix debug area life cycle Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 031/144] m68k: emu: Fix invalid free in nfeth_cleanup() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 032/144] sched: Fix UCLAMP_FLAG_IDLE setting Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 033/144] spi: spi-fsl-dspi: Fix issue with uninitialized dma_slave_config Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 034/144] spi: spi-pic32: " Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 035/144] genirq/timings: Fix error return code in irq_timings_test_irqs() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 036/144] lib/mpi: use kcalloc in mpi_resize Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 037/144] clocksource/drivers/sh_cmt: Fix wrong setting if dont request IRQ for clock source channel Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 038/144] block: nbd: add sanity check for first_minor Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 039/144] crypto: qat - use proper type for vf_mask Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 040/144] certs: Trigger creation of RSA module signing key if its not an RSA key Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 041/144] regulator: vctrl: Use locked regulator_get_voltage in probe path Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 042/144] regulator: vctrl: Avoid lockdep warning in enable/disable ops Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 043/144] spi: sprd: Fix the wrong WDG_LOAD_VAL Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 044/144] spi: spi-zynq-qspi: use wait_for_completion_timeout to make zynq_qspi_exec_mem_op not interruptible Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 045/144] EDAC/i10nm: Fix NVDIMM detection Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 046/144] drm/panfrost: Fix missing clk_disable_unprepare() on error in panfrost_clk_init() Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 047/144] media: TDA1997x: enable EDID support Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 048/144] soc: rockchip: ROCKCHIP_GRF should not default to y, unconditionally Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 049/144] media: cxd2880-spi: Fix an error handling path Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 050/144] bpf: Fix a typo of reuseport map in bpf.h Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 051/144] bpf: Fix potential memleak and UAF in the verifier Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 052/144] ARM: dts: aspeed-g6: Fix HVI3C function-group in pinctrl dtsi Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 053/144] arm64: dts: renesas: r8a77995: draak: Remove bogus adv7511w properties Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 054/144] soc: qcom: rpmhpd: Use corner in power_off Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 055/144] media: dvb-usb: fix uninit-value in dvb_usb_adapter_dvb_init Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 056/144] media: dvb-usb: fix uninit-value in vp702x_read_mac_addr Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 057/144] media: dvb-usb: Fix error handling in dvb_usb_i2c_init Greg Kroah-Hartman
2021-09-13 13:13 ` [PATCH 5.4 058/144] media: go7007: remove redundant initialization Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 059/144] media: coda: fix frame_mem_ctrl for YUV420 and YVU420 formats Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 060/144] Bluetooth: sco: prevent information leak in sco_conn_defer_accept() Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 061/144] 6lowpan: iphc: Fix an off-by-one check of array index Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 062/144] netns: protect netns ID lookups with RCU Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 063/144] drm/amdgpu/acp: Make PM domain really work Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 064/144] tcp: seq_file: Avoid skipping sk during tcp_seek_last_pos Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 065/144] ARM: dts: meson8: Use a higher default GPU clock frequency Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 066/144] ARM: dts: meson8b: odroidc1: Fix the pwm regulator supply properties Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 067/144] ARM: dts: meson8b: mxq: " Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 068/144] ARM: dts: meson8b: ec100: " Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 069/144] net/mlx5e: Prohibit inner indir TIRs in IPoIB Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 070/144] cgroup/cpuset: Fix a partition bug with hotplug Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 071/144] net: cipso: fix warnings in netlbl_cipsov4_add_std Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 072/144] i2c: highlander: add IRQ check Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 073/144] leds: lt3593: Put fwnode in any case during ->probe() Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 074/144] leds: trigger: audio: Add an activate callback to ensure the initial brightness is set Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 075/144] media: em28xx-input: fix refcount bug in em28xx_usb_disconnect Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 076/144] media: venus: venc: Fix potential null pointer dereference on pointer fmt Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 077/144] PCI: PM: Avoid forcing PCI_D0 for wakeup reasons inconsistently Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 078/144] PCI: PM: Enable PME if it can be signaled from D3cold Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 079/144] soc: qcom: smsm: Fix missed interrupts if state changes while masked Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 080/144] debugfs: Return error during {full/open}_proxy_open() on rmmod Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 081/144] Bluetooth: increase BTNAMSIZ to 21 chars to fix potential buffer overflow Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 082/144] PM: EM: Increase energy calculation precision Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 083/144] drm/msm/dpu: make dpu_hw_ctl_clear_all_blendstages clear necessary LMs Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 084/144] arm64: dts: exynos: correct GIC CPU interfaces address range on Exynos7 Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 085/144] counter: 104-quad-8: Return error when invalid mode during ceiling_write Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 086/144] Bluetooth: fix repeated calls to sco_sock_kill Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 087/144] drm/msm/dsi: Fix some reference counted resource leaks Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 088/144] usb: gadget: udc: at91: add IRQ check Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 089/144] usb: phy: fsl-usb: " Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 090/144] usb: phy: twl6030: add IRQ checks Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 091/144] usb: gadget: udc: renesas_usb3: Fix soc_device_match() abuse Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 092/144] Bluetooth: Move shutdown callback before flushing tx and rx queue Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 093/144] usb: host: ohci-tmio: add IRQ check Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 094/144] usb: phy: tahvo: " Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 095/144] mac80211: Fix insufficient headroom issue for AMSDU Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 096/144] lockd: Fix invalid lockowner cast after vfs_test_lock Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 097/144] nfsd4: Fix forced-expiry locking Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 098/144] usb: gadget: mv_u3d: request_irq() after initializing UDC Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 099/144] mm/swap: consider max pages in iomap_swapfile_add_extent Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 100/144] Bluetooth: add timeout sanity check to hci_inquiry Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 101/144] i2c: iop3xx: fix deferred probing Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 102/144] i2c: s3c2410: fix IRQ check Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 103/144] rsi: fix error code in rsi_load_9116_firmware() Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 104/144] rsi: fix an error code in rsi_probe() Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 105/144] ASoC: Intel: Skylake: Leave data as is when invoking TLV IPCs Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 106/144] ASoC: Intel: Skylake: Fix module resource and format selection Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 107/144] mmc: dw_mmc: Fix issue with uninitialized dma_slave_config Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 108/144] mmc: moxart: " Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 109/144] bpf: Fix possible out of bound write in narrow load handling Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 110/144] CIFS: Fix a potencially linear read overflow Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 111/144] i2c: mt65xx: fix IRQ check Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 112/144] usb: ehci-orion: Handle errors of clk_prepare_enable() in probe Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 113/144] usb: bdc: Fix an error handling path in bdc_probe() when no suitable DMA config is available Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 114/144] tty: serial: fsl_lpuart: fix the wrong mapbase value Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 115/144] ASoC: wcd9335: Fix a double irq free in the remove function Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 116/144] ASoC: wcd9335: Fix a memory leak in the error handling path of the probe function Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 117/144] ASoC: wcd9335: Disable irq on slave ports in the remove function Greg Kroah-Hartman
2021-09-13 13:14 ` [PATCH 5.4 118/144] ath6kl: wmi: fix an error code in ath6kl_wmi_sync_point() Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 119/144] bcma: Fix memory leak for internally-handled cores Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 120/144] brcmfmac: pcie: fix oops on failure to resume and reprobe Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 121/144] ipv6: make exception cache less predictible Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 122/144] ipv4: " Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 123/144] net: sched: Fix qdisc_rate_table refcount leak when get tcf_block failed Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 124/144] net: qualcomm: fix QCA7000 checksum handling Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 125/144] octeontx2-af: Fix loop in free and unmap counter Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 126/144] ipv4: fix endianness issue in inet_rtm_getroute_build_skb() Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 127/144] bpf: Introduce BPF nospec instruction for mitigating Spectre v4 Greg Kroah-Hartman
2021-09-13 13:15 ` Greg Kroah-Hartman [this message]
2021-09-13 13:15 ` [PATCH 5.4 129/144] bpf: verifier: Allocate idmap scratch in verifier env Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 130/144] bpf: Fix pointer arithmetic mask tightening under state pruning Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 131/144] time: Handle negative seconds correctly in timespec64_to_ns() Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 132/144] tty: Fix data race between tiocsti() and flush_to_ldisc() Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 133/144] perf/x86/amd/ibs: Extend PERF_PMU_CAP_NO_EXCLUDE to IBS Op Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 134/144] x86/resctrl: Fix a maybe-uninitialized build warning treated as error Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 135/144] KVM: s390: index kvm->arch.idle_mask by vcpu_idx Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 136/144] KVM: x86: Update vCPUs hv_clock before back to guest when tsc_offset is adjusted Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 137/144] KVM: nVMX: Unconditionally clear nested.pi_pending on nested VM-Enter Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 138/144] fuse: truncate pagecache on atomic_o_trunc Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 139/144] fuse: flush extending writes Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 140/144] IMA: remove -Wmissing-prototypes warning Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 141/144] IMA: remove the dependency on CRYPTO_MD5 Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 142/144] fbmem: dont allow too huge resolutions Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 143/144] backlight: pwm_bl: Improve bootloader/kernel device handover Greg Kroah-Hartman
2021-09-13 13:15 ` [PATCH 5.4 144/144] clk: kirkwood: Fix a clocking boot regression Greg Kroah-Hartman
2021-09-13 17:17 ` [PATCH 5.4 000/144] 5.4.146-rc1 review Florian Fainelli
2021-09-13 20:08 ` Shuah Khan
2021-09-14  7:48 ` Jon Hunter
2021-09-14  8:24 ` Naresh Kamboju
2021-09-14 15:56 ` Guenter Roeck
2021-09-14 18:54 ` Sudip Mukherjee
2021-09-15  2:05 ` Samuel Zou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210913131052.206766091@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=ast@kernel.org \
    --cc=benedict.schlueter@rub.de \
    --cc=daniel@iogearbox.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ovidiu.panait@windriver.com \
    --cc=piotras@gmail.com \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox