From: Maxim Mikityanskiy <maximmi@nvidia.com>
To: Lv Yunlong <lyl2019@mail.ustc.edu.cn>, <borisp@nvidia.com>,
<saeedm@nvidia.com>, <leon@kernel.org>, <davem@davemloft.net>,
<kuba@kernel.org>, <maximmi@mellanox.com>
Cc: <netdev@vger.kernel.org>, <linux-rdma@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] net/mlx5: Fix a potential use after free in mlx5e_ktls_del_rx
Date: Tue, 23 Mar 2021 10:52:07 +0200 [thread overview]
Message-ID: <0b9cd54f-cab4-7675-cecf-171d4d45b897@nvidia.com> (raw)
In-Reply-To: <20210322142109.6305-1-lyl2019@mail.ustc.edu.cn>
On 2021-03-22 16:21, Lv Yunlong wrote:
> My static analyzer tool reported a potential uaf in
> mlx5e_ktls_del_rx. In this function, if the condition
> cancel_work_sync(&resync->work) is true, and then
> priv_rx could be freed. But priv_rx is used later.
>
> I'm unfamiliar with how this function works. Maybe the
> maintainer forgot to add return after freeing priv_rx?
Thanks for running a static analyzer over our code! Sadly, the fix is
not correct and breaks stuff, and there is no problem with this code.
First of all, mlx5e_ktls_priv_rx_put doesn't necessarily free priv_rx.
It decrements the refcount and frees the object only when the refcount
goes to zero. Unless there are other bugs, the refcount in this branch
is not expected to go to zero, so there is no use-after-free in the code
below. The corresponding elevation of the refcount happens before
queue_work of resync->work. So, no, we haven't forgot to add a return,
we just expect priv_rx to stay alive after this call, and we want to run
the cleanup code below this `if`, while your fix skips the cleanup and
skips the second mlx5e_ktls_priv_rx_put in the end of this function,
leading to a memory leak.
If you'd like to calm down the static analyzer, you could try to add a
WARN_ON assertion to check that mlx5e_ktls_priv_rx_put returns false in
that `if` (meaning that the object hasn't been freed). If would be nice
to have this WARN_ON regardless of static analyzers.
> Fixes: b850bbff96512 ("net/mlx5e: kTLS, Use refcounts to free kTLS RX priv context")
> Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
> ---
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
> index d06532d0baa4..54a77df42316 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
> @@ -663,8 +663,10 @@ void mlx5e_ktls_del_rx(struct net_device *netdev, struct tls_context *tls_ctx)
> */
> wait_for_completion(&priv_rx->add_ctx);
> resync = &priv_rx->resync;
> - if (cancel_work_sync(&resync->work))
> + if (cancel_work_sync(&resync->work)) {
> mlx5e_ktls_priv_rx_put(priv_rx);
> + return;
> + }
>
> priv_rx->stats->tls_del++;
> if (priv_rx->rule.rule)
>
next prev parent reply other threads:[~2021-03-23 8:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-22 14:21 Lv Yunlong
2021-03-23 8:52 ` Maxim Mikityanskiy [this message]
2021-03-23 13:38 ` lyl2019
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=0b9cd54f-cab4-7675-cecf-171d4d45b897@nvidia.com \
--to=maximmi@nvidia.com \
--cc=borisp@nvidia.com \
--cc=davem@davemloft.net \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=lyl2019@mail.ustc.edu.cn \
--cc=maximmi@mellanox.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®