All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Hugues ANGUELKOV <hanguelkov@randorisec.fr>
Cc: netdev@vger.kernel.org, security@kernel.org, pablo@netfilter.org,
	kadlec@netfilter.org, fw@strlen.de, davy <davy@randorisec.fr>,
	amongodin@randorisec.fr, torvalds@linuxfoundation.org
Subject: Re: [PATCH v1] netfilter: nf_tables: fix nft_set_elem_init heap buffer overflow
Date: Sat, 2 Jul 2022 11:59:48 -0700	[thread overview]
Message-ID: <20220702115948.5de8b1e0@kernel.org> (raw)
In-Reply-To: <271d4a36-2212-5bce-5efb-f5bad53fa49e@randorisec.fr>

On Sat, 2 Jul 2022 19:59:11 +0200 Hugues ANGUELKOV wrote:
> From d91007a18140e02a1f12c9627058a019fe55b8e6 Mon Sep 17 00:00:00 2001
> From: Arthur Mongodin <amongodin@randorisec.fr>
> Date: Sat, 2 Jul 2022 17:11:48 +0200
> Subject: [PATCH v1] netfilter: nf_tables: fix nft_set_elem_init heap buffer
>  overflow

You have the headers twice, you may want to trim them or use git
send-email if v2 is needed.

> The length used for the memcpy in nft_set_elem_init may exceed the bound
> of the allocated object due to a weak check in nft_setelem_parse_data.
> As a user can add an element with a data type NFT_DATA_VERDICT to a set
> with a data type different of NFT_DATA_VERDICT, then the comparison on the
> data type of the element allows to avoid the comparaison on the data length
> This fix forces the length comparison in nft_setelem_parse_data by removing
> the check for NFT_DATA_VERDICT type.

> Fixes: fdb9c405e35b ("netfilter: nf_tables: allow up to 64 bytes in the set element data area")
> Signed-off-by: Arthur Mongodin <amongodin@randorisec.fr>
> ---
>  net/netfilter/nf_tables_api.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
> index 51144fc66889..07845f211f3e 100644
> --- a/net/netfilter/nf_tables_api.c
> +++ b/net/netfilter/nf_tables_api.c
> @@ -5219,7 +5219,7 @@ static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
>  	if (err < 0)
>  		return err;
>  
> -	if (desc->type != NFT_DATA_VERDICT && desc->len != set->dlen) {
> +	if (desc->len != set->dlen) {

Looking at the commit under fixes it seems like it changes the check
from desc->type != ... to set->type != ...

Seems like either the bug is even older or the fix should be to go back
to checking set->type. Prolly the former?

  parent reply	other threads:[~2022-07-02 18:59 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-02 17:59 [PATCH v1] netfilter: nf_tables: fix nft_set_elem_init heap buffer overflow Hugues ANGUELKOV
2022-07-02 18:57 ` Pablo Neira Ayuso
2022-07-02 19:11   ` Pablo Neira Ayuso
2022-07-02 19:23     ` Hugues ANGUELKOV
2022-07-02 18:59 ` Jakub Kicinski [this message]
2022-07-02 19:02   ` Pablo Neira Ayuso

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=20220702115948.5de8b1e0@kernel.org \
    --to=kuba@kernel.org \
    --cc=amongodin@randorisec.fr \
    --cc=davy@randorisec.fr \
    --cc=fw@strlen.de \
    --cc=hanguelkov@randorisec.fr \
    --cc=kadlec@netfilter.org \
    --cc=netdev@vger.kernel.org \
    --cc=pablo@netfilter.org \
    --cc=security@kernel.org \
    --cc=torvalds@linuxfoundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.