From: Richard Guy Briggs <rgb@redhat.com>
To: Phil Sutter <phil@nwl.cc>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>,
netfilter-devel@vger.kernel.org, Florian Westphal <fw@strlen.de>,
audit@vger.kernel.org, Paul Moore <paul@paul-moore.com>
Subject: Re: [nf PATCH 2/3] netfilter: nf_tables: Deduplicate nft_register_obj audit logs
Date: Wed, 27 Sep 2023 21:37:51 -0400 [thread overview]
Message-ID: <ZRTY78uKUuqo4WHP@madcap2.tricolour.ca> (raw)
In-Reply-To: <20230923015351.15707-3-phil@nwl.cc>
On 2023-09-23 03:53, Phil Sutter wrote:
> When adding/updating an object, the transaction handler emits suitable
> audit log entries already, the one in nft_obj_notify() is redundant. To
> fix that (and retain the audit logging from objects' 'update' callback),
> Introduce an "audit log free" variant for internal use.
>
> Fixes: c520292f29b80 ("audit: log nftables configuration change events once per table")
> Signed-off-by: Phil Sutter <phil@nwl.cc>
Reviewed-by: Richard Guy Briggs <rgb@redhat.com>
> ---
> net/netfilter/nf_tables_api.c | 44 ++++++++++++-------
> .../testing/selftests/netfilter/nft_audit.sh | 20 +++++++++
> 2 files changed, 48 insertions(+), 16 deletions(-)
>
> diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
> index 0e5d9bdba82b8..48d50df950a18 100644
> --- a/net/netfilter/nf_tables_api.c
> +++ b/net/netfilter/nf_tables_api.c
> @@ -8046,24 +8046,14 @@ static int nf_tables_delobj(struct sk_buff *skb, const struct nfnl_info *info,
> return nft_delobj(&ctx, obj);
> }
>
> -void nft_obj_notify(struct net *net, const struct nft_table *table,
> - struct nft_object *obj, u32 portid, u32 seq, int event,
> - u16 flags, int family, int report, gfp_t gfp)
> +static void
> +__nft_obj_notify(struct net *net, const struct nft_table *table,
> + struct nft_object *obj, u32 portid, u32 seq, int event,
> + u16 flags, int family, int report, gfp_t gfp)
> {
> struct nftables_pernet *nft_net = nft_pernet(net);
> struct sk_buff *skb;
> int err;
> - char *buf = kasprintf(gfp, "%s:%u",
> - table->name, nft_net->base_seq);
> -
> - audit_log_nfcfg(buf,
> - family,
> - obj->handle,
> - event == NFT_MSG_NEWOBJ ?
> - AUDIT_NFT_OP_OBJ_REGISTER :
> - AUDIT_NFT_OP_OBJ_UNREGISTER,
> - gfp);
> - kfree(buf);
>
> if (!report &&
> !nfnetlink_has_listeners(net, NFNLGRP_NFTABLES))
> @@ -8086,13 +8076,35 @@ void nft_obj_notify(struct net *net, const struct nft_table *table,
> err:
> nfnetlink_set_err(net, portid, NFNLGRP_NFTABLES, -ENOBUFS);
> }
> +
> +void nft_obj_notify(struct net *net, const struct nft_table *table,
> + struct nft_object *obj, u32 portid, u32 seq, int event,
> + u16 flags, int family, int report, gfp_t gfp)
> +{
> + struct nftables_pernet *nft_net = nft_pernet(net);
> + char *buf = kasprintf(gfp, "%s:%u",
> + table->name, nft_net->base_seq);
> +
> + audit_log_nfcfg(buf,
> + family,
> + obj->handle,
> + event == NFT_MSG_NEWOBJ ?
> + AUDIT_NFT_OP_OBJ_REGISTER :
> + AUDIT_NFT_OP_OBJ_UNREGISTER,
> + gfp);
> + kfree(buf);
> +
> + __nft_obj_notify(net, table, obj, portid, seq, event,
> + flags, family, report, gfp);
> +}
> EXPORT_SYMBOL_GPL(nft_obj_notify);
>
> static void nf_tables_obj_notify(const struct nft_ctx *ctx,
> struct nft_object *obj, int event)
> {
> - nft_obj_notify(ctx->net, ctx->table, obj, ctx->portid, ctx->seq, event,
> - ctx->flags, ctx->family, ctx->report, GFP_KERNEL);
> + __nft_obj_notify(ctx->net, ctx->table, obj, ctx->portid,
> + ctx->seq, event, ctx->flags, ctx->family,
> + ctx->report, GFP_KERNEL);
> }
>
> /*
> diff --git a/tools/testing/selftests/netfilter/nft_audit.sh b/tools/testing/selftests/netfilter/nft_audit.sh
> index 0b3255e7b3538..bb34329e02a7f 100755
> --- a/tools/testing/selftests/netfilter/nft_audit.sh
> +++ b/tools/testing/selftests/netfilter/nft_audit.sh
> @@ -85,6 +85,26 @@ do_test "nft add set t1 s2 $setblock; add set t1 s3 { $settype; }" \
> do_test "nft add element t1 s3 $setelem" \
> "table=t1 family=2 entries=3 op=nft_register_setelem"
>
> +# adding counters
> +
> +do_test 'nft add counter t1 c1' \
> +'table=t1 family=2 entries=1 op=nft_register_obj'
> +
> +do_test 'nft add counter t2 c1; add counter t2 c2' \
> +'table=t2 family=2 entries=2 op=nft_register_obj'
> +
> +# adding/updating quotas
> +
> +do_test 'nft add quota t1 q1 { 10 bytes }' \
> +'table=t1 family=2 entries=1 op=nft_register_obj'
> +
> +do_test 'nft add quota t2 q1 { 10 bytes }; add quota t2 q2 { 10 bytes }' \
> +'table=t2 family=2 entries=2 op=nft_register_obj'
> +
> +# changing the quota value triggers obj update path
> +do_test 'nft add quota t1 q1 { 20 bytes }' \
> +'table=t1 family=2 entries=1 op=nft_register_obj'
> +
> # resetting rules
>
> do_test 'nft reset rules t1 c2' \
> --
> 2.41.0
>
- RGB
--
Richard Guy Briggs <rgb@redhat.com>
Sr. S/W Engineer, Kernel Security, Base Operating Systems
Remote, Ottawa, Red Hat Canada
Upstream IRC: SunRaycer
Voice: +1.613.860 2354 SMS: +1.613.518.6570
next prev parent reply other threads:[~2023-09-28 1:38 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-23 1:53 [nf PATCH 0/3] Review nf_tables audit logging Phil Sutter
2023-09-23 1:53 ` [nf PATCH 1/3] selftests: netfilter: Extend nft_audit.sh Phil Sutter
2023-09-23 1:53 ` [nf PATCH 2/3] netfilter: nf_tables: Deduplicate nft_register_obj audit logs Phil Sutter
2023-09-27 19:41 ` Pablo Neira Ayuso
2023-09-28 14:48 ` Phil Sutter
2023-09-28 19:14 ` Pablo Neira Ayuso
2023-09-28 1:37 ` Richard Guy Briggs [this message]
2023-10-03 17:50 ` Paul Moore
2023-09-23 1:53 ` [nf PATCH 3/3] netfilter: nf_tables: Audit log object reset once per table Phil Sutter
2023-09-28 17:02 ` Richard Guy Briggs
2023-10-03 17:51 ` Paul Moore
2023-10-03 20:48 ` Florian Westphal
2023-09-26 21:24 ` [nf PATCH 0/3] Review nf_tables audit logging Paul Moore
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=ZRTY78uKUuqo4WHP@madcap2.tricolour.ca \
--to=rgb@redhat.com \
--cc=audit@vger.kernel.org \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=paul@paul-moore.com \
--cc=phil@nwl.cc \
/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