From: "Kars Mulder" <kerneldev@karsmulder.nl>
To: "Andy Shevchenko" <andy.shevchenko@gmail.com>
Cc: "David Laight" <David.Laight@aculab.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Pavel Machek" <pavel@ucw.cz>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Kai-Heng Feng" <kai.heng.feng@canonical.com>
Subject: Re: Writing to a const pointer: is this supposed to happen?
Date: Sat, 04 Jul 2020 22:32:50 +0200 [thread overview]
Message-ID: <613b-5f00e780-a9-10028e00@255553491> (raw)
In-Reply-To: <CAHp75Ve4O+OmVttjhtKepFWwZLU6tFMx5vNpPVJdB58mcLFm3w@mail.gmail.com>
On Saturday, July 04, 2020 16:39 CEST, Andy Shevchenko wrote:
> > I've searched for a function that parses an int from a string and
> > stores a pointer to the end; I can find some function simple_strtoul
> > that matches this criterion, but it's documented as
> >
> > "This function has caveats. Please use kstrtoul instead."
> >
> > ... and kstrtoul does not store a pointer to the end. The documentation
> > of kstrtoul describes simple_strtoul as obsolete as well.
>
>
> Where? We need to fix that, because using simple_strto*() is fairly legal
> in cases like this, but "has caveats".
In lib/vsprintf.c, the comments before the function's implementation say:
/**
* simple_strtoul - convert a string to an unsigned long
* @cp: The start of the string
* @endp: A pointer to the end of the parsed string will be placed here
* @base: The number base to use
*
* This function has caveats. Please use kstrtoul instead.
*/
Many variants upon kstrtoul, such as kstrtoull, defined in lib/kstrtox.c,
describe the simple_strtoull function as obsolete:
/**
* kstrtoull - convert a string to an unsigned long long
* [...]
*
* Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
* Used as a replacement for the obsolete simple_strtoull. Return code must
* be checked.
*/
I seem to have been slightly inaccurate about my claim that "kstrtoul"
describes simple_strtoul as "obsolete" though, because in the specific
case of kstrtoul, include/linux/kernel.h only says:
/**
* kstrtoul - convert a string to an unsigned long
* [...]
*
* Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error.
* Used as a replacement for the simple_strtoull. Return code must be checked.
*/
(Also, there may be a documentation error here: all kstrto* functions in
kstrtox.c and kernel.h describe themselves as replacements of simple_strtoull.
E.g. kstrtol and kstrtoul also describe themselves as replacements of
simple_strtoull rather than as a replacements of simple_strtol and
simple_strtoul respectively.)
By the way, I found the documentation of the caveat somewhere in
include/linux/kernel.h:
/*
* Use kstrto<foo> instead.
*
* NOTE: simple_strto<foo> does not check for the range overflow and,
* depending on the input, may give interesting results.
*
* Use these functions if and only if you cannot use kstrto<foo>, because
* the conversion ends on the first non-digit character, which may be far
* beyond the supported range. It might be useful to parse the strings like
* 10x50 or 12:21 without altering original string or temporary buffer in use.
* Keep in mind above caveat.
*/
next parent reply other threads:[~2020-07-04 20:32 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAHp75Ve4O+OmVttjhtKepFWwZLU6tFMx5vNpPVJdB58mcLFm3w@mail.gmail.com>
2020-07-04 20:32 ` Kars Mulder [this message]
2020-07-04 20:54 ` Andy Shevchenko
2020-07-05 18:27 ` Kars Mulder
[not found] <CAHp75Ve3m=UK9r2o8bDotQWQBLz-fV8CO_VcTmWjdLW1p5wE-w@mail.gmail.com>
2020-07-05 20:48 ` Kars Mulder
[not found] <CAHp75Vf9ygQ++DL4ETMy54d=x6oS1qqHLhfyh58f7JCVvM17yA@mail.gmail.com>
2020-07-05 19:38 ` Kars Mulder
2020-06-22 11:35 Kars Mulder
2020-06-23 19:55 ` Pavel Machek
2020-06-24 12:34 ` Kars Mulder
2020-06-24 13:10 ` Greg Kroah-Hartman
2020-06-24 15:25 ` Kars Mulder
2020-06-27 10:24 ` David Laight
2020-07-01 23:03 ` Kars Mulder
2020-07-02 7:55 ` David Laight
2020-07-02 21:48 ` Kars Mulder
2020-07-03 8:13 ` David Laight
2020-07-03 13:23 ` Kars Mulder
2020-07-04 11:55 ` Pavel Machek
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=613b-5f00e780-a9-10028e00@255553491 \
--to=kerneldev@karsmulder.nl \
--cc=David.Laight@aculab.com \
--cc=andy.shevchenko@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=kai.heng.feng@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@ucw.cz \
/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®