Re: [PATCH nf] netfilter: nft_set_pipapo: fix improper element removal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 19 Jul 2023 21:08:21 +0200
Florian Westphal <fw@xxxxxxxxx> wrote:

> end key should be equal to start unless NFT_SET_EXT_KEY_END is present.
> 
> Its possible to add elements that only have a start key
> ("{ 1.0.0.0 . 2.0.0.0 }") without an internval end.
> 
> Insertion treats this via:
> 
> if (nft_set_ext_exists(ext, NFT_SET_EXT_KEY_END))
>    end = (const u8 *)nft_set_ext_key_end(ext)->data;
> else
>    end = start;
> 
> but removal side always uses nft_set_ext_key_end().

Oops, right, nft_pipapo_remove() should do exactly the same.

> This is wrong and leads to garbage remaining in the set after removal
> next lookup/insert attempt will give:
> 
> BUG: KASAN: slab-use-after-free in pipapo_get+0x8eb/0xb90
> Read of size 1 at addr ffff888100d50586 by task nft-pipapo_uaf_/1399
> Call Trace:
>  kasan_report+0x105/0x140
>  pipapo_get+0x8eb/0xb90
>  nft_pipapo_insert+0x1dc/0x1710
>  nf_tables_newsetelem+0x31f5/0x4e00
>  ..
> 
> Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
> Cc: Stefano Brivio <sbrivio@xxxxxxxxxx>
> Reported-by: lonial con <kongln9170@xxxxxxxxx>
> Signed-off-by: Florian Westphal <fw@xxxxxxxxx>

Reviewed-by: Stefano Brivio <sbrivio@xxxxxxxxxx>

Thanks for fixing this!

-- 
Stefano




[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux