From: Simon Horman <horms@kernel.org>
To: Lizhi Xu <lizhi.xu@windriver.com>
Cc: syzbot+e9ed4e4368d450c8f9db@syzkaller.appspotmail.com,
christophe.leroy@csgroup.eu, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org,
linux-kernel@vger.kernel.org, maxime.chevallier@bootlin.com,
netdev@vger.kernel.org, pabeni@redhat.com,
syzkaller-bugs@googlegroups.com
Subject: Re: [PATCH net-next] net: ethtool: phy: Distinguish whether dev is got by phy start or doit
Date: Fri, 13 Sep 2024 12:44:29 +0100 [thread overview]
Message-ID: <20240913114429.GY572255@kernel.org> (raw)
In-Reply-To: <20240913080714.1809254-1-lizhi.xu@windriver.com>
On Fri, Sep 13, 2024 at 04:07:13PM +0800, Lizhi Xu wrote:
> Syzbot reported a refcount bug in ethnl_phy_done.
> This is because when executing ethnl_phy_done, it does not know who obtained
> the dev(it can be got by ethnl_phy_doit or ethnl_phy_start) and directly
> executes ethnl_parse_header_dev_put as long as the dev is not NULL.
> Add dev_start_doit to the structure phy_req_info to distinguish who obtains dev.
>
> Fixes: 17194be4c8e1 ("net: ethtool: Introduce a command to list PHYs on an interface")
> Reported-and-tested-by: syzbot+e9ed4e4368d450c8f9db@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=e9ed4e4368d450c8f9db
> Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
It seems that Maxime has also posted a patch for this problem.
- [PATCH net-next] net: ethtool: phy: Don't set the context dev pointer for unfiltered DUMP
https://lore.kernel.org/all/20240913100515.167341-1-maxime.chevallier@bootlin.com/
> ---
> net/ethtool/phy.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/net/ethtool/phy.c b/net/ethtool/phy.c
> index 4ef7c6e32d10..321a7f89803f 100644
> --- a/net/ethtool/phy.c
> +++ b/net/ethtool/phy.c
> @@ -13,6 +13,7 @@
> struct phy_req_info {
> struct ethnl_req_info base;
> struct phy_device_node *pdn;
> + u8 dev_start_doit;
I think bool might be a more suitable type for this field.
> };
>
> #define PHY_REQINFO(__req_base) \
> @@ -157,6 +158,9 @@ int ethnl_phy_doit(struct sk_buff *skb, struct genl_info *info)
> if (ret < 0)
> return ret;
>
> + if (req_info.base.dev)
> + req_info.dev_start_doit = 0;
> +
> rtnl_lock();
>
> ret = ethnl_phy_parse_request(&req_info.base, tb, info->extack);
> @@ -223,10 +227,14 @@ int ethnl_phy_start(struct netlink_callback *cb)
> false);
> ctx->ifindex = 0;
> ctx->phy_index = 0;
> + ctx->phy_req_info->dev_start_doit = 0;
>
> if (ret)
> kfree(ctx->phy_req_info);
>
> + if (ctx->phy_req_info->base.dev)
> + ctx->phy_req_info->dev_start_doit = 1;
This doesn't seem right, ctx->phy_req_info may have been freed above.
> +
> return ret;
> }
>
> @@ -234,7 +242,7 @@ int ethnl_phy_done(struct netlink_callback *cb)
> {
> struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx;
>
> - if (ctx->phy_req_info->base.dev)
> + if (ctx->phy_req_info->base.dev && ctx->phy_req_info->dev_start_doit)
> ethnl_parse_header_dev_put(&ctx->phy_req_info->base);
>
> kfree(ctx->phy_req_info);
> --
> 2.43.0
>
>
next prev parent reply other threads:[~2024-09-13 11:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-11 8:00 [syzbot] [net?] WARNING: refcount bug in ethnl_phy_done syzbot
2024-09-11 10:04 ` Maxime Chevallier
2024-09-11 10:08 ` Eric Dumazet
2024-09-11 11:40 ` Maxime Chevallier
2024-09-13 1:51 ` [syzbot] " syzbot
2024-09-13 7:27 ` syzbot
2024-09-13 8:07 ` [PATCH net-next] net: ethtool: phy: Distinguish whether dev is got by phy start or doit Lizhi Xu
2024-09-13 11:44 ` Simon Horman [this message]
2024-09-13 11:51 ` Maxime Chevallier
2024-09-16 7:38 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2024-09-16 2:27 kernel test robot
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=20240913114429.GY572255@kernel.org \
--to=horms@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizhi.xu@windriver.com \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=syzbot+e9ed4e4368d450c8f9db@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.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.