From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Grant Likely <grant.likely@linaro.org>,
Andi Kleen <ak@linux.intel.com>,
Dan Carpenter <dan.carpenter@oracle.com>,
"H. Peter Anvin" <hpa@linux.intel.com>,
linux-kernel@vger.kernel.org, Joe Perches <joe@perches.com>,
Tejun Heo <tj@kernel.org>
Subject: Re: [PATCH/RFC 1/2] lib: string: Remove duplicated function
Date: Fri, 12 Sep 2014 11:01:17 +0200 [thread overview]
Message-ID: <87d2b1jjqa.fsf@rasmusvillemoes.dk> (raw)
In-Reply-To: <20140911152241.22ce7f1ebecef7ce7e01b112@linux-foundation.org> (Andrew Morton's message of "Thu, 11 Sep 2014 15:22:41 -0700")
On Fri, Sep 12 2014, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Wed, 27 Aug 2014 09:36:01 +0200 Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote:
>
>> lib/string.c contains two functions, strnicmp and strncasecmp, which
>> do roughly the same thing, namely compare two strings
>> case-insensitively up to a given bound. They have slightly different
>> implementations, but the only important difference is that strncasecmp
>> doesn't handle len==0 appropriately; it effectively becomes strcasecmp
>> in that case. strnicmp correctly says that two strings are always
>> equal in their first 0 characters.
>>
>> strncasecmp is the POSIX name for this functionality. So rename the
>> non-broken function to the standard name. To minimize the impact on
>> the rest of the kernel (and since both are exported to modules), make
>> strnicmp a wrapper for strncasecmp.
>
> I guess it's safe to assume that nobody was depending on the
> strncasecmp() bug.
Hm, I thought so as well, but decided to double check. I found one minor
issue; maybe Tejun can tell if my analysis is correct.
In drivers/ata/libata-core.c, ata_parse_force_one(), it is not
immediately clear to me that val cannot end up being the empty
string. With the buggy strncasecmp, the continue branch is always
followed (since fp->name is not empty); however, with strncasecmp with
the correct semantics, the empty string is obviously a prefix of every
fp->name. So even though the comment says that "1.5" is an ok
abbreviation of "1.5Gbps", I don't think the intention was to allow ""
to be an abbreviation of everything. Anyway, the worst that can happen
seems to be that "ambigious value" [sic] becomes the *reason instead
of "unknown value".
I may have overlooked similar issues; my checking was basically "is the
length parameter an explicit non-zero number or strlen() of some static
data in some table (where I assume empty strings do not lurk)".
> Yes, please prepare the strnicmp()->strncasecmp() patches and let's get
> them merged up. After a kernel release or two we can zap the
> back-compat wrapper.
Will do. Is there a fixed SHA1 I can refer to in the commit logs?
> And it isn't just "out of tree modules" that we should be concerned
> about - we'll commonly find that "to be in tree" code is using
> interfaces which we're trying to alter or remove, so it takes a cycle
> or two to get everything propagated. Most of this code can be found in
> linux-next.
Would it make sense to add a checkpatch warning to ensure new users
are not introduced, and then remove it when the wrapper is also removed?
Thanks,
Rasmus
next prev parent reply other threads:[~2014-09-12 9:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-27 7:36 [PATCH/RFC 0/2] lib: string: Remove duplicated function Rasmus Villemoes
2014-08-27 7:36 ` [PATCH/RFC 1/2] " Rasmus Villemoes
2014-09-11 22:22 ` Andrew Morton
2014-09-12 9:01 ` Rasmus Villemoes [this message]
2014-09-12 9:43 ` Joe Perches
2014-09-12 18:52 ` Tejun Heo
2014-08-27 7:36 ` [PATCH/RFC 2/2] lib: string: Make all calls to strnicmp into calls to strncasecmp Rasmus Villemoes
2014-08-27 9:05 ` Dan Carpenter
2014-08-27 9:13 ` Rasmus Villemoes
2014-08-27 10:17 ` Dan Carpenter
2014-08-30 18:11 ` Rasmus Villemoes
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=87d2b1jjqa.fsf@rasmusvillemoes.dk \
--to=linux@rasmusvillemoes.dk \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=dan.carpenter@oracle.com \
--cc=grant.likely@linaro.org \
--cc=hpa@linux.intel.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.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.