From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Pablo Neira Ayuso <pablo@netfilter.org>
Subject: [PATCH 6.1 135/149] netfilter: nf_tables: report use refcount overflow
Date: Sun, 13 Aug 2023 23:19:40 +0200 [thread overview]
Message-ID: <20230813211722.754710096@linuxfoundation.org> (raw)
In-Reply-To: <20230813211718.757428827@linuxfoundation.org>
From: Pablo Neira Ayuso <pablo@netfilter.org>
commit 1689f25924ada8fe14a4a82c38925d04994c7142 upstream.
Overflow use refcount checks are not complete.
Add helper function to deal with object reference counter tracking.
Report -EMFILE in case UINT_MAX is reached.
nft_use_dec() splats in case that reference counter underflows,
which should not ever happen.
Add nft_use_inc_restore() and nft_use_dec_restore() which are used
to restore reference counter from error and abort paths.
Use u32 in nft_flowtable and nft_object since helper functions cannot
work on bitfields.
Remove the few early incomplete checks now that the helper functions
are in place and used to check for refcount overflow.
Fixes: 96518518cc41 ("netfilter: add nftables")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/net/netfilter/nf_tables.h | 31 ++++++-
net/netfilter/nf_tables_api.c | 163 +++++++++++++++++++++++---------------
net/netfilter/nft_flow_offload.c | 6 -
net/netfilter/nft_immediate.c | 8 -
net/netfilter/nft_objref.c | 8 +
5 files changed, 141 insertions(+), 75 deletions(-)
--- a/include/net/netfilter/nf_tables.h
+++ b/include/net/netfilter/nf_tables.h
@@ -1192,6 +1192,29 @@ int __nft_release_basechain(struct nft_c
unsigned int nft_do_chain(struct nft_pktinfo *pkt, void *priv);
+static inline bool nft_use_inc(u32 *use)
+{
+ if (*use == UINT_MAX)
+ return false;
+
+ (*use)++;
+
+ return true;
+}
+
+static inline void nft_use_dec(u32 *use)
+{
+ WARN_ON_ONCE((*use)-- == 0);
+}
+
+/* For error and abort path: restore use counter to previous state. */
+static inline void nft_use_inc_restore(u32 *use)
+{
+ WARN_ON_ONCE(!nft_use_inc(use));
+}
+
+#define nft_use_dec_restore nft_use_dec
+
/**
* struct nft_table - nf_tables table
*
@@ -1275,8 +1298,8 @@ struct nft_object {
struct list_head list;
struct rhlist_head rhlhead;
struct nft_object_hash_key key;
- u32 genmask:2,
- use:30;
+ u32 genmask:2;
+ u32 use;
u64 handle;
u16 udlen;
u8 *udata;
@@ -1378,8 +1401,8 @@ struct nft_flowtable {
char *name;
int hooknum;
int ops_len;
- u32 genmask:2,
- use:30;
+ u32 genmask:2;
+ u32 use;
u64 handle;
/* runtime data below here */
struct list_head hook_list ____cacheline_aligned;
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -255,8 +255,10 @@ int nf_tables_bind_chain(const struct nf
if (chain->bound)
return -EBUSY;
+ if (!nft_use_inc(&chain->use))
+ return -EMFILE;
+
chain->bound = true;
- chain->use++;
nft_chain_trans_bind(ctx, chain);
return 0;
@@ -439,7 +441,7 @@ static int nft_delchain(struct nft_ctx *
if (IS_ERR(trans))
return PTR_ERR(trans);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
nft_deactivate_next(ctx->net, ctx->chain);
return 0;
@@ -478,7 +480,7 @@ nf_tables_delrule_deactivate(struct nft_
/* You cannot delete the same rule twice */
if (nft_is_active_next(ctx->net, rule)) {
nft_deactivate_next(ctx->net, rule);
- ctx->chain->use--;
+ nft_use_dec(&ctx->chain->use);
return 0;
}
return -ENOENT;
@@ -645,7 +647,7 @@ static int nft_delset(const struct nft_c
nft_map_deactivate(ctx, set);
nft_deactivate_next(ctx->net, set);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -677,7 +679,7 @@ static int nft_delobj(struct nft_ctx *ct
return err;
nft_deactivate_next(ctx->net, obj);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -712,7 +714,7 @@ static int nft_delflowtable(struct nft_c
return err;
nft_deactivate_next(ctx->net, flowtable);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
return err;
}
@@ -2358,9 +2360,6 @@ static int nf_tables_addchain(struct nft
unsigned int data_size;
int err;
- if (table->use == UINT_MAX)
- return -EOVERFLOW;
-
if (nla[NFTA_CHAIN_HOOK]) {
struct nft_stats __percpu *stats = NULL;
struct nft_chain_hook hook;
@@ -2457,6 +2456,11 @@ static int nf_tables_addchain(struct nft
if (err < 0)
goto err_destroy_chain;
+ if (!nft_use_inc(&table->use)) {
+ err = -EMFILE;
+ goto err_use;
+ }
+
trans = nft_trans_chain_add(ctx, NFT_MSG_NEWCHAIN);
if (IS_ERR(trans)) {
err = PTR_ERR(trans);
@@ -2473,10 +2477,11 @@ static int nf_tables_addchain(struct nft
goto err_unregister_hook;
}
- table->use++;
-
return 0;
+
err_unregister_hook:
+ nft_use_dec_restore(&table->use);
+err_use:
nf_tables_unregister_hook(net, table, chain);
err_destroy_chain:
nf_tables_chain_destroy(ctx);
@@ -3663,9 +3668,6 @@ static int nf_tables_newrule(struct sk_b
return -EINVAL;
handle = nf_tables_alloc_handle(table);
- if (chain->use == UINT_MAX)
- return -EOVERFLOW;
-
if (nla[NFTA_RULE_POSITION]) {
pos_handle = be64_to_cpu(nla_get_be64(nla[NFTA_RULE_POSITION]));
old_rule = __nft_rule_lookup(chain, pos_handle);
@@ -3759,6 +3761,11 @@ static int nf_tables_newrule(struct sk_b
}
}
+ if (!nft_use_inc(&chain->use)) {
+ err = -EMFILE;
+ goto err_release_rule;
+ }
+
if (info->nlh->nlmsg_flags & NLM_F_REPLACE) {
err = nft_delrule(&ctx, old_rule);
if (err < 0)
@@ -3790,7 +3797,6 @@ static int nf_tables_newrule(struct sk_b
}
}
kvfree(expr_info);
- chain->use++;
if (flow)
nft_trans_flow_rule(trans) = flow;
@@ -3801,6 +3807,7 @@ static int nf_tables_newrule(struct sk_b
return 0;
err_destroy_flow_rule:
+ nft_use_dec_restore(&chain->use);
if (flow)
nft_flow_rule_destroy(flow);
err_release_rule:
@@ -4818,9 +4825,15 @@ static int nf_tables_newset(struct sk_bu
alloc_size = sizeof(*set) + size + udlen;
if (alloc_size < size || alloc_size > INT_MAX)
return -ENOMEM;
+
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
set = kvzalloc(alloc_size, GFP_KERNEL_ACCOUNT);
- if (!set)
- return -ENOMEM;
+ if (!set) {
+ err = -ENOMEM;
+ goto err_alloc;
+ }
name = nla_strdup(nla[NFTA_SET_NAME], GFP_KERNEL_ACCOUNT);
if (!name) {
@@ -4878,7 +4891,7 @@ static int nf_tables_newset(struct sk_bu
goto err_set_expr_alloc;
list_add_tail_rcu(&set->list, &table->sets);
- table->use++;
+
return 0;
err_set_expr_alloc:
@@ -4890,6 +4903,9 @@ err_set_init:
kfree(set->name);
err_set_name:
kvfree(set);
+err_alloc:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -5024,9 +5040,6 @@ int nf_tables_bind_set(const struct nft_
struct nft_set_binding *i;
struct nft_set_iter iter;
- if (set->use == UINT_MAX)
- return -EOVERFLOW;
-
if (!list_empty(&set->bindings) && nft_set_is_anonymous(set))
return -EBUSY;
@@ -5054,10 +5067,12 @@ int nf_tables_bind_set(const struct nft_
return iter.err;
}
bind:
+ if (!nft_use_inc(&set->use))
+ return -EMFILE;
+
binding->chain = ctx->chain;
list_add_tail_rcu(&binding->list, &set->bindings);
nft_set_trans_bind(ctx, set);
- set->use++;
return 0;
}
@@ -5131,7 +5146,7 @@ void nf_tables_activate_set(const struct
nft_clear(ctx->net, set);
}
- set->use++;
+ nft_use_inc_restore(&set->use);
}
EXPORT_SYMBOL_GPL(nf_tables_activate_set);
@@ -5147,7 +5162,7 @@ void nf_tables_deactivate_set(const stru
else
list_del_rcu(&binding->list);
- set->use--;
+ nft_use_dec(&set->use);
break;
case NFT_TRANS_PREPARE:
if (nft_set_is_anonymous(set)) {
@@ -5156,7 +5171,7 @@ void nf_tables_deactivate_set(const stru
nft_deactivate_next(ctx->net, set);
}
- set->use--;
+ nft_use_dec(&set->use);
return;
case NFT_TRANS_ABORT:
case NFT_TRANS_RELEASE:
@@ -5164,7 +5179,7 @@ void nf_tables_deactivate_set(const stru
set->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_deactivate(ctx, set);
- set->use--;
+ nft_use_dec(&set->use);
fallthrough;
default:
nf_tables_unbind_set(ctx, set, binding,
@@ -5937,7 +5952,7 @@ void nft_set_elem_destroy(const struct n
nft_set_elem_expr_destroy(&ctx, nft_set_ext_expr(ext));
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use--;
+ nft_use_dec(&(*nft_set_ext_obj(ext))->use);
kfree(elem);
}
EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
@@ -6439,8 +6454,16 @@ static int nft_add_set_elem(struct nft_c
set->objtype, genmask);
if (IS_ERR(obj)) {
err = PTR_ERR(obj);
+ obj = NULL;
goto err_parse_key_end;
}
+
+ if (!nft_use_inc(&obj->use)) {
+ err = -EMFILE;
+ obj = NULL;
+ goto err_parse_key_end;
+ }
+
err = nft_set_ext_add(&tmpl, NFT_SET_EXT_OBJREF);
if (err < 0)
goto err_parse_key_end;
@@ -6509,10 +6532,9 @@ static int nft_add_set_elem(struct nft_c
if (flags)
*nft_set_ext_flags(ext) = flags;
- if (obj) {
+ if (obj)
*nft_set_ext_obj(ext) = obj;
- obj->use++;
- }
+
if (ulen > 0) {
if (nft_set_ext_check(&tmpl, NFT_SET_EXT_USERDATA, ulen) < 0) {
err = -EINVAL;
@@ -6577,12 +6599,13 @@ err_element_clash:
kfree(trans);
err_elem_free:
nf_tables_set_elem_destroy(ctx, set, elem.priv);
- if (obj)
- obj->use--;
err_parse_data:
if (nla[NFTA_SET_ELEM_DATA] != NULL)
nft_data_release(&elem.data.val, desc.type);
err_parse_key_end:
+ if (obj)
+ nft_use_dec_restore(&obj->use);
+
nft_data_release(&elem.key_end.val, NFT_DATA_VALUE);
err_parse_key:
nft_data_release(&elem.key.val, NFT_DATA_VALUE);
@@ -6663,7 +6686,7 @@ void nft_data_hold(const struct nft_data
case NFT_JUMP:
case NFT_GOTO:
chain = data->verdict.chain;
- chain->use++;
+ nft_use_inc_restore(&chain->use);
break;
}
}
@@ -6678,7 +6701,7 @@ static void nft_setelem_data_activate(co
if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
nft_data_hold(nft_set_ext_data(ext), set->dtype);
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use++;
+ nft_use_inc_restore(&(*nft_set_ext_obj(ext))->use);
}
static void nft_setelem_data_deactivate(const struct net *net,
@@ -6690,7 +6713,7 @@ static void nft_setelem_data_deactivate(
if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA))
nft_data_release(nft_set_ext_data(ext), set->dtype);
if (nft_set_ext_exists(ext, NFT_SET_EXT_OBJREF))
- (*nft_set_ext_obj(ext))->use--;
+ nft_use_dec(&(*nft_set_ext_obj(ext))->use);
}
static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
@@ -7229,9 +7252,14 @@ static int nf_tables_newobj(struct sk_bu
nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla);
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
type = nft_obj_type_get(net, objtype);
- if (IS_ERR(type))
- return PTR_ERR(type);
+ if (IS_ERR(type)) {
+ err = PTR_ERR(type);
+ goto err_type;
+ }
obj = nft_obj_init(&ctx, type, nla[NFTA_OBJ_DATA]);
if (IS_ERR(obj)) {
@@ -7265,7 +7293,7 @@ static int nf_tables_newobj(struct sk_bu
goto err_obj_ht;
list_add_tail_rcu(&obj->list, &table->objects);
- table->use++;
+
return 0;
err_obj_ht:
/* queued in transaction log */
@@ -7281,6 +7309,9 @@ err_strdup:
kfree(obj);
err_init:
module_put(type->owner);
+err_type:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -7671,7 +7702,7 @@ void nf_tables_deactivate_flowtable(cons
case NFT_TRANS_PREPARE:
case NFT_TRANS_ABORT:
case NFT_TRANS_RELEASE:
- flowtable->use--;
+ nft_use_dec(&flowtable->use);
fallthrough;
default:
return;
@@ -8019,9 +8050,14 @@ static int nf_tables_newflowtable(struct
nft_ctx_init(&ctx, net, skb, info->nlh, family, table, NULL, nla);
+ if (!nft_use_inc(&table->use))
+ return -EMFILE;
+
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL_ACCOUNT);
- if (!flowtable)
- return -ENOMEM;
+ if (!flowtable) {
+ err = -ENOMEM;
+ goto flowtable_alloc;
+ }
flowtable->table = table;
flowtable->handle = nf_tables_alloc_handle(table);
@@ -8076,7 +8112,6 @@ static int nf_tables_newflowtable(struct
goto err5;
list_add_tail_rcu(&flowtable->list, &table->flowtables);
- table->use++;
return 0;
err5:
@@ -8093,6 +8128,9 @@ err2:
kfree(flowtable->name);
err1:
kfree(flowtable);
+flowtable_alloc:
+ nft_use_dec_restore(&table->use);
+
return err;
}
@@ -9378,7 +9416,7 @@ static int nf_tables_commit(struct net *
*/
if (nft_set_is_anonymous(nft_trans_set(trans)) &&
!list_empty(&nft_trans_set(trans)->bindings))
- trans->ctx.table->use--;
+ nft_use_dec(&trans->ctx.table->use);
}
nf_tables_set_notify(&trans->ctx, nft_trans_set(trans),
NFT_MSG_NEWSET, GFP_KERNEL);
@@ -9597,7 +9635,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
nft_chain_del(trans->ctx.chain);
nf_tables_unregister_hook(trans->ctx.net,
trans->ctx.table,
@@ -9605,7 +9643,7 @@ static int __nf_tables_abort(struct net
}
break;
case NFT_MSG_DELCHAIN:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, trans->ctx.chain);
nft_trans_destroy(trans);
break;
@@ -9614,7 +9652,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.chain->use--;
+ nft_use_dec_restore(&trans->ctx.chain->use);
list_del_rcu(&nft_trans_rule(trans)->list);
nft_rule_expr_deactivate(&trans->ctx,
nft_trans_rule(trans),
@@ -9623,7 +9661,7 @@ static int __nf_tables_abort(struct net
nft_flow_rule_destroy(nft_trans_flow_rule(trans));
break;
case NFT_MSG_DELRULE:
- trans->ctx.chain->use++;
+ nft_use_inc_restore(&trans->ctx.chain->use);
nft_clear(trans->ctx.net, nft_trans_rule(trans));
nft_rule_expr_activate(&trans->ctx, nft_trans_rule(trans));
if (trans->ctx.chain->flags & NFT_CHAIN_HW_OFFLOAD)
@@ -9636,7 +9674,7 @@ static int __nf_tables_abort(struct net
nft_trans_destroy(trans);
break;
}
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
if (nft_trans_set_bound(trans)) {
nft_trans_destroy(trans);
break;
@@ -9644,7 +9682,7 @@ static int __nf_tables_abort(struct net
list_del_rcu(&nft_trans_set(trans)->list);
break;
case NFT_MSG_DELSET:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_set(trans));
if (nft_trans_set(trans)->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_activate(&trans->ctx, nft_trans_set(trans));
@@ -9687,12 +9725,12 @@ static int __nf_tables_abort(struct net
nft_obj_destroy(&trans->ctx, nft_trans_obj_newobj(trans));
nft_trans_destroy(trans);
} else {
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
nft_obj_del(nft_trans_obj(trans));
}
break;
case NFT_MSG_DELOBJ:
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_obj(trans));
nft_trans_destroy(trans);
break;
@@ -9701,7 +9739,7 @@ static int __nf_tables_abort(struct net
nft_unregister_flowtable_net_hooks(net,
&nft_trans_flowtable_hooks(trans));
} else {
- trans->ctx.table->use--;
+ nft_use_dec_restore(&trans->ctx.table->use);
list_del_rcu(&nft_trans_flowtable(trans)->list);
nft_unregister_flowtable_net_hooks(net,
&nft_trans_flowtable(trans)->hook_list);
@@ -9712,7 +9750,7 @@ static int __nf_tables_abort(struct net
list_splice(&nft_trans_flowtable_hooks(trans),
&nft_trans_flowtable(trans)->hook_list);
} else {
- trans->ctx.table->use++;
+ nft_use_inc_restore(&trans->ctx.table->use);
nft_clear(trans->ctx.net, nft_trans_flowtable(trans));
}
nft_trans_destroy(trans);
@@ -10165,8 +10203,9 @@ static int nft_verdict_init(const struct
if (desc->flags & NFT_DATA_DESC_SETELEM &&
chain->flags & NFT_CHAIN_BINDING)
return -EINVAL;
+ if (!nft_use_inc(&chain->use))
+ return -EMFILE;
- chain->use++;
data->verdict.chain = chain;
break;
}
@@ -10184,7 +10223,7 @@ static void nft_verdict_uninit(const str
case NFT_JUMP:
case NFT_GOTO:
chain = data->verdict.chain;
- chain->use--;
+ nft_use_dec(&chain->use);
break;
}
}
@@ -10353,11 +10392,11 @@ int __nft_release_basechain(struct nft_c
nf_tables_unregister_hook(ctx->net, ctx->chain->table, ctx->chain);
list_for_each_entry_safe(rule, nr, &ctx->chain->rules, list) {
list_del(&rule->list);
- ctx->chain->use--;
+ nft_use_dec(&ctx->chain->use);
nf_tables_rule_release(ctx, rule);
}
nft_chain_del(ctx->chain);
- ctx->table->use--;
+ nft_use_dec(&ctx->table->use);
nf_tables_chain_destroy(ctx);
return 0;
@@ -10410,18 +10449,18 @@ static void __nft_release_table(struct n
ctx.chain = chain;
list_for_each_entry_safe(rule, nr, &chain->rules, list) {
list_del(&rule->list);
- chain->use--;
+ nft_use_dec(&chain->use);
nf_tables_rule_release(&ctx, rule);
}
}
list_for_each_entry_safe(flowtable, nf, &table->flowtables, list) {
list_del(&flowtable->list);
- table->use--;
+ nft_use_dec(&table->use);
nf_tables_flowtable_destroy(flowtable);
}
list_for_each_entry_safe(set, ns, &table->sets, list) {
list_del(&set->list);
- table->use--;
+ nft_use_dec(&table->use);
if (set->flags & (NFT_SET_MAP | NFT_SET_OBJECT))
nft_map_deactivate(&ctx, set);
@@ -10429,13 +10468,13 @@ static void __nft_release_table(struct n
}
list_for_each_entry_safe(obj, ne, &table->objects, list) {
nft_obj_del(obj);
- table->use--;
+ nft_use_dec(&table->use);
nft_obj_destroy(&ctx, obj);
}
list_for_each_entry_safe(chain, nc, &table->chains, list) {
ctx.chain = chain;
nft_chain_del(chain);
- table->use--;
+ nft_use_dec(&table->use);
nf_tables_chain_destroy(&ctx);
}
nf_tables_table_destroy(&ctx);
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
@@ -404,8 +404,10 @@ static int nft_flow_offload_init(const s
if (IS_ERR(flowtable))
return PTR_ERR(flowtable);
+ if (!nft_use_inc(&flowtable->use))
+ return -EMFILE;
+
priv->flowtable = flowtable;
- flowtable->use++;
return nf_ct_netns_get(ctx->net, ctx->family);
}
@@ -424,7 +426,7 @@ static void nft_flow_offload_activate(co
{
struct nft_flow_offload *priv = nft_expr_priv(expr);
- priv->flowtable->use++;
+ nft_use_inc_restore(&priv->flowtable->use);
}
static void nft_flow_offload_destroy(const struct nft_ctx *ctx,
--- a/net/netfilter/nft_immediate.c
+++ b/net/netfilter/nft_immediate.c
@@ -168,7 +168,7 @@ static void nft_immediate_deactivate(con
nft_immediate_chain_deactivate(ctx, chain, phase);
nft_chain_del(chain);
chain->bound = false;
- chain->table->use--;
+ nft_use_dec(&chain->table->use);
break;
}
break;
@@ -207,7 +207,7 @@ static void nft_immediate_destroy(const
* let the transaction records release this chain and its rules.
*/
if (chain->bound) {
- chain->use--;
+ nft_use_dec(&chain->use);
break;
}
@@ -215,9 +215,9 @@ static void nft_immediate_destroy(const
chain_ctx = *ctx;
chain_ctx.chain = chain;
- chain->use--;
+ nft_use_dec(&chain->use);
list_for_each_entry_safe(rule, n, &chain->rules, list) {
- chain->use--;
+ nft_use_dec(&chain->use);
list_del(&rule->list);
nf_tables_rule_destroy(&chain_ctx, rule);
}
--- a/net/netfilter/nft_objref.c
+++ b/net/netfilter/nft_objref.c
@@ -41,8 +41,10 @@ static int nft_objref_init(const struct
if (IS_ERR(obj))
return -ENOENT;
+ if (!nft_use_inc(&obj->use))
+ return -EMFILE;
+
nft_objref_priv(expr) = obj;
- obj->use++;
return 0;
}
@@ -71,7 +73,7 @@ static void nft_objref_deactivate(const
if (phase == NFT_TRANS_COMMIT)
return;
- obj->use--;
+ nft_use_dec(&obj->use);
}
static void nft_objref_activate(const struct nft_ctx *ctx,
@@ -79,7 +81,7 @@ static void nft_objref_activate(const st
{
struct nft_object *obj = nft_objref_priv(expr);
- obj->use++;
+ nft_use_inc_restore(&obj->use);
}
static struct nft_expr_type nft_objref_type;
next prev parent reply other threads:[~2023-08-13 21:39 UTC|newest]
Thread overview: 167+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-13 21:17 [PATCH 6.1 000/149] 6.1.46-rc1 review Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 001/149] gcc-plugins: Reorganize gimple includes for GCC 13 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 002/149] Revert "loongarch/cpu: Switch to arch_cpu_finalize_init()" Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 003/149] tpm: Disable RNG for all AMD fTPMs Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 004/149] tpm: Add a helper for checking hwrng enabled Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 005/149] ksmbd: validate command request size Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 006/149] ksmbd: fix wrong next length validation of ea buffer in smb2_set_ea() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 007/149] KVM: SEV: snapshot the GHCB before accessing it Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 008/149] KVM: SEV: only access GHCB fields once Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 009/149] wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 010/149] wifi: rtw89: fix 8852AE disconnection caused by RX full flags Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 011/149] selftests: forwarding: Set default IPv6 traceroute utility Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 012/149] wireguard: allowedips: expand maximum node depth Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 013/149] mmc: moxart: read scr register without changing byte order Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 014/149] ipv6: adjust ndisc_is_useropt() to also return true for PIO Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 015/149] selftests: mptcp: join: fix delete and re-add test Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 016/149] selftests: mptcp: join: fix implicit EP test Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 017/149] mptcp: avoid bogus reset on fallback close Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 018/149] mptcp: fix disconnect vs accept race Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 019/149] dmaengine: pl330: Return DMA_PAUSED when transaction is paused Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 020/149] net: mana: Fix MANA VF unload when hardware is unresponsive Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 021/149] riscv/kexec: load initrd high in available memory Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 022/149] riscv,mmio: Fix readX()-to-delay() ordering Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 023/149] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 024/149] nvme-pci: add NVME_QUIRK_BOGUS_NID for Samsung PM9B1 256G and 512G Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 025/149] drm/nouveau/gr: enable memory loads on helper invocation on all channels Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 026/149] drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issues Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 027/149] drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 028/149] drm/amdgpu: fix possible UAF in amdgpu_cs_pass1() Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 029/149] drm/amd/display: check attr flag before set cursor degamma on DCN3+ Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 030/149] drm/amdgpu: add S/G display parameter Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 031/149] drm/amd: Disable S/G for APUs when 64GB or more host memory Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 032/149] drm/amd/display: limit DPIA link rate to HBR3 Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 033/149] cpuidle: dt_idle_genpd: Add helper function to remove genpd topology Greg Kroah-Hartman
2023-08-13 21:17 ` [PATCH 6.1 034/149] hwmon: (pmbus/bel-pfe) Enable PMBUS_SKIP_STATUS_CHECK for pfe1100 Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 035/149] radix tree test suite: fix incorrect allocation size for pthreads Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 036/149] nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 037/149] drm/amd/pm: fulfill swsmu peak profiling mode shader/memory clock settings Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 038/149] drm/amd/pm: expose swctf threshold setting for legacy powerplay Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 039/149] drm/amd/pm: fulfill powerplay peak profiling mode shader/memory clock settings Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 040/149] drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuation Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 041/149] drm/amd/display: Handle virtual hardware detect Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 042/149] drm/amd/display: Add function for validate and update new stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 043/149] drm/amd/display: Handle seamless boot stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 044/149] drm/amd/display: Update OTG instance in the commit stream Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 045/149] drm/amd/display: Avoid ABM when ODM combine is enabled for eDP Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 046/149] drm/amd/display: Use update plane and stream routine for DCN32x Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 047/149] drm/amd/display: Disable phantom OTG after enable for plane disable Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 048/149] drm/amd/display: Retain phantom plane/stream if validation fails Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 049/149] drm/amd/display: fix the build when DRM_AMD_DC_DCN is not set Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 050/149] drm/amd/display: trigger timing sync only if TG is running Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 051/149] io_uring: correct check for O_TMPFILE Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 052/149] iio: cros_ec: Fix the allocation size for cros_ec_command Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 053/149] iio: frequency: admv1013: propagate errors from regulator_get_voltage() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 054/149] iio: adc: ad7192: Fix ac excitation feature Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 055/149] iio: adc: ina2xx: avoid NULL pointer dereference on OF device match Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 056/149] binder: fix memory leak in binder_init() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 057/149] misc: rtsx: judge ASPM Mode to set PETXCFG Reg Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 058/149] usb-storage: alauda: Fix uninit-value in alauda_check_media() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 059/149] usb: dwc3: Properly handle processing of pending events Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 060/149] USB: Gadget: core: Help prevent panic during UVC unconfigure Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 061/149] usb: common: usb-conn-gpio: Prevent bailing out if initial role is none Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 062/149] usb: typec: tcpm: Fix response to vsafe0V event Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 063/149] usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 064/149] x86/srso: Fix build breakage with the LLVM linker Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 065/149] x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405 Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 066/149] x86/mm: Fix VDSO and VVAR placement on 5-level paging machines Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 067/149] x86/sev: Do not try to parse for the CC blob on non-AMD hardware Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 068/149] x86/speculation: Add cpu_show_gds() prototype Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 069/149] x86: Move gds_ucode_mitigated() declaration to header Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 070/149] drm/nouveau/disp: Revert a NULL check inside nouveau_connector_get_modes Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 071/149] netfilter: nf_tables: dont skip expired elements during walk Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 072/149] iio: core: Prevent invalid memory access when there is no parent Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 073/149] interconnect: qcom: Add support for mask-based BCMs Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 074/149] interconnect: qcom: sm8450: add enable_mask for bcm nodes Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 075/149] selftests/rseq: Fix build with undefined __weak Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 076/149] selftests: forwarding: Add a helper to skip test when using veth pairs Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 077/149] selftests: forwarding: ethtool: Skip " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 078/149] selftests: forwarding: ethtool_extended_state: " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 079/149] selftests: forwarding: hw_stats_l3_gre: " Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 080/149] selftests: forwarding: Skip test when no interfaces are specified Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 081/149] selftests: forwarding: Switch off timeout Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 082/149] selftests: forwarding: tc_flower: Relax success criterion Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 083/149] net: core: remove unnecessary frame_sz check in bpf_xdp_adjust_tail() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 084/149] bpf, sockmap: Fix map type error in sock_map_del_link Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 085/149] bpf, sockmap: Fix bug that strp_done cannot be called Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 086/149] mISDN: Update parameter type of dsp_cmx_send() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 087/149] macsec: use DEV_STATS_INC() Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 088/149] mptcp: fix the incorrect judgment for msk->cb_flags Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 089/149] net/packet: annotate data-races around tp->status Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 090/149] net/smc: Use correct buffer sizes when switching between TCP and SMC Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 091/149] tcp: add missing family to tcp_set_ca_state() tracepoint Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 092/149] tunnels: fix kasan splat when generating ipv4 pmtu error Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 093/149] xsk: fix refcount underflow in error path Greg Kroah-Hartman
2023-08-13 21:18 ` [PATCH 6.1 094/149] bonding: Fix incorrect deletion of ETH_P_8021AD protocol vid from slaves Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 095/149] dccp: fix data-race around dp->dccps_mss_cache Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 096/149] drivers: net: prevent tun_build_skb() to exceed the packet size limit Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 097/149] drivers: vxlan: vnifilter: free percpu vni stats on error path Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 098/149] iavf: fix potential races for FDIR filters Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 099/149] IB/hfi1: Fix possible panic during hotplug remove Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 100/149] drm/rockchip: Dont spam logs in atomic check Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 101/149] wifi: cfg80211: fix sband iftype data lookup for AP_VLAN Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 102/149] RDMA/umem: Set iova in ODP flow Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 103/149] net: tls: avoid discarding data on record close Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 104/149] net: marvell: prestera: fix handling IPv4 routes with nhid Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 105/149] net: phy: at803x: remove set/get wol callbacks for AR8032 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 106/149] net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 107/149] net: hns3: refactor hclge_mac_link_status_wait for interface reuse Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 108/149] net: hns3: add wait until mac link down Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 109/149] net: hns3: fix deadlock issue when externel_lb and reset are executed together Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 110/149] nexthop: Fix infinite nexthop dump when using maximum nexthop ID Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 111/149] nexthop: Make nexthop bucket dump more efficient Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 112/149] nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 113/149] net: hns3: fix strscpy causing content truncation issue Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 114/149] dmaengine: mcf-edma: Fix a potential un-allocated memory access Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 115/149] dmaengine: owl-dma: Modify mismatched function name Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 116/149] net/mlx5: Allow 0 for total host VFs Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 117/149] net/mlx5: LAG, Check correct bucket when modifying LAG Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 118/149] net/mlx5: Skip clock update work when device is in error state Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 119/149] net/mlx5: Reload auxiliary devices in pci error handlers Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 120/149] ibmvnic: Enforce stronger sanity checks on login response Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 121/149] ibmvnic: Unmap DMA login rsp buffer on send login fail Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 122/149] ibmvnic: Handle DMA unmapping of login buffs in release functions Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 123/149] ibmvnic: Do partial reset on login failure Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 124/149] ibmvnic: Ensure login failure recovery is safe from other resets Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 125/149] gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 126/149] gpio: sim: mark the GPIO chip as a one that can sleep Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 127/149] btrfs: wait for actual caching progress during allocation Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 128/149] btrfs: dont stop integrity writeback too early Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 129/149] btrfs: properly clear end of the unreserved range in cow_file_range Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 130/149] btrfs: exit gracefully if reloc roots dont match Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 131/149] btrfs: reject invalid reloc tree root keys with stack dump Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 132/149] btrfs: set cache_block_group_error if we find an error Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 133/149] nvme-tcp: fix potential unbalanced freeze & unfreeze Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 134/149] nvme-rdma: " Greg Kroah-Hartman
2023-08-13 21:19 ` Greg Kroah-Hartman [this message]
2023-08-13 21:19 ` [PATCH 6.1 136/149] scsi: core: Fix legacy /proc parsing buffer overflow Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 137/149] scsi: storvsc: Fix handling of virtual Fibre Channel timeouts Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 138/149] scsi: ufs: renesas: Fix private allocation Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 139/149] scsi: 53c700: Check that command slot is not NULL Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 140/149] scsi: snic: Fix possible memory leak if device_add() fails Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 141/149] scsi: core: " Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 142/149] scsi: fnic: Replace return codes in fnic_clean_pending_aborts() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 143/149] scsi: qedi: Fix firmware halt over suspend and resume Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 144/149] scsi: qedf: " Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 145/149] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 146/149] ACPI: scan: Create platform device for CS35L56 Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 147/149] alpha: remove __init annotation from exported page_is_ram() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 148/149] sch_netem: fix issues in netem_change() vs get_dist_table() Greg Kroah-Hartman
2023-08-13 21:19 ` [PATCH 6.1 149/149] drm/amd/pm/smu7: move variables to where they are used Greg Kroah-Hartman
2023-08-14 5:11 ` [PATCH 6.1 000/149] 6.1.46-rc1 review Bagas Sanjaya
2023-08-14 10:33 ` Takeshi Ogasawara
2023-08-14 14:04 ` Guenter Roeck
2023-08-16 16:26 ` Greg Kroah-Hartman
2023-08-26 15:48 ` Greg Kroah-Hartman
2023-08-27 11:21 ` Guenter Roeck
2023-08-27 16:34 ` Greg Kroah-Hartman
2023-08-14 14:06 ` Conor Dooley
2023-08-14 14:50 ` Thierry Reding
2023-08-14 17:35 ` SeongJae Park
2023-08-14 18:33 ` Guenter Roeck
2023-08-15 0:30 ` Ron Economos
2023-08-15 0:48 ` Shuah Khan
2023-08-15 3:37 ` Daniel Díaz
2023-08-15 16:25 ` Florian Fainelli
2023-08-15 17:09 ` Allen Pais
2023-08-16 22:23 ` Joel Fernandes
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=20230813211722.754710096@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=pablo@netfilter.org \
--cc=patches@lists.linux.dev \
--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;
as well as URLs for NNTP newsgroup(s).