From: Lee Jones <lee@kernel.org>
To: Jialiang Wang <wangjialiang0806@163.com>, stable@kernel.org
Cc: simon.horman@corigine.com, kuba@kernel.org, davem@davemloft.net,
edumazet@google.com, pabeni@redhat.com, niejianglei2021@163.com,
oss-drivers@corigine.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] nfp: fix use-after-free in area_cache_get()
Date: Wed, 7 Dec 2022 12:21:10 +0000 [thread overview]
Message-ID: <Y5CFNqYNMkryiDcP@google.com> (raw)
In-Reply-To: <20220810073057.4032-1-wangjialiang0806@163.com>
On Wed, 10 Aug 2022, Jialiang Wang wrote:
> area_cache_get() is used to distribute cache->area and set cache->id,
> and if cache->id is not 0 and cache->area->kref refcount is 0, it will
> release the cache->area by nfp_cpp_area_release(). area_cache_get()
> set cache->id before cpp->op->area_init() and nfp_cpp_area_acquire().
>
> But if area_init() or nfp_cpp_area_acquire() fails, the cache->id is
> is already set but the refcount is not increased as expected. At this
> time, calling the nfp_cpp_area_release() will cause use-after-free.
>
> To avoid the use-after-free, set cache->id after area_init() and
> nfp_cpp_area_acquire() complete successfully.
>
> Note: This vulnerability is triggerable by providing emulated device
> equipped with specified configuration.
>
> BUG: KASAN: use-after-free in nfp6000_area_init (/home/user/Kernel/v5.19
> /x86_64/src/drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c:760)
> Write of size 4 at addr ffff888005b7f4a0 by task swapper/0/1
>
> Call Trace:
> <TASK>
> nfp6000_area_init (/home/user/Kernel/v5.19/x86_64/src/drivers/net
> /ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c:760)
> area_cache_get.constprop.8 (/home/user/Kernel/v5.19/x86_64/src/drivers
> /net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:884)
>
> Allocated by task 1:
> nfp_cpp_area_alloc_with_name (/home/user/Kernel/v5.19/x86_64/src/drivers
> /net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:303)
> nfp_cpp_area_cache_add (/home/user/Kernel/v5.19/x86_64/src/drivers/net
> /ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:802)
> nfp6000_init (/home/user/Kernel/v5.19/x86_64/src/drivers/net/ethernet
> /netronome/nfp/nfpcore/nfp6000_pcie.c:1230)
> nfp_cpp_from_operations (/home/user/Kernel/v5.19/x86_64/src/drivers/net
> /ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:1215)
> nfp_pci_probe (/home/user/Kernel/v5.19/x86_64/src/drivers/net/ethernet
> /netronome/nfp/nfp_main.c:744)
>
> Freed by task 1:
> kfree (/home/user/Kernel/v5.19/x86_64/src/mm/slub.c:4562)
> area_cache_get.constprop.8 (/home/user/Kernel/v5.19/x86_64/src/drivers
> /net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:873)
> nfp_cpp_read (/home/user/Kernel/v5.19/x86_64/src/drivers/net/ethernet
> /netronome/nfp/nfpcore/nfp_cppcore.c:924 /home/user/Kernel/v5.19/x86_64
> /src/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:973)
> nfp_cpp_readl (/home/user/Kernel/v5.19/x86_64/src/drivers/net/ethernet
> /netronome/nfp/nfpcore/nfp_cpplib.c:48)
>
> Signed-off-by: Jialiang Wang <wangjialiang0806@163.com>
Any reason why this doesn't have a Fixes: tag applied and/or didn't
get sent to Stable?
Looks as if this needs to go back as far as v4.19.
Fixes: 4cb584e0ee7df ("nfp: add CPP access core")
commit 02e1a114fdb71e59ee6770294166c30d437bf86a upstream.
> ---
> drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
> index 34c0d2ddf9ef..a8286d0032d1 100644
> --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
> +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
> @@ -874,7 +874,6 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
> }
>
> /* Adjust the start address to be cache size aligned */
> - cache->id = id;
> cache->addr = addr & ~(u64)(cache->size - 1);
>
> /* Re-init to the new ID and address */
> @@ -894,6 +893,8 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
> return NULL;
> }
>
> + cache->id = id;
> +
> exit:
> /* Adjust offset */
> *offset = addr - cache->addr;
--
Lee Jones [李琼斯]
next prev parent reply other threads:[~2022-12-07 12:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-10 7:30 [PATCH v3] nfp: fix use-after-free in area_cache_get() Jialiang Wang
2022-08-11 4:10 ` Yinjun Zhang
2022-08-11 8:34 ` Simon Horman
2022-08-11 16:10 ` patchwork-bot+netdevbpf
2022-12-07 12:21 ` Lee Jones [this message]
2022-12-08 14:09 ` Simon Horman
2022-12-14 10:20 ` Lee Jones
2022-12-15 9:25 ` Lee Jones
2022-12-15 9:45 ` Greg KH
2022-12-15 9:51 ` Lee Jones
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=Y5CFNqYNMkryiDcP@google.com \
--to=lee@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=niejianglei2021@163.com \
--cc=oss-drivers@corigine.com \
--cc=pabeni@redhat.com \
--cc=simon.horman@corigine.com \
--cc=stable@kernel.org \
--cc=wangjialiang0806@163.com \
/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.