From: Leon Romanovsky <leon@kernel.org>
To: Vladimir Oltean <olteanv@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
Florian Fainelli <f.fainelli@gmail.com>,
netdev@vger.kernel.org, Nikolay Aleksandrov <razor@blackwall.org>,
bridge@lists.linux-foundation.org,
Eric Dumazet <edumazet@google.com>,
Roopa Prabhu <roopa@nvidia.com>, Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
"David S . Miller" <davem@davemloft.net>
Subject: Re: [Bridge] [PATCH net-next] netlink: provide an ability to set default extack message
Date: Fri, 27 Jan 2023 07:22:26 +0200 [thread overview]
Message-ID: <Y9NfkgRbWAbrxQ1G@unreal> (raw)
In-Reply-To: <20230126223213.riq6i2gdztwuinwi@skbuf>
On Fri, Jan 27, 2023 at 12:32:13AM +0200, Vladimir Oltean wrote:
> On Thu, Jan 26, 2023 at 09:15:03PM +0200, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@nvidia.com>
> >
> > In netdev common pattern, xxtack pointer is forwarded to the drivers
> ~~~~~~
> extack
>
> > to be filled with error message. However, the caller can easily
> > overwrite the filled message.
> >
> > Instead of adding multiple "if (!extack->_msg)" checks before any
> > NL_SET_ERR_MSG() call, which appears after call to the driver, let's
> > add this check to common code.
> >
> > [1] https://lore.kernel.org/all/Y9Irgrgf3uxOjwUm@unreal
> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > ---
>
> I would somewhat prefer not doing this, and instead introducing a new
> NL_SET_ERR_MSG_WEAK() of sorts.
It means changing ALL error unwind places where extack was forwarded
before to subfunctions.
Places like this:
ret = func(..., extack)
if (ret) {
NL_SET_ERR_MSG_MOD...
return ret;
}
will need to be changed to something like this:
ret = func(..., extack)
if (ret) {
NL_SET_ERR_MSG_WEAK...
return ret;
}
>
> The reason has to do with the fact that an extack is sometimes also
> used to convey warnings rather than hard errors, for example right here
> in net/dsa/slave.c:
>
> if (err == -EOPNOTSUPP) {
> if (extack && !extack->_msg)
> NL_SET_ERR_MSG_MOD(extack,
> "Offloading not supported");
> NL_SET_ERR_MSG_MOD(extack,
> "Offloading not supported");
> err = 0;
> }
>
> Imagine (not the case here) that below such a "warning extack" lies
> something like this:
>
> if (arg > range) {
> NL_SET_ERR_MSG_MOD(extack, "Argument outside expected range");
> return -ERANGE;
> }
>
> What you'll get is:
>
> Error: Offloading not supported (error code -ERANGE).
>
> whereas before, we relied on any NL_SET_ERR_MSG_MOD() call to overwrite
> the "warning" extack, and that to only be shown on error code 0.
Can we please discuss current code and not over-engineered case which
doesn't exist in the reality?
Even for your case, I would like to see NL_SET_ERR_MSG_FORCE() to
explicitly say that message will be overwritten.
Thanks
WARNING: multiple messages have this Message-ID (diff)
From: Leon Romanovsky <leon@kernel.org>
To: Vladimir Oltean <olteanv@gmail.com>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Andrew Lunn <andrew@lunn.ch>,
bridge@lists.linux-foundation.org,
Eric Dumazet <edumazet@google.com>,
Florian Fainelli <f.fainelli@gmail.com>,
netdev@vger.kernel.org, Nikolay Aleksandrov <razor@blackwall.org>,
Paolo Abeni <pabeni@redhat.com>, Roopa Prabhu <roopa@nvidia.com>
Subject: Re: [PATCH net-next] netlink: provide an ability to set default extack message
Date: Fri, 27 Jan 2023 07:22:26 +0200 [thread overview]
Message-ID: <Y9NfkgRbWAbrxQ1G@unreal> (raw)
In-Reply-To: <20230126223213.riq6i2gdztwuinwi@skbuf>
On Fri, Jan 27, 2023 at 12:32:13AM +0200, Vladimir Oltean wrote:
> On Thu, Jan 26, 2023 at 09:15:03PM +0200, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@nvidia.com>
> >
> > In netdev common pattern, xxtack pointer is forwarded to the drivers
> ~~~~~~
> extack
>
> > to be filled with error message. However, the caller can easily
> > overwrite the filled message.
> >
> > Instead of adding multiple "if (!extack->_msg)" checks before any
> > NL_SET_ERR_MSG() call, which appears after call to the driver, let's
> > add this check to common code.
> >
> > [1] https://lore.kernel.org/all/Y9Irgrgf3uxOjwUm@unreal
> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > ---
>
> I would somewhat prefer not doing this, and instead introducing a new
> NL_SET_ERR_MSG_WEAK() of sorts.
It means changing ALL error unwind places where extack was forwarded
before to subfunctions.
Places like this:
ret = func(..., extack)
if (ret) {
NL_SET_ERR_MSG_MOD...
return ret;
}
will need to be changed to something like this:
ret = func(..., extack)
if (ret) {
NL_SET_ERR_MSG_WEAK...
return ret;
}
>
> The reason has to do with the fact that an extack is sometimes also
> used to convey warnings rather than hard errors, for example right here
> in net/dsa/slave.c:
>
> if (err == -EOPNOTSUPP) {
> if (extack && !extack->_msg)
> NL_SET_ERR_MSG_MOD(extack,
> "Offloading not supported");
> NL_SET_ERR_MSG_MOD(extack,
> "Offloading not supported");
> err = 0;
> }
>
> Imagine (not the case here) that below such a "warning extack" lies
> something like this:
>
> if (arg > range) {
> NL_SET_ERR_MSG_MOD(extack, "Argument outside expected range");
> return -ERANGE;
> }
>
> What you'll get is:
>
> Error: Offloading not supported (error code -ERANGE).
>
> whereas before, we relied on any NL_SET_ERR_MSG_MOD() call to overwrite
> the "warning" extack, and that to only be shown on error code 0.
Can we please discuss current code and not over-engineered case which
doesn't exist in the reality?
Even for your case, I would like to see NL_SET_ERR_MSG_FORCE() to
explicitly say that message will be overwritten.
Thanks
next prev parent reply other threads:[~2023-01-27 5:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-26 19:15 [Bridge] [PATCH net-next] netlink: provide an ability to set default extack message Leon Romanovsky
2023-01-26 19:15 ` Leon Romanovsky
2023-01-26 22:32 ` [Bridge] " Vladimir Oltean
2023-01-26 22:32 ` Vladimir Oltean
2023-01-26 22:37 ` [Bridge] " Jakub Kicinski
2023-01-26 22:37 ` Jakub Kicinski
2023-01-26 22:44 ` [Bridge] " Vladimir Oltean
2023-01-26 22:44 ` Vladimir Oltean
2023-01-26 23:39 ` [Bridge] " Jakub Kicinski
2023-01-26 23:39 ` Jakub Kicinski
2023-01-27 5:26 ` [Bridge] " Leon Romanovsky
2023-01-27 5:26 ` Leon Romanovsky
2023-01-27 7:26 ` [Bridge] " Jakub Kicinski
2023-01-27 7:26 ` Jakub Kicinski
2023-01-29 11:43 ` [Bridge] " Leon Romanovsky
2023-01-29 11:43 ` Leon Romanovsky
2023-01-27 5:22 ` Leon Romanovsky [this message]
2023-01-27 5:22 ` Leon Romanovsky
2023-01-27 9:22 ` [Bridge] " Vladimir Oltean
2023-01-27 9:22 ` Vladimir Oltean
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=Y9NfkgRbWAbrxQ1G@unreal \
--to=leon@kernel.org \
--cc=andrew@lunn.ch \
--cc=bridge@lists.linux-foundation.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.org \
--cc=roopa@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 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.