mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	Al Viro <viro@ZenIV.linux.org.uk>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/8] lib: string: Introduce strreplace
Date: Tue, 09 Jun 2015 09:17:41 +0200	[thread overview]
Message-ID: <87pp55jqp6.fsf@rasmusvillemoes.dk> (raw)
In-Reply-To: <1433808048.2730.46.camel@perches.com> (Joe Perches's message of "Mon, 08 Jun 2015 17:00:48 -0700")

On Tue, Jun 09 2015, Joe Perches <joe@perches.com> wrote:

> On Tue, 2015-06-09 at 01:26 +0200, Rasmus Villemoes wrote:
>> Strings are sometimes sanitized by replacing a certain character
>> (often '/') by another (often '!').
> []
>> v2: spello fixed, parameters renamed 'old' and 'new' (just so the
>> kernel doc aligns nicely, and because that's what python -c
>> 'help(str.replace)' uses). Still EXPORT_SYMBOL, not inline (tried it,
>> caused more bloat), still called strreplace.
>
> OK, thanks.  I think the chars should be ints though
> just for consistency for strchr variants.

I disagree. That way lies subtle (semi)bugs. Quick quiz: What does
memscan return below?

  char a[1] = {X}; /* for some suitable X */
  char *p = memscan(a, a[0], 1);

Here's the kerneldoc+prototype for memscan:

/**
 * memscan(void *addr, int c, size_t size) - Find a character in an area of memory.
 * @addr: The memory area
 * @c: The byte to search for
 * @size: The size of the area.
 *
 * returns the address of the first occurrence of @c, or 1 byte past
 * the area if @c is not found
 */

So obviously p==a, right? Wrong. Or rather, wrong when char is signed
and X lies outside the ascii range. Or maybe right, if you're on an
architecture with its own memscan that DTRT. And 'the right thing' is
obviously to use only the LSB of c, which would have been harder to get
wrong if c was just a u8 to begin with.

(The only in-tree callers which do not pass an explicit non-negative
constant seem to be in drivers/hid/usbhid/usbkbd.c and
net/bluetooth/hidp/core.c, and they both pass something from an unsigned
char array).

We're stuck with int in the libc functions, but we can do better for new
interfaces.

Rasmus

  reply	other threads:[~2015-06-09  7:17 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-08 23:26 [PATCH v2 0/8] " Rasmus Villemoes
2015-06-08 23:26 ` [PATCH v2 1/8] lib: string: " Rasmus Villemoes
2015-06-09  0:00   ` Joe Perches
2015-06-09  7:17     ` Rasmus Villemoes [this message]
2015-06-08 23:26 ` [PATCH v2 2/8] kernel/trace/trace_events_filter.c: Use strreplace Rasmus Villemoes
2015-06-08 23:26 ` [PATCH v2 3/8] blktrace: use strreplace in do_blk_trace_setup Rasmus Villemoes
2015-06-09  3:05   ` Jens Axboe
2015-06-08 23:26 ` [PATCH v2 4/8] lib/kobject.c: Use strreplace Rasmus Villemoes
2015-06-08 23:26 ` [PATCH v2 5/8] drivers/base/core.c: " Rasmus Villemoes
2015-06-08 23:26 ` [PATCH v2 6/8] drivers/md/md.c: " Rasmus Villemoes
2015-06-09 21:17   ` Neil Brown
2015-06-08 23:26 ` [PATCH v2 7/8] fs/jbd2/journal.c: " Rasmus Villemoes
2015-06-08 23:26 ` [PATCH v2 8/8] fs/ext4/super.c: Use strreplace in ext4_fill_super Rasmus Villemoes
2015-06-09  0:55 ` [PATCH v2 0/8] Introduce strreplace Theodore Ts'o
2015-06-09  7:25   ` Rasmus Villemoes
2015-06-09 21:02 ` Andrew Morton

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=87pp55jqp6.fsf@rasmusvillemoes.dk \
    --to=linux@rasmusvillemoes.dk \
    --cc=akpm@linux-foundation.org \
    --cc=daniel@iogearbox.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /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

Powered by JetHome