From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Hao Luo <haoluo@google.com>,
Alexei Starovoitov <ast@kernel.org>
Subject: [PATCH 5.16 005/227] bpf: Replace PTR_TO_XXX_OR_NULL with PTR_TO_XXX | PTR_MAYBE_NULL
Date: Mon, 21 Feb 2022 09:47:04 +0100 [thread overview]
Message-ID: <20220221084935.012190750@linuxfoundation.org> (raw)
In-Reply-To: <20220221084934.836145070@linuxfoundation.org>
From: Hao Luo <haoluo@google.com>
commit c25b2ae136039ffa820c26138ed4a5e5f3ab3841 upstream.
We have introduced a new type to make bpf_reg composable, by
allocating bits in the type to represent flags.
One of the flags is PTR_MAYBE_NULL which indicates a pointer
may be NULL. This patch switches the qualified reg_types to
use this flag. The reg_types changed in this patch include:
1. PTR_TO_MAP_VALUE_OR_NULL
2. PTR_TO_SOCKET_OR_NULL
3. PTR_TO_SOCK_COMMON_OR_NULL
4. PTR_TO_TCP_SOCK_OR_NULL
5. PTR_TO_BTF_ID_OR_NULL
6. PTR_TO_MEM_OR_NULL
7. PTR_TO_RDONLY_BUF_OR_NULL
8. PTR_TO_RDWR_BUF_OR_NULL
[haoluo: backport notes
There was a reg_type_may_be_null() in adjust_ptr_min_max_vals() in
5.16.x, but didn't exist in the upstream commit. This backport
converted that reg_type_may_be_null() to type_may_be_null() as well.]
Signed-off-by: Hao Luo <haoluo@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/r/20211217003152.48334-5-haoluo@google.com
Cc: stable@vger.kernel.org # 5.16.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/bpf.h | 18 +-
include/linux/bpf_verifier.h | 4
kernel/bpf/btf.c | 7 -
kernel/bpf/map_iter.c | 4
kernel/bpf/verifier.c | 297 ++++++++++++++++++-------------------------
net/core/bpf_sk_storage.c | 2
net/core/sock_map.c | 2
7 files changed, 148 insertions(+), 186 deletions(-)
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -465,18 +465,15 @@ enum bpf_reg_type {
PTR_TO_CTX, /* reg points to bpf_context */
CONST_PTR_TO_MAP, /* reg points to struct bpf_map */
PTR_TO_MAP_VALUE, /* reg points to map element value */
- PTR_TO_MAP_VALUE_OR_NULL,/* points to map elem value or NULL */
+ PTR_TO_MAP_KEY, /* reg points to a map element key */
PTR_TO_STACK, /* reg == frame_pointer + offset */
PTR_TO_PACKET_META, /* skb->data - meta_len */
PTR_TO_PACKET, /* reg points to skb->data */
PTR_TO_PACKET_END, /* skb->data + headlen */
PTR_TO_FLOW_KEYS, /* reg points to bpf_flow_keys */
PTR_TO_SOCKET, /* reg points to struct bpf_sock */
- PTR_TO_SOCKET_OR_NULL, /* reg points to struct bpf_sock or NULL */
PTR_TO_SOCK_COMMON, /* reg points to sock_common */
- PTR_TO_SOCK_COMMON_OR_NULL, /* reg points to sock_common or NULL */
PTR_TO_TCP_SOCK, /* reg points to struct tcp_sock */
- PTR_TO_TCP_SOCK_OR_NULL, /* reg points to struct tcp_sock or NULL */
PTR_TO_TP_BUFFER, /* reg points to a writable raw tp's buffer */
PTR_TO_XDP_SOCK, /* reg points to struct xdp_sock */
/* PTR_TO_BTF_ID points to a kernel struct that does not need
@@ -494,18 +491,21 @@ enum bpf_reg_type {
* been checked for null. Used primarily to inform the verifier
* an explicit null check is required for this struct.
*/
- PTR_TO_BTF_ID_OR_NULL,
PTR_TO_MEM, /* reg points to valid memory region */
- PTR_TO_MEM_OR_NULL, /* reg points to valid memory region or NULL */
PTR_TO_RDONLY_BUF, /* reg points to a readonly buffer */
- PTR_TO_RDONLY_BUF_OR_NULL, /* reg points to a readonly buffer or NULL */
PTR_TO_RDWR_BUF, /* reg points to a read/write buffer */
- PTR_TO_RDWR_BUF_OR_NULL, /* reg points to a read/write buffer or NULL */
PTR_TO_PERCPU_BTF_ID, /* reg points to a percpu kernel variable */
PTR_TO_FUNC, /* reg points to a bpf program function */
- PTR_TO_MAP_KEY, /* reg points to a map element key */
__BPF_REG_TYPE_MAX,
+ /* Extended reg_types. */
+ PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL | PTR_TO_MAP_VALUE,
+ PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCKET,
+ PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCK_COMMON,
+ PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL | PTR_TO_TCP_SOCK,
+ PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | PTR_TO_BTF_ID,
+ PTR_TO_MEM_OR_NULL = PTR_MAYBE_NULL | PTR_TO_MEM,
+
/* This must be the last entry. Its purpose is to ensure the enum is
* wide enough to hold the higher bits reserved for bpf_type_flag.
*/
--- a/include/linux/bpf_verifier.h
+++ b/include/linux/bpf_verifier.h
@@ -18,6 +18,8 @@
* that converting umax_value to int cannot overflow.
*/
#define BPF_MAX_VAR_SIZ (1 << 29)
+/* size of type_str_buf in bpf_verifier. */
+#define TYPE_STR_BUF_LEN 64
/* Liveness marks, used for registers and spilled-regs (in stack slots).
* Read marks propagate upwards until they find a write mark; they record that
@@ -474,6 +476,8 @@ struct bpf_verifier_env {
/* longest register parentage chain walked for liveness marking */
u32 longest_mark_read_walk;
bpfptr_t fd_array;
+ /* buffer used in reg_type_str() to generate reg_type string */
+ char type_str_buf[TYPE_STR_BUF_LEN];
};
__printf(2, 0) void bpf_verifier_vlog(struct bpf_verifier_log *log,
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -4928,10 +4928,13 @@ bool btf_ctx_access(int off, int size, e
/* check for PTR_TO_RDONLY_BUF_OR_NULL or PTR_TO_RDWR_BUF_OR_NULL */
for (i = 0; i < prog->aux->ctx_arg_info_size; i++) {
const struct bpf_ctx_arg_aux *ctx_arg_info = &prog->aux->ctx_arg_info[i];
+ u32 type, flag;
+ type = base_type(ctx_arg_info->reg_type);
+ flag = type_flag(ctx_arg_info->reg_type);
if (ctx_arg_info->offset == off &&
- (ctx_arg_info->reg_type == PTR_TO_RDONLY_BUF_OR_NULL ||
- ctx_arg_info->reg_type == PTR_TO_RDWR_BUF_OR_NULL)) {
+ (type == PTR_TO_RDWR_BUF || type == PTR_TO_RDONLY_BUF) &&
+ (flag & PTR_MAYBE_NULL)) {
info->reg_type = ctx_arg_info->reg_type;
return true;
}
--- a/kernel/bpf/map_iter.c
+++ b/kernel/bpf/map_iter.c
@@ -174,9 +174,9 @@ static const struct bpf_iter_reg bpf_map
.ctx_arg_info_size = 2,
.ctx_arg_info = {
{ offsetof(struct bpf_iter__bpf_map_elem, key),
- PTR_TO_RDONLY_BUF_OR_NULL },
+ PTR_TO_RDONLY_BUF | PTR_MAYBE_NULL },
{ offsetof(struct bpf_iter__bpf_map_elem, value),
- PTR_TO_RDWR_BUF_OR_NULL },
+ PTR_TO_RDWR_BUF | PTR_MAYBE_NULL },
},
};
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -439,18 +439,6 @@ static bool reg_type_not_null(enum bpf_r
type == PTR_TO_SOCK_COMMON;
}
-static bool reg_type_may_be_null(enum bpf_reg_type type)
-{
- return type == PTR_TO_MAP_VALUE_OR_NULL ||
- type == PTR_TO_SOCKET_OR_NULL ||
- type == PTR_TO_SOCK_COMMON_OR_NULL ||
- type == PTR_TO_TCP_SOCK_OR_NULL ||
- type == PTR_TO_BTF_ID_OR_NULL ||
- type == PTR_TO_MEM_OR_NULL ||
- type == PTR_TO_RDONLY_BUF_OR_NULL ||
- type == PTR_TO_RDWR_BUF_OR_NULL;
-}
-
static bool reg_may_point_to_spin_lock(const struct bpf_reg_state *reg)
{
return reg->type == PTR_TO_MAP_VALUE &&
@@ -459,12 +447,9 @@ static bool reg_may_point_to_spin_lock(c
static bool reg_type_may_be_refcounted_or_null(enum bpf_reg_type type)
{
- return type == PTR_TO_SOCKET ||
- type == PTR_TO_SOCKET_OR_NULL ||
- type == PTR_TO_TCP_SOCK ||
- type == PTR_TO_TCP_SOCK_OR_NULL ||
- type == PTR_TO_MEM ||
- type == PTR_TO_MEM_OR_NULL;
+ return base_type(type) == PTR_TO_SOCKET ||
+ base_type(type) == PTR_TO_TCP_SOCK ||
+ base_type(type) == PTR_TO_MEM;
}
static bool arg_type_may_be_refcounted(enum bpf_arg_type type)
@@ -534,39 +519,52 @@ static bool is_cmpxchg_insn(const struct
insn->imm == BPF_CMPXCHG;
}
-/* string representation of 'enum bpf_reg_type' */
-static const char * const reg_type_str[] = {
- [NOT_INIT] = "?",
- [SCALAR_VALUE] = "inv",
- [PTR_TO_CTX] = "ctx",
- [CONST_PTR_TO_MAP] = "map_ptr",
- [PTR_TO_MAP_VALUE] = "map_value",
- [PTR_TO_MAP_VALUE_OR_NULL] = "map_value_or_null",
- [PTR_TO_STACK] = "fp",
- [PTR_TO_PACKET] = "pkt",
- [PTR_TO_PACKET_META] = "pkt_meta",
- [PTR_TO_PACKET_END] = "pkt_end",
- [PTR_TO_FLOW_KEYS] = "flow_keys",
- [PTR_TO_SOCKET] = "sock",
- [PTR_TO_SOCKET_OR_NULL] = "sock_or_null",
- [PTR_TO_SOCK_COMMON] = "sock_common",
- [PTR_TO_SOCK_COMMON_OR_NULL] = "sock_common_or_null",
- [PTR_TO_TCP_SOCK] = "tcp_sock",
- [PTR_TO_TCP_SOCK_OR_NULL] = "tcp_sock_or_null",
- [PTR_TO_TP_BUFFER] = "tp_buffer",
- [PTR_TO_XDP_SOCK] = "xdp_sock",
- [PTR_TO_BTF_ID] = "ptr_",
- [PTR_TO_BTF_ID_OR_NULL] = "ptr_or_null_",
- [PTR_TO_PERCPU_BTF_ID] = "percpu_ptr_",
- [PTR_TO_MEM] = "mem",
- [PTR_TO_MEM_OR_NULL] = "mem_or_null",
- [PTR_TO_RDONLY_BUF] = "rdonly_buf",
- [PTR_TO_RDONLY_BUF_OR_NULL] = "rdonly_buf_or_null",
- [PTR_TO_RDWR_BUF] = "rdwr_buf",
- [PTR_TO_RDWR_BUF_OR_NULL] = "rdwr_buf_or_null",
- [PTR_TO_FUNC] = "func",
- [PTR_TO_MAP_KEY] = "map_key",
-};
+/* string representation of 'enum bpf_reg_type'
+ *
+ * Note that reg_type_str() can not appear more than once in a single verbose()
+ * statement.
+ */
+static const char *reg_type_str(struct bpf_verifier_env *env,
+ enum bpf_reg_type type)
+{
+ char postfix[16] = {0};
+ static const char * const str[] = {
+ [NOT_INIT] = "?",
+ [SCALAR_VALUE] = "inv",
+ [PTR_TO_CTX] = "ctx",
+ [CONST_PTR_TO_MAP] = "map_ptr",
+ [PTR_TO_MAP_VALUE] = "map_value",
+ [PTR_TO_STACK] = "fp",
+ [PTR_TO_PACKET] = "pkt",
+ [PTR_TO_PACKET_META] = "pkt_meta",
+ [PTR_TO_PACKET_END] = "pkt_end",
+ [PTR_TO_FLOW_KEYS] = "flow_keys",
+ [PTR_TO_SOCKET] = "sock",
+ [PTR_TO_SOCK_COMMON] = "sock_common",
+ [PTR_TO_TCP_SOCK] = "tcp_sock",
+ [PTR_TO_TP_BUFFER] = "tp_buffer",
+ [PTR_TO_XDP_SOCK] = "xdp_sock",
+ [PTR_TO_BTF_ID] = "ptr_",
+ [PTR_TO_PERCPU_BTF_ID] = "percpu_ptr_",
+ [PTR_TO_MEM] = "mem",
+ [PTR_TO_RDONLY_BUF] = "rdonly_buf",
+ [PTR_TO_RDWR_BUF] = "rdwr_buf",
+ [PTR_TO_FUNC] = "func",
+ [PTR_TO_MAP_KEY] = "map_key",
+ };
+
+ if (type & PTR_MAYBE_NULL) {
+ if (base_type(type) == PTR_TO_BTF_ID ||
+ base_type(type) == PTR_TO_PERCPU_BTF_ID)
+ strncpy(postfix, "or_null_", 16);
+ else
+ strncpy(postfix, "_or_null", 16);
+ }
+
+ snprintf(env->type_str_buf, TYPE_STR_BUF_LEN, "%s%s",
+ str[base_type(type)], postfix);
+ return env->type_str_buf;
+}
static char slot_type_char[] = {
[STACK_INVALID] = '?',
@@ -631,7 +629,7 @@ static void print_verifier_state(struct
continue;
verbose(env, " R%d", i);
print_liveness(env, reg->live);
- verbose(env, "=%s", reg_type_str[t]);
+ verbose(env, "=%s", reg_type_str(env, t));
if (t == SCALAR_VALUE && reg->precise)
verbose(env, "P");
if ((t == SCALAR_VALUE || t == PTR_TO_STACK) &&
@@ -639,9 +637,8 @@ static void print_verifier_state(struct
/* reg->off should be 0 for SCALAR_VALUE */
verbose(env, "%lld", reg->var_off.value + reg->off);
} else {
- if (t == PTR_TO_BTF_ID ||
- t == PTR_TO_BTF_ID_OR_NULL ||
- t == PTR_TO_PERCPU_BTF_ID)
+ if (base_type(t) == PTR_TO_BTF_ID ||
+ base_type(t) == PTR_TO_PERCPU_BTF_ID)
verbose(env, "%s", kernel_type_name(reg->btf, reg->btf_id));
verbose(env, "(id=%d", reg->id);
if (reg_type_may_be_refcounted_or_null(t))
@@ -650,10 +647,9 @@ static void print_verifier_state(struct
verbose(env, ",off=%d", reg->off);
if (type_is_pkt_pointer(t))
verbose(env, ",r=%d", reg->range);
- else if (t == CONST_PTR_TO_MAP ||
- t == PTR_TO_MAP_KEY ||
- t == PTR_TO_MAP_VALUE ||
- t == PTR_TO_MAP_VALUE_OR_NULL)
+ else if (base_type(t) == CONST_PTR_TO_MAP ||
+ base_type(t) == PTR_TO_MAP_KEY ||
+ base_type(t) == PTR_TO_MAP_VALUE)
verbose(env, ",ks=%d,vs=%d",
reg->map_ptr->key_size,
reg->map_ptr->value_size);
@@ -723,7 +719,7 @@ static void print_verifier_state(struct
if (is_spilled_reg(&state->stack[i])) {
reg = &state->stack[i].spilled_ptr;
t = reg->type;
- verbose(env, "=%s", reg_type_str[t]);
+ verbose(env, "=%s", reg_type_str(env, t));
if (t == SCALAR_VALUE && reg->precise)
verbose(env, "P");
if (t == SCALAR_VALUE && tnum_is_const(reg->var_off))
@@ -1136,8 +1132,7 @@ static void mark_reg_known_zero(struct b
static void mark_ptr_not_null_reg(struct bpf_reg_state *reg)
{
- switch (reg->type) {
- case PTR_TO_MAP_VALUE_OR_NULL: {
+ if (base_type(reg->type) == PTR_TO_MAP_VALUE) {
const struct bpf_map *map = reg->map_ptr;
if (map->inner_map_meta) {
@@ -1156,32 +1151,10 @@ static void mark_ptr_not_null_reg(struct
} else {
reg->type = PTR_TO_MAP_VALUE;
}
- break;
- }
- case PTR_TO_SOCKET_OR_NULL:
- reg->type = PTR_TO_SOCKET;
- break;
- case PTR_TO_SOCK_COMMON_OR_NULL:
- reg->type = PTR_TO_SOCK_COMMON;
- break;
- case PTR_TO_TCP_SOCK_OR_NULL:
- reg->type = PTR_TO_TCP_SOCK;
- break;
- case PTR_TO_BTF_ID_OR_NULL:
- reg->type = PTR_TO_BTF_ID;
- break;
- case PTR_TO_MEM_OR_NULL:
- reg->type = PTR_TO_MEM;
- break;
- case PTR_TO_RDONLY_BUF_OR_NULL:
- reg->type = PTR_TO_RDONLY_BUF;
- break;
- case PTR_TO_RDWR_BUF_OR_NULL:
- reg->type = PTR_TO_RDWR_BUF;
- break;
- default:
- WARN_ONCE(1, "unknown nullable register type");
+ return;
}
+
+ reg->type &= ~PTR_MAYBE_NULL;
}
static bool reg_is_pkt_pointer(const struct bpf_reg_state *reg)
@@ -2042,7 +2015,7 @@ static int mark_reg_read(struct bpf_veri
break;
if (parent->live & REG_LIVE_DONE) {
verbose(env, "verifier BUG type %s var_off %lld off %d\n",
- reg_type_str[parent->type],
+ reg_type_str(env, parent->type),
parent->var_off.value, parent->off);
return -EFAULT;
}
@@ -2701,9 +2674,8 @@ static int mark_chain_precision_stack(st
static bool is_spillable_regtype(enum bpf_reg_type type)
{
- switch (type) {
+ switch (base_type(type)) {
case PTR_TO_MAP_VALUE:
- case PTR_TO_MAP_VALUE_OR_NULL:
case PTR_TO_STACK:
case PTR_TO_CTX:
case PTR_TO_PACKET:
@@ -2712,21 +2684,14 @@ static bool is_spillable_regtype(enum bp
case PTR_TO_FLOW_KEYS:
case CONST_PTR_TO_MAP:
case PTR_TO_SOCKET:
- case PTR_TO_SOCKET_OR_NULL:
case PTR_TO_SOCK_COMMON:
- case PTR_TO_SOCK_COMMON_OR_NULL:
case PTR_TO_TCP_SOCK:
- case PTR_TO_TCP_SOCK_OR_NULL:
case PTR_TO_XDP_SOCK:
case PTR_TO_BTF_ID:
- case PTR_TO_BTF_ID_OR_NULL:
case PTR_TO_RDONLY_BUF:
- case PTR_TO_RDONLY_BUF_OR_NULL:
case PTR_TO_RDWR_BUF:
- case PTR_TO_RDWR_BUF_OR_NULL:
case PTR_TO_PERCPU_BTF_ID:
case PTR_TO_MEM:
- case PTR_TO_MEM_OR_NULL:
case PTR_TO_FUNC:
case PTR_TO_MAP_KEY:
return true;
@@ -3567,7 +3532,7 @@ static int check_ctx_access(struct bpf_v
*/
*reg_type = info.reg_type;
- if (*reg_type == PTR_TO_BTF_ID || *reg_type == PTR_TO_BTF_ID_OR_NULL) {
+ if (base_type(*reg_type) == PTR_TO_BTF_ID) {
*btf = info.btf;
*btf_id = info.btf_id;
} else {
@@ -3635,7 +3600,7 @@ static int check_sock_access(struct bpf_
}
verbose(env, "R%d invalid %s access off=%d size=%d\n",
- regno, reg_type_str[reg->type], off, size);
+ regno, reg_type_str(env, reg->type), off, size);
return -EACCES;
}
@@ -4400,7 +4365,7 @@ static int check_mem_access(struct bpf_v
} else {
mark_reg_known_zero(env, regs,
value_regno);
- if (reg_type_may_be_null(reg_type))
+ if (type_may_be_null(reg_type))
regs[value_regno].id = ++env->id_gen;
/* A load of ctx field could have different
* actual load size with the one encoded in the
@@ -4408,8 +4373,7 @@ static int check_mem_access(struct bpf_v
* a sub-register.
*/
regs[value_regno].subreg_def = DEF_NOT_SUBREG;
- if (reg_type == PTR_TO_BTF_ID ||
- reg_type == PTR_TO_BTF_ID_OR_NULL) {
+ if (base_type(reg_type) == PTR_TO_BTF_ID) {
regs[value_regno].btf = btf;
regs[value_regno].btf_id = btf_id;
}
@@ -4462,7 +4426,7 @@ static int check_mem_access(struct bpf_v
} else if (type_is_sk_pointer(reg->type)) {
if (t == BPF_WRITE) {
verbose(env, "R%d cannot write into %s\n",
- regno, reg_type_str[reg->type]);
+ regno, reg_type_str(env, reg->type));
return -EACCES;
}
err = check_sock_access(env, insn_idx, regno, off, size, t);
@@ -4481,7 +4445,7 @@ static int check_mem_access(struct bpf_v
} else if (reg->type == PTR_TO_RDONLY_BUF) {
if (t == BPF_WRITE) {
verbose(env, "R%d cannot write into %s\n",
- regno, reg_type_str[reg->type]);
+ regno, reg_type_str(env, reg->type));
return -EACCES;
}
err = check_buffer_access(env, reg, regno, off, size, false,
@@ -4497,7 +4461,7 @@ static int check_mem_access(struct bpf_v
mark_reg_unknown(env, regs, value_regno);
} else {
verbose(env, "R%d invalid mem access '%s'\n", regno,
- reg_type_str[reg->type]);
+ reg_type_str(env, reg->type));
return -EACCES;
}
@@ -4571,7 +4535,7 @@ static int check_atomic(struct bpf_verif
is_sk_reg(env, insn->dst_reg)) {
verbose(env, "BPF_ATOMIC stores into R%d %s is not allowed\n",
insn->dst_reg,
- reg_type_str[reg_state(env, insn->dst_reg)->type]);
+ reg_type_str(env, reg_state(env, insn->dst_reg)->type));
return -EACCES;
}
@@ -4797,9 +4761,9 @@ static int check_helper_mem_access(struc
register_is_null(reg))
return 0;
- verbose(env, "R%d type=%s expected=%s\n", regno,
- reg_type_str[reg->type],
- reg_type_str[PTR_TO_STACK]);
+ verbose(env, "R%d type=%s ", regno,
+ reg_type_str(env, reg->type));
+ verbose(env, "expected=%s\n", reg_type_str(env, PTR_TO_STACK));
return -EACCES;
}
}
@@ -4810,7 +4774,7 @@ int check_mem_reg(struct bpf_verifier_en
if (register_is_null(reg))
return 0;
- if (reg_type_may_be_null(reg->type)) {
+ if (type_may_be_null(reg->type)) {
/* Assuming that the register contains a value check if the memory
* access is safe. Temporarily save and restore the register's state as
* the conversion shouldn't be visible to a caller.
@@ -5144,10 +5108,10 @@ static int check_reg_type(struct bpf_ver
goto found;
}
- verbose(env, "R%d type=%s expected=", regno, reg_type_str[type]);
+ verbose(env, "R%d type=%s expected=", regno, reg_type_str(env, type));
for (j = 0; j + 1 < i; j++)
- verbose(env, "%s, ", reg_type_str[compatible->types[j]]);
- verbose(env, "%s\n", reg_type_str[compatible->types[j]]);
+ verbose(env, "%s, ", reg_type_str(env, compatible->types[j]));
+ verbose(env, "%s\n", reg_type_str(env, compatible->types[j]));
return -EACCES;
found:
@@ -6376,6 +6340,7 @@ static int check_helper_call(struct bpf_
{
const struct bpf_func_proto *fn = NULL;
enum bpf_return_type ret_type;
+ enum bpf_type_flag ret_flag;
struct bpf_reg_state *regs;
struct bpf_call_arg_meta meta;
int insn_idx = *insn_idx_p;
@@ -6510,6 +6475,7 @@ static int check_helper_call(struct bpf_
/* update return register (already marked as written above) */
ret_type = fn->ret_type;
+ ret_flag = type_flag(fn->ret_type);
if (ret_type == RET_INTEGER) {
/* sets type to SCALAR_VALUE */
mark_reg_unknown(env, regs, BPF_REG_0);
@@ -6529,25 +6495,23 @@ static int check_helper_call(struct bpf_
}
regs[BPF_REG_0].map_ptr = meta.map_ptr;
regs[BPF_REG_0].map_uid = meta.map_uid;
- if (type_may_be_null(ret_type)) {
- regs[BPF_REG_0].type = PTR_TO_MAP_VALUE_OR_NULL;
- } else {
- regs[BPF_REG_0].type = PTR_TO_MAP_VALUE;
- if (map_value_has_spin_lock(meta.map_ptr))
- regs[BPF_REG_0].id = ++env->id_gen;
+ regs[BPF_REG_0].type = PTR_TO_MAP_VALUE | ret_flag;
+ if (!type_may_be_null(ret_type) &&
+ map_value_has_spin_lock(meta.map_ptr)) {
+ regs[BPF_REG_0].id = ++env->id_gen;
}
} else if (base_type(ret_type) == RET_PTR_TO_SOCKET) {
mark_reg_known_zero(env, regs, BPF_REG_0);
- regs[BPF_REG_0].type = PTR_TO_SOCKET_OR_NULL;
+ regs[BPF_REG_0].type = PTR_TO_SOCKET | ret_flag;
} else if (base_type(ret_type) == RET_PTR_TO_SOCK_COMMON) {
mark_reg_known_zero(env, regs, BPF_REG_0);
- regs[BPF_REG_0].type = PTR_TO_SOCK_COMMON_OR_NULL;
+ regs[BPF_REG_0].type = PTR_TO_SOCK_COMMON | ret_flag;
} else if (base_type(ret_type) == RET_PTR_TO_TCP_SOCK) {
mark_reg_known_zero(env, regs, BPF_REG_0);
- regs[BPF_REG_0].type = PTR_TO_TCP_SOCK_OR_NULL;
+ regs[BPF_REG_0].type = PTR_TO_TCP_SOCK | ret_flag;
} else if (base_type(ret_type) == RET_PTR_TO_ALLOC_MEM) {
mark_reg_known_zero(env, regs, BPF_REG_0);
- regs[BPF_REG_0].type = PTR_TO_MEM_OR_NULL;
+ regs[BPF_REG_0].type = PTR_TO_MEM | ret_flag;
regs[BPF_REG_0].mem_size = meta.mem_size;
} else if (base_type(ret_type) == RET_PTR_TO_MEM_OR_BTF_ID) {
const struct btf_type *t;
@@ -6567,14 +6531,10 @@ static int check_helper_call(struct bpf_
tname, PTR_ERR(ret));
return -EINVAL;
}
- regs[BPF_REG_0].type =
- (ret_type & PTR_MAYBE_NULL) ?
- PTR_TO_MEM_OR_NULL : PTR_TO_MEM;
+ regs[BPF_REG_0].type = PTR_TO_MEM | ret_flag;
regs[BPF_REG_0].mem_size = tsize;
} else {
- regs[BPF_REG_0].type =
- (ret_type & PTR_MAYBE_NULL) ?
- PTR_TO_BTF_ID_OR_NULL : PTR_TO_BTF_ID;
+ regs[BPF_REG_0].type = PTR_TO_BTF_ID | ret_flag;
regs[BPF_REG_0].btf = meta.ret_btf;
regs[BPF_REG_0].btf_id = meta.ret_btf_id;
}
@@ -6582,9 +6542,7 @@ static int check_helper_call(struct bpf_
int ret_btf_id;
mark_reg_known_zero(env, regs, BPF_REG_0);
- regs[BPF_REG_0].type = (ret_type & PTR_MAYBE_NULL) ?
- PTR_TO_BTF_ID_OR_NULL :
- PTR_TO_BTF_ID;
+ regs[BPF_REG_0].type = PTR_TO_BTF_ID | ret_flag;
ret_btf_id = *fn->ret_btf_id;
if (ret_btf_id == 0) {
verbose(env, "invalid return type %u of func %s#%d\n",
@@ -6603,7 +6561,7 @@ static int check_helper_call(struct bpf_
return -EINVAL;
}
- if (reg_type_may_be_null(regs[BPF_REG_0].type))
+ if (type_may_be_null(regs[BPF_REG_0].type))
regs[BPF_REG_0].id = ++env->id_gen;
if (is_ptr_cast_function(func_id)) {
@@ -6812,25 +6770,25 @@ static bool check_reg_sane_offset(struct
if (known && (val >= BPF_MAX_VAR_OFF || val <= -BPF_MAX_VAR_OFF)) {
verbose(env, "math between %s pointer and %lld is not allowed\n",
- reg_type_str[type], val);
+ reg_type_str(env, type), val);
return false;
}
if (reg->off >= BPF_MAX_VAR_OFF || reg->off <= -BPF_MAX_VAR_OFF) {
verbose(env, "%s pointer offset %d is not allowed\n",
- reg_type_str[type], reg->off);
+ reg_type_str(env, type), reg->off);
return false;
}
if (smin == S64_MIN) {
verbose(env, "math between %s pointer and register with unbounded min value is not allowed\n",
- reg_type_str[type]);
+ reg_type_str(env, type));
return false;
}
if (smin >= BPF_MAX_VAR_OFF || smin <= -BPF_MAX_VAR_OFF) {
verbose(env, "value %lld makes %s pointer be out of bounds\n",
- smin, reg_type_str[type]);
+ smin, reg_type_str(env, type));
return false;
}
@@ -7207,11 +7165,13 @@ static int adjust_ptr_min_max_vals(struc
return -EACCES;
}
- switch (ptr_reg->type) {
- case PTR_TO_MAP_VALUE_OR_NULL:
+ if (ptr_reg->type & PTR_MAYBE_NULL) {
verbose(env, "R%d pointer arithmetic on %s prohibited, null-check it first\n",
- dst, reg_type_str[ptr_reg->type]);
+ dst, reg_type_str(env, ptr_reg->type));
return -EACCES;
+ }
+
+ switch (base_type(ptr_reg->type)) {
case CONST_PTR_TO_MAP:
/* smin_val represents the known value */
if (known && smin_val == 0 && opcode == BPF_ADD)
@@ -7224,10 +7184,10 @@ static int adjust_ptr_min_max_vals(struc
case PTR_TO_XDP_SOCK:
reject:
verbose(env, "R%d pointer arithmetic on %s prohibited\n",
- dst, reg_type_str[ptr_reg->type]);
+ dst, reg_type_str(env, ptr_reg->type));
return -EACCES;
default:
- if (reg_type_may_be_null(ptr_reg->type))
+ if (type_may_be_null(ptr_reg->type))
goto reject;
break;
}
@@ -8949,7 +8909,7 @@ static void mark_ptr_or_null_reg(struct
struct bpf_reg_state *reg, u32 id,
bool is_null)
{
- if (reg_type_may_be_null(reg->type) && reg->id == id &&
+ if (type_may_be_null(reg->type) && reg->id == id &&
!WARN_ON_ONCE(!reg->id)) {
if (WARN_ON_ONCE(reg->smin_value || reg->smax_value ||
!tnum_equals_const(reg->var_off, 0) ||
@@ -9327,7 +9287,7 @@ static int check_cond_jmp_op(struct bpf_
*/
if (!is_jmp32 && BPF_SRC(insn->code) == BPF_K &&
insn->imm == 0 && (opcode == BPF_JEQ || opcode == BPF_JNE) &&
- reg_type_may_be_null(dst_reg->type)) {
+ type_may_be_null(dst_reg->type)) {
/* Mark all identical registers in each branch as either
* safe or unknown depending R == 0 or R != 0 conditional.
*/
@@ -9584,7 +9544,7 @@ static int check_return_code(struct bpf_
/* enforce return zero from async callbacks like timer */
if (reg->type != SCALAR_VALUE) {
verbose(env, "In async callback the register R0 is not a known value (%s)\n",
- reg_type_str[reg->type]);
+ reg_type_str(env, reg->type));
return -EINVAL;
}
@@ -9598,7 +9558,7 @@ static int check_return_code(struct bpf_
if (is_subprog) {
if (reg->type != SCALAR_VALUE) {
verbose(env, "At subprogram exit the register R0 is not a scalar value (%s)\n",
- reg_type_str[reg->type]);
+ reg_type_str(env, reg->type));
return -EINVAL;
}
return 0;
@@ -9662,7 +9622,7 @@ static int check_return_code(struct bpf_
if (reg->type != SCALAR_VALUE) {
verbose(env, "At program exit the register R0 is not a known value (%s)\n",
- reg_type_str[reg->type]);
+ reg_type_str(env, reg->type));
return -EINVAL;
}
@@ -10443,7 +10403,7 @@ static bool regsafe(struct bpf_verifier_
return true;
if (rcur->type == NOT_INIT)
return false;
- switch (rold->type) {
+ switch (base_type(rold->type)) {
case SCALAR_VALUE:
if (env->explore_alu_limits)
return false;
@@ -10465,6 +10425,22 @@ static bool regsafe(struct bpf_verifier_
}
case PTR_TO_MAP_KEY:
case PTR_TO_MAP_VALUE:
+ /* a PTR_TO_MAP_VALUE could be safe to use as a
+ * PTR_TO_MAP_VALUE_OR_NULL into the same map.
+ * However, if the old PTR_TO_MAP_VALUE_OR_NULL then got NULL-
+ * checked, doing so could have affected others with the same
+ * id, and we can't check for that because we lost the id when
+ * we converted to a PTR_TO_MAP_VALUE.
+ */
+ if (type_may_be_null(rold->type)) {
+ if (!type_may_be_null(rcur->type))
+ return false;
+ if (memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)))
+ return false;
+ /* Check our ids match any regs they're supposed to */
+ return check_ids(rold->id, rcur->id, idmap);
+ }
+
/* If the new min/max/var_off satisfy the old ones and
* everything else matches, we are OK.
* 'id' is not compared, since it's only used for maps with
@@ -10476,20 +10452,6 @@ static bool regsafe(struct bpf_verifier_
return memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)) == 0 &&
range_within(rold, rcur) &&
tnum_in(rold->var_off, rcur->var_off);
- case PTR_TO_MAP_VALUE_OR_NULL:
- /* a PTR_TO_MAP_VALUE could be safe to use as a
- * PTR_TO_MAP_VALUE_OR_NULL into the same map.
- * However, if the old PTR_TO_MAP_VALUE_OR_NULL then got NULL-
- * checked, doing so could have affected others with the same
- * id, and we can't check for that because we lost the id when
- * we converted to a PTR_TO_MAP_VALUE.
- */
- if (rcur->type != PTR_TO_MAP_VALUE_OR_NULL)
- return false;
- if (memcmp(rold, rcur, offsetof(struct bpf_reg_state, id)))
- return false;
- /* Check our ids match any regs they're supposed to */
- return check_ids(rold->id, rcur->id, idmap);
case PTR_TO_PACKET_META:
case PTR_TO_PACKET:
if (rcur->type != rold->type)
@@ -10518,11 +10480,8 @@ static bool regsafe(struct bpf_verifier_
case PTR_TO_PACKET_END:
case PTR_TO_FLOW_KEYS:
case PTR_TO_SOCKET:
- case PTR_TO_SOCKET_OR_NULL:
case PTR_TO_SOCK_COMMON:
- case PTR_TO_SOCK_COMMON_OR_NULL:
case PTR_TO_TCP_SOCK:
- case PTR_TO_TCP_SOCK_OR_NULL:
case PTR_TO_XDP_SOCK:
/* Only valid matches are exact, which memcmp() above
* would have accepted
@@ -11048,17 +11007,13 @@ next:
/* Return true if it's OK to have the same insn return a different type. */
static bool reg_type_mismatch_ok(enum bpf_reg_type type)
{
- switch (type) {
+ switch (base_type(type)) {
case PTR_TO_CTX:
case PTR_TO_SOCKET:
- case PTR_TO_SOCKET_OR_NULL:
case PTR_TO_SOCK_COMMON:
- case PTR_TO_SOCK_COMMON_OR_NULL:
case PTR_TO_TCP_SOCK:
- case PTR_TO_TCP_SOCK_OR_NULL:
case PTR_TO_XDP_SOCK:
case PTR_TO_BTF_ID:
- case PTR_TO_BTF_ID_OR_NULL:
return false;
default:
return true;
@@ -11282,7 +11237,7 @@ static int do_check(struct bpf_verifier_
if (is_ctx_reg(env, insn->dst_reg)) {
verbose(env, "BPF_ST stores into R%d %s is not allowed\n",
insn->dst_reg,
- reg_type_str[reg_state(env, insn->dst_reg)->type]);
+ reg_type_str(env, reg_state(env, insn->dst_reg)->type));
return -EACCES;
}
--- a/net/core/bpf_sk_storage.c
+++ b/net/core/bpf_sk_storage.c
@@ -929,7 +929,7 @@ static struct bpf_iter_reg bpf_sk_storag
{ offsetof(struct bpf_iter__bpf_sk_storage_map, sk),
PTR_TO_BTF_ID_OR_NULL },
{ offsetof(struct bpf_iter__bpf_sk_storage_map, value),
- PTR_TO_RDWR_BUF_OR_NULL },
+ PTR_TO_RDWR_BUF | PTR_MAYBE_NULL },
},
.seq_info = &iter_seq_info,
};
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -1569,7 +1569,7 @@ static struct bpf_iter_reg sock_map_iter
.ctx_arg_info_size = 2,
.ctx_arg_info = {
{ offsetof(struct bpf_iter__sockmap, key),
- PTR_TO_RDONLY_BUF_OR_NULL },
+ PTR_TO_RDONLY_BUF | PTR_MAYBE_NULL },
{ offsetof(struct bpf_iter__sockmap, sk),
PTR_TO_BTF_ID_OR_NULL },
},
next prev parent reply other threads:[~2022-02-21 9:50 UTC|newest]
Thread overview: 246+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-21 8:46 [PATCH 5.16 000/227] 5.16.11-rc1 review Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 001/227] drm/nouveau/pmu/gm200-: use alternate falcon reset sequence Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 002/227] bpf: Introduce composable reg, ret and arg types Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 003/227] bpf: Replace ARG_XXX_OR_NULL with ARG_XXX | PTR_MAYBE_NULL Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 004/227] bpf: Replace RET_XXX_OR_NULL with RET_XXX " Greg Kroah-Hartman
2022-02-21 8:47 ` Greg Kroah-Hartman [this message]
2022-02-21 8:47 ` [PATCH 5.16 006/227] bpf: Introduce MEM_RDONLY flag Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 007/227] bpf: Convert PTR_TO_MEM_OR_NULL to composable types Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 008/227] bpf: Make per_cpu_ptr return rdonly PTR_TO_MEM Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 009/227] bpf: Add MEM_RDONLY for helper args that are pointers to rdonly mem Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 010/227] bpf/selftests: Test PTR_TO_RDONLY_MEM Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 011/227] HID:Add support for UGTABLET WP5540 Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 012/227] Revert "svm: Add warning message for AVIC IPI invalid target" Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 013/227] parisc: Show error if wrong 32/64-bit compiler is being used Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 014/227] serial: parisc: GSC: fix build when IOSAPIC is not set Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 015/227] parisc: Drop __init from map_pages declaration Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 016/227] parisc: Fix data TLB miss in sba_unmap_sg Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 017/227] parisc: Fix sglist access in ccio-dma.c Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 018/227] mmc: block: fix read single on recovery logic Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 019/227] mm: dont try to NUMA-migrate COW pages that have other uses Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 020/227] HID: amd_sfh: Add illuminance mask to limit ALS max value Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 021/227] HID: i2c-hid: goodix: Fix a lockdep splat Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 022/227] HID: amd_sfh: Increase sensor command timeout Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 023/227] selftests: kvm: Remove absent target file Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 024/227] HID: amd_sfh: Correct the structure field name Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 025/227] PCI: hv: Fix NUMA node assignment when kernel boots with custom NUMA topology Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 026/227] parisc: Add ioread64_lo_hi() and iowrite64_lo_hi() Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 027/227] HID: apple: Set the tilde quirk flag on the Wellspring 5 and later Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 028/227] btrfs: dont hold CPU for too long when defragging a file Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 029/227] btrfs: send: in case of IO error log it Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 030/227] btrfs: defrag: dont try to defrag extents which are under writeback Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 031/227] ASoC: mediatek: fix unmet dependency on GPIOLIB for SND_SOC_DMIC Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 032/227] platform/x86: touchscreen_dmi: Add info for the RWC NANOTE P8 AY07J 2-in-1 Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 033/227] platform/x86: ISST: Fix possible circular locking dependency detected Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 034/227] platform/x86: amd-pmc: Correct usage of SMU version Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 035/227] kunit: tool: Import missing importlib.abc Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 036/227] selftests: rtc: Increase test timeout so that all tests run Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 037/227] kselftest: signal all child processes Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 038/227] selftests: netfilter: reduce zone stress test running time Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 039/227] net: ieee802154: at86rf230: Stop leaking skbs Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 040/227] selftests/zram: Skip max_comp_streams interface on newer kernel Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 041/227] selftests/zram01.sh: Fix compression ratio calculation Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 042/227] selftests/zram: Adapt the situation that /dev/zram0 is being used Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 043/227] selftests: openat2: Print also errno in failure messages Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 044/227] selftests: openat2: Add missing dependency in Makefile Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 045/227] selftests: openat2: Skip testcases that fail with EOPNOTSUPP Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 046/227] selftests: skip mincore.check_file_mmap when fs lacks needed support Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 047/227] ax25: improve the incomplete fix to avoid UAF and NPD bugs Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 048/227] cifs: unlock chan_lock before calling cifs_put_tcp_session Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 049/227] pinctrl: bcm63xx: fix unmet dependency on REGMAP for GPIO_REGMAP Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 050/227] vfs: make freeze_super abort when sync_filesystem returns error Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 051/227] vfs: make sync_filesystem return errors from ->sync_fs Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 052/227] quota: make dquot_quota_sync " Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 053/227] scsi: pm80xx: Fix double completion for SATA devices Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 054/227] kselftest: Fix vdso_test_abi return status Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 055/227] scsi: core: Reallocate devices budget map on queue depth change Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 056/227] scsi: pm8001: Fix use-after-free for aborted TMF sas_task Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 057/227] scsi: pm8001: Fix use-after-free for aborted SSP/STP sas_task Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 058/227] drm/amd: Warn users about potential s0ix problems Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 059/227] mailmap: update Christian Brauners email address Greg Kroah-Hartman
2022-02-21 8:47 ` [PATCH 5.16 060/227] nvme: fix a possible use-after-free in controller reset during load Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 061/227] nvme-tcp: fix possible use-after-free in transport error_recovery work Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 062/227] nvme-rdma: " Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 063/227] net: sparx5: do not refer to skb after passing it on Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 064/227] drm/amd: add support to check whether the system is set to s3 Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 065/227] drm/amd: Only run s3 or s0ix if system is configured properly Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 066/227] drm/amdgpu: fix logic inversion in check Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 067/227] x86/Xen: streamline (and fix) PV CPU enumeration Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 068/227] Revert "module, async: async_synchronize_full() on module init iff async is used" Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 069/227] gcc-plugins/stackleak: Use noinstr in favor of notrace Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 070/227] random: wake up /dev/random writers after zap Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 071/227] KVM: x86/xen: Fix runstate updates to be atomic when preempting vCPU Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 072/227] KVM: x86: nSVM/nVMX: set nested_run_pending on VM entry which is a result of RSM Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 073/227] KVM: x86: SVM: dont passthrough SMAP/SMEP/PKE bits in !NPT && !gCR0.PG case Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 074/227] KVM: x86: nSVM: fix potential NULL derefernce on nested migration Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 075/227] KVM: x86: nSVM: mark vmcb01 as dirty when restoring SMM saved state Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 076/227] iwlwifi: remove deprecated broadcast filtering feature Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 077/227] iwlwifi: fix use-after-free Greg Kroah-Hartman
2022-02-21 12:00 ` Thorsten Leemhuis
2022-02-21 12:29 ` Kalle Valo
2022-02-21 14:30 ` Thorsten Leemhuis
2022-02-21 15:07 ` Kalle Valo
2022-02-21 8:48 ` [PATCH 5.16 078/227] drm/mediatek: mtk_dsi: Avoid EPROBE_DEFER loop with external bridge Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 079/227] drm/radeon: Fix backlight control on iMac 12,1 Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 080/227] drm/atomic: Dont pollute crtc_state->mode_blob with error pointers Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 081/227] drm/amd/pm: correct the sequence of sending gpu reset msg Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 082/227] drm/amdgpu: skipping SDMA hw_init and hw_fini for S0ix Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 083/227] drm/i915/opregion: check port number bounds for SWSCI display power state Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 084/227] drm/i915: Fix dbuf slice config lookup Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 085/227] drm/i915: Fix mbus join " Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 086/227] vsock: remove vsock from connected table when connect is interrupted by a signal Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 087/227] tee: export teedev_open() and teedev_close_context() Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 088/227] optee: use driver internal tee_context for some rpc Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 089/227] drm/cma-helper: Set VM_DONTEXPAND for mmap Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 090/227] drm/i915/gvt: Make DRM_I915_GVT depend on X86 Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 091/227] drm/i915/ttm: tweak priority hint selection Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 092/227] iwlwifi: pcie: fix locking when "HW not ready" Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 093/227] iwlwifi: pcie: gen2: " Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 094/227] iwlwifi: mvm: fix condition which checks the version of rate_n_flags Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 095/227] iwlwifi: fix iwl_legacy_rate_to_fw_idx Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 096/227] iwlwifi: mvm: dont send SAR GEO command for 3160 devices Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 097/227] netfilter: xt_socket: fix a typo in socket_mt_destroy() Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 098/227] selftests: netfilter: fix exit value for nft_concat_range Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 099/227] netfilter: nft_synproxy: unregister hooks on init error path Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 100/227] selftests: netfilter: disable rp_filter on router Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 101/227] ipv4: fix data races in fib_alias_hw_flags_set Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 102/227] ipv6: fix data-race in fib6_info_hw_flags_set / fib6_purge_rt Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 103/227] ipv6: mcast: use rcu-safe version of ipv6_get_lladdr() Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 104/227] ipv6: per-netns exclusive flowlabel checks Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 105/227] Revert "net: ethernet: bgmac: Use devm_platform_ioremap_resource_byname" Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 106/227] mac80211: mlme: check for null after calling kmemdup Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 107/227] brcmfmac: firmware: Fix crash in brcm_alt_fw_path Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 108/227] cfg80211: fix race in netlink owner interface destruction Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 109/227] net: dsa: lan9303: fix reset on probe Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 110/227] net: dsa: mv88e6xxx: flush switchdev FDB workqueue before removing VLAN Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 111/227] net: dsa: lantiq_gswip: fix use after free in gswip_remove() Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 112/227] net: dsa: lan9303: handle hwaccel VLAN tags Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 113/227] net: dsa: lan9303: add VLAN IDs to master device Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 114/227] net: ieee802154: ca8210: Fix lifs/sifs periods Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 115/227] ping: fix the dif and sdif check in ping_lookup Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 116/227] bonding: force carrier update when releasing slave Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 117/227] mctp: fix use after free Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 118/227] drop_monitor: fix data-race in dropmon_net_event / trace_napi_poll_hit Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 119/227] net_sched: add __rcu annotation to netdev->qdisc Greg Kroah-Hartman
2022-02-21 8:48 ` [PATCH 5.16 120/227] crypto: af_alg - get rid of alg_memory_allocated Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 121/227] bonding: fix data-races around agg_select_timer Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 122/227] nfp: flower: netdev offload check for ip6gretap Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 123/227] libsubcmd: Fix use-after-free for realloc(..., 0) Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 124/227] net/smc: Avoid overwriting the copies of clcsock callback functions Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 125/227] net: phy: mediatek: remove PHY mode check on MT7531 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 126/227] atl1c: fix tx timeout after link flap on Mikrotik 10/25G NIC Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 127/227] tipc: fix wrong publisher node address in link publications Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 128/227] dpaa2-switch: fix default return of dpaa2_switch_flower_parse_mirror_key Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 129/227] dpaa2-eth: Initialize mutex used in one step timestamping path Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 130/227] net: mscc: ocelot: fix use-after-free in ocelot_vlan_del() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 131/227] net: bridge: multicast: notify switchdev driver whenever MC processing gets disabled Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 132/227] perf bpf: Defer freeing string after possible strlen() on it Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 133/227] selftests/exec: Add non-regular to TEST_GEN_PROGS Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 134/227] arm64: Correct wrong label in macro __init_el2_gicv3 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 135/227] ALSA: usb-audio: Dont abort resume upon errors Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 136/227] ALSA: usb-audio: revert to IMPLICIT_FB_FIXED_DEV for M-Audio FastTrack Ultra Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 137/227] ALSA: memalloc: Fix dma_need_sync() checks Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 138/227] ALSA: memalloc: invalidate SG pages before sync Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 139/227] ALSA: hda/realtek: Add quirk for Legion Y9000X 2019 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 140/227] ALSA: hda/realtek: Fix deadlock by COEF mutex Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 141/227] ALSA: hda: Fix regression on forced probe mask option Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 142/227] ALSA: hda: Fix missing codec probe on Shenker Dock 15 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 143/227] ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 144/227] ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_range() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 145/227] ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_sx() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 146/227] ASoC: ops: Fix stereo change notifications in snd_soc_put_xr_sx() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 147/227] cifs: fix set of group SID via NTSD xattrs Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 148/227] cifs: fix confusing unneeded warning message on smb2.1 and earlier Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 149/227] ACPI: processor: idle: fix lockup regression on 32-bit ThinkPad T40 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 150/227] powerpc/603: Fix boot failure with DEBUG_PAGEALLOC and KFENCE Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 151/227] powerpc/lib/sstep: fix ptesync build error Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 152/227] mtd: rawnand: gpmi: dont leak PM reference in error path Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 153/227] smb3: fix snapshot mount option Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 154/227] tipc: fix wrong notification node addresses Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 155/227] scsi: ufs: Remove dead code Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 156/227] scsi: ufs: Fix a deadlock in the error handler Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 157/227] ASoC: tas2770: Insert post reset delay Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 158/227] ASoC: qcom: Actually clear DMA interrupt register for HDMI Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 159/227] block/wbt: fix negative inflight counter when remove scsi device Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 160/227] NFS: Remove an incorrect revalidation in nfs4_update_changeattr_locked() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 161/227] NFS: LOOKUP_DIRECTORY is also ok with symlinks Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 162/227] NFS: Do not report writeback errors in nfs_getattr() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 163/227] tty: n_tty: do not look ahead for EOL character past the end of the buffer Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 164/227] block: fix surprise removal for drivers calling blk_set_queue_dying Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 165/227] mtd: rawnand: qcom: Fix clock sequencing in qcom_nandc_probe() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 166/227] mtd: parsers: qcom: Fix kernel panic on skipped partition Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 167/227] mtd: parsers: qcom: Fix missing free for pparts in cleanup Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 168/227] mtd: phram: Prevent divide by zero bug in phram_setup() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 169/227] mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 170/227] scsi: lpfc: Fix pt2pt NVMe PRLI reject LOGO loop Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 171/227] EDAC: Fix calculation of returned address and next offset in edac_align_ptr() Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 172/227] x86/ptrace: Fix xfpregs_set()s incorrect xmm clearing Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 173/227] ucounts: Base set_cred_ucounts changes on the real user Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 174/227] ucounts: Handle wrapping in is_ucounts_overlimit Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 175/227] ucounts: Enforce RLIMIT_NPROC not RLIMIT_NPROC+1 Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 176/227] rlimit: Fix RLIMIT_NPROC enforcement failure caused by capability calls in set_user Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 177/227] ucounts: Move RLIMIT_NPROC handling after set_user Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 178/227] net: sched: limit TC_ACT_REPEAT loops Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 179/227] dmaengine: sh: rcar-dmac: Check for error num after setting mask Greg Kroah-Hartman
2022-02-21 8:49 ` [PATCH 5.16 180/227] dmaengine: stm32-dmamux: Fix PM disable depth imbalance in stm32_dmamux_probe Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 181/227] dmaengine: sh: rcar-dmac: Check for error num after dma_set_max_seg_size Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 182/227] tests: fix idmapped mount_setattr test Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 183/227] i2c: qcom-cci: dont delete an unregistered adapter Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 184/227] i2c: qcom-cci: dont put a device tree node before i2c_add_adapter() Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 185/227] dmaengine: ptdma: Fix the error handling path in pt_core_init() Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 186/227] copy_process(): Move fd_install() out of sighand->siglock critical section Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 187/227] scsi: qedi: Fix ABBA deadlock in qedi_process_tmf_resp() and qedi_process_cmd_cleanup_resp() Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 188/227] ASoC: wm_adsp: Correct control read size when parsing compressed buffer Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 189/227] ice: enable parsing IPSEC SPI headers for RSS Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 190/227] i2c: brcmstb: fix support for DSL and CM variants Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 191/227] lockdep: Correct lock_classes index mapping Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 192/227] HID: elo: fix memory leak in elo_probe Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 193/227] mtd: rawnand: ingenic: Fix missing put_device in ingenic_ecc_get Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 194/227] Drivers: hv: vmbus: Fix memory leak in vmbus_add_channel_kobj Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 195/227] KVM: x86/pmu: Refactoring find_arch_event() to pmc_perf_hw_id() Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 196/227] KVM: x86/pmu: Dont truncate the PerfEvtSeln MSR when creating a perf event Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 197/227] KVM: x86/pmu: Use AMD64_RAW_EVENT_MASK for PERF_TYPE_RAW Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 198/227] ARM: OMAP2+: hwmod: Add of_node_put() before break Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 199/227] ARM: OMAP2+: adjust the location of put_device() call in omapdss_init_of Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 200/227] phy: usb: Leave some clocks running during suspend Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 201/227] staging: vc04_services: Fix RCU dereference check Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 202/227] phy: phy-mtk-tphy: Fix duplicated argument in phy-mtk-tphy Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 203/227] irqchip/sifive-plic: Add missing thead,c900-plic match string Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 204/227] x86/bug: Merge annotate_reachable() into _BUG_FLAGS() asm Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 205/227] netfilter: conntrack: dont refresh sctp entries in closed state Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 206/227] ksmbd: fix same UniqueId for dot and dotdot entries Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 207/227] ksmbd: dont align last entry offset in smb2 query directory Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 208/227] arm64: dts: meson-gx: add ATF BL32 reserved-memory region Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 209/227] arm64: dts: meson-g12: " Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 210/227] arm64: dts: meson-g12: drop BL32 region from SEI510/SEI610 Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 211/227] pidfd: fix test failure due to stack overflow on some arches Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 212/227] selftests: fixup build warnings in pidfd / clone3 tests Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 213/227] mm: io_uring: allow oom-killer from io_uring_setup Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 214/227] ACPI: PM: Revert "Only mark EC GPE for wakeup on Intel systems" Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 215/227] kconfig: let shell return enough output for deep path names Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 216/227] ata: libata-core: Disable TRIM on M88V29 Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 217/227] soc: aspeed: lpc-ctrl: Block error printing on probe defer cases Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 218/227] xprtrdma: fix pointer derefs in error cases of rpcrdma_ep_create Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 219/227] drm/rockchip: dw_hdmi: Do not leave clock enabled in error case Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 220/227] tracing: Fix tp_printk option related with tp_printk_stop_on_boot Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 221/227] display/amd: decrease message verbosity about watermarks table failure Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 222/227] drm/amdgpu: add utcl2_harvest to gc 10.3.1 Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 223/227] drm/amd/display: Cap pflip irqs per max otg number Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 224/227] drm/amd/display: fix yellow carp wm clamping Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 225/227] net: usb: qmi_wwan: Add support for Dell DW5829e Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 226/227] net: macb: Align the dma and coherent dma masks Greg Kroah-Hartman
2022-02-21 8:50 ` [PATCH 5.16 227/227] kconfig: fix failing to generate auto.conf Greg Kroah-Hartman
2022-02-21 16:13 ` [PATCH 5.16 000/227] 5.16.11-rc1 review Jeffrin Thalakkottoor
2022-02-21 17:17 ` Guenter Roeck
2022-02-21 17:56 ` Greg Kroah-Hartman
2022-02-21 18:17 ` Guenter Roeck
2022-02-21 21:14 ` Naresh Kamboju
2022-02-21 21:22 ` Guenter Roeck
2022-02-21 21:40 ` Shuah Khan
2022-02-21 23:35 ` Zan Aziz
2022-02-22 4:16 ` Florian Fainelli
2022-02-22 7:31 ` Bagas Sanjaya
2022-02-22 11:45 ` Rudi Heitbaum
2022-02-22 14:21 ` Ron Economos
2022-02-22 17:14 ` Justin Forbes
2022-02-23 2:54 ` Slade Watkins
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=20220221084935.012190750@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=ast@kernel.org \
--cc=haoluo@google.com \
--cc=linux-kernel@vger.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