From: Guillaume Nault <gnault@redhat.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: dsahern@gmail.com, stephen@networkplumber.org, netdev@vger.kernel.org
Subject: Re: [RFC iproute2] tos: interpret ToS in natural numeral system
Date: Wed, 16 Feb 2022 23:23:52 +0100 [thread overview]
Message-ID: <20220216222352.GA3432@pc-4.home> (raw)
In-Reply-To: <20220216194205.3780848-1-kuba@kernel.org>
On Wed, Feb 16, 2022 at 11:42:05AM -0800, Jakub Kicinski wrote:
> Silently forcing a base numeral system is very painful for users.
> ip currently interprets tos 10 as 0x10. Imagine user's bash script
> does:
>
> .. tos $((TOS * 2)) ..
>
> or any numerical operation on the ToS.
>
> This patch breaks existing scripts if they expect 10 to be 0x10.
I agree that we shouldn't have forced base 16 in the first place.
But after so many years I find it a bit dangerous to change that.
What about just printing a warning when the value isn't prefixed with
'0x'? Something like (completely untested):
@@ -535,6 +535,12 @@ int rtnl_dsfield_a2n(__u32 *id, const char *arg)
if (!end || end == arg || *end || res > 255)
return -1;
*id = res;
+
+ if (strncmp("0x", arg, 2))
+ fprintf(stderr,
+ "Warning: dsfield and tos parameters are interpreted as hexadecimal values\n"
+ "Use 'dsfield 0x%02x' to avoid this message\n", res);
+
return 0;
}
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> --
> I get the feeling this was discussed in the past.
>
> Also there's more:
>
> devlink/devlink.c: val = strtoull(str, &endptr, 10);
> devlink/devlink.c: val = strtoul(str, &endptr, 10);
> devlink/devlink.c: val = strtoul(str, &endptr, 10);
> devlink/devlink.c: val = strtoul(str, &endptr, 10);
> lib/utils.c: res = strtoul(arg, &ptr, base);
> lib/utils.c: n = strtoul(cp, &endp, 16);
> lib/utils.c: tmp = strtoul(tmpstr, &endptr, 16);
> lib/utils.c: tmp = strtoul(arg + i * 3, &endptr, 16);
> misc/lnstat_util.c: unsigned long f = strtoul(ptr, &ptr, 16);
> tc/f_u32.c: htid = strtoul(str, &tmp, 16);
> tc/f_u32.c: hash = strtoul(str, &tmp, 16);
> tc/f_u32.c: nodeid = strtoul(str, &tmp, 16);
> tc/tc_util.c: maj = strtoul(str, &p, 16);
> tc/tc_util.c: maj = strtoul(str, &p, 16);
> tc/tc_util.c: min = strtoul(str, &p, 16);
After a very quick look, many of these seem to make sense though. For
example lnstat_util.c parses output from /proc, hexstring_a2n() is used
by ipmacsec.c to parse crypto keys, etc.
But I agree that we should probably audit the strtol() (and variants)
that don't use base 0.
> ---
> lib/rt_names.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/rt_names.c b/lib/rt_names.c
> index b976471d7979..7eb63dad7d4d 100644
> --- a/lib/rt_names.c
> +++ b/lib/rt_names.c
> @@ -531,7 +531,7 @@ int rtnl_dsfield_a2n(__u32 *id, const char *arg)
> }
> }
>
> - res = strtoul(arg, &end, 16);
> + res = strtoul(arg, &end, 0);
> if (!end || end == arg || *end || res > 255)
> return -1;
> *id = res;
> --
> 2.34.1
>
next prev parent reply other threads:[~2022-02-16 22:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-16 19:42 [RFC iproute2] tos: interpret ToS in natural numeral system Jakub Kicinski
2022-02-16 22:23 ` Guillaume Nault [this message]
2022-02-16 22:44 ` David Laight
2022-02-17 11:18 ` Guillaume Nault
2022-02-17 1:52 ` David Ahern
2022-02-17 2:40 ` Jakub Kicinski
2022-02-17 19:12 ` Stephen Hemminger
2022-02-17 19:14 ` Stephen Hemminger
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=20220216222352.GA3432@pc-4.home \
--to=gnault@redhat.com \
--cc=dsahern@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
/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.