From: Joe Perches <joe@perches.com>
To: Rickard Strandqvist <rickard_strandqvist@spectrumdigital.se>
Cc: Matt Mackall <mpm@selenic.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Torsten Duwe <duwe@lst.de>, "Theodore Ts'o" <tytso@mit.edu>,
Jason Cooper <jason@lakedaemon.net>,
Amit Shah <amit.shah@redhat.com>,
Stephen Boyd <sboyd@codeaurora.org>,
Paul Gortmaker <paul.gortmaker@windriver.com>,
Kees Cook <keescook@chromium.org>,
Dan Carpenter <dan.carpenter@oracle.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3v] char: hw_random: core.c: Changed from using strncat to strlcat
Date: Thu, 16 Oct 2014 10:53:47 -0700 [thread overview]
Message-ID: <1413482027.8915.1.camel@perches.com> (raw)
In-Reply-To: <CAFo99gbGrGXz+gYQn0hAPKxN73BLLWhaUPVN0DVq6-3PiFzOSw@mail.gmail.com>
On Thu, 2014-10-16 at 19:41 +0200, Rickard Strandqvist wrote:
> 2014-10-16 19:25 GMT+02:00 Joe Perches <joe@perches.com>:
> > On Thu, 2014-10-16 at 19:15 +0200, Rickard Strandqvist wrote:
> >> The buf is used to hold the list of hwrng devices registered.
> >> The old code ensures we don't walk off the end of buf as we
> >> fill it, but it's unnecessarily complicated and thus difficult
> >> to maintain. Simplify it by using strlcat.
> >> We also ensure the string within buf is NULL terminated
> >> so the final strlen is ok.
> > []
> >> diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
> > []
> >> @@ -289,16 +288,13 @@ static ssize_t hwrng_attr_available_show(struct device *dev,
> >> return -ERESTARTSYS;
> >> buf[0] = '\0';
> >> list_for_each_entry(rng, &rng_list, list) {
> >> - strncat(buf, rng->name, PAGE_SIZE - ret - 1);
> >> - ret += strlen(rng->name);
> >> - strncat(buf, " ", PAGE_SIZE - ret - 1);
> >> - ret++;
> >> + strlcat(buf, rng->name, PAGE_SIZE);
> >> + strlcat(buf, " ", PAGE_SIZE);
> >> }
> >> - strncat(buf, "\n", PAGE_SIZE - ret - 1);
> >> - ret++;
> >> + strlcat(buf, "\n", PAGE_SIZE);
> >> mutex_unlock(&rng_mutex);
> >>
> >> - return ret;
> >> + return strlen(buf);
> >> }
> >>
> >> static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
> >
> > Rickard, can you please use some optimizations here
> > (and elsewhere) so that strlcat doesn't always have
> > to strlen the first string and the return doesn't
> > have to do the strlen too?
> >
> > You could use a temporary for the returned length
> > of the strlcat so that if it's shorter than
> > the buffer, the next strlcat can start at the
> > appropriate known position instead of having
> > to do the initial strlen again and again.
[]
> But the others, I am very hesitant about. Because strlcat like
> snprintf and strlcpy returns the length that would be copied rather
> than what is actually copied. Hence such a code to be even more
> complex than before.
None of the conversions you've done seem to use the
return value so maybe there should be yet another
function that doesn't return an overrun value.
next prev parent reply other threads:[~2014-10-16 17:53 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-16 17:15 [PATCH 3v] char: hw_random: core.c: Changed from using strncat to strlcat Rickard Strandqvist
2014-10-16 17:25 ` Joe Perches
2014-10-16 17:41 ` Rickard Strandqvist
2014-10-16 17:53 ` Joe Perches [this message]
2014-10-16 17:48 ` Jason Cooper
2014-10-16 17:55 ` Joe Perches
2014-10-16 18:05 ` Jason Cooper
2014-10-16 18:11 ` Rickard Strandqvist
2014-10-16 17:53 ` Jason Cooper
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=1413482027.8915.1.camel@perches.com \
--to=joe@perches.com \
--cc=amit.shah@redhat.com \
--cc=dan.carpenter@oracle.com \
--cc=duwe@lst.de \
--cc=herbert@gondor.apana.org.au \
--cc=jason@lakedaemon.net \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpm@selenic.com \
--cc=paul.gortmaker@windriver.com \
--cc=rickard_strandqvist@spectrumdigital.se \
--cc=sboyd@codeaurora.org \
--cc=tytso@mit.edu \
/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.