Linux GPIO subsystem development
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx@kernel.org>
To: linux-hardening@vger.kernel.org
Cc: Alejandro Colomar <alx@kernel.org>,
	alx+linux-hardening@kernel.org,
	 Andreas Schwab <schwab@linux-m68k.org>,
	Andy Shevchenko <andy@kernel.org>,
	 Bartosz Golaszewski <brgl@kernel.org>,
	Daniel Scally <djrscally@gmail.com>,
	 Danilo Krummrich <dakr@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	 Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	 Joe Perches <joe@perches.com>, Johan Hovold <johan@kernel.org>,
	Kees Cook <kees@kernel.org>,
	 Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Len Brown <lenb@kernel.org>,
	 Linus Torvalds <torvalds@linux-foundation.org>,
	Linus Walleij <linusw@kernel.org>,
	 Namhyung Kim <namhyung@kernel.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	 Rob Herring <robh@kernel.org>,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	 Saravana Kannan <saravanak@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	 Tom Zanussi <zanussi@kernel.org>,
	linux-acpi@vger.kernel.org, driver-core@lists.linux.dev,
	 linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-gpio@vger.kernel.org
Subject: [PATCH v2 0/2] Add strprefix() and fix a bug with it
Date: Thu, 5 Nov 2026 13:46:20 +0100	[thread overview]
Message-ID: <cover.1793882260.git.alx@kernel.org> (raw)
In-Reply-To: <cover.1793876837.git.alx@kernel.org>

[-- Attachment #1: Type: text/plain, Size: 9601 bytes --]

Hi!

str_has_prefix() is based on sizes and lengths, which means it must
overload the valid length 0 to mean not found.  This is a typical
consequence of choosing to design an API around sizes and lengths, and
vanishes when moving to pointer-based similar APIs.

This patch set adds strprefix(), deprecates str_has_prefix(), and uses
strprefix() in one place to fix a bug reported by Bartosz.

We can later work on replacing the other uses of str_has_prefix(), which
might hide similar bugs.

Changes in v2
~~~~~~~~~~~~~

-  Added tests, as suggested by Andy.
-  Remove Cc tags from the commit messages.  [Andy]

Testing
~~~~~~~

The new tests added for strprefix() pass.  Below is the session I ran
for testing.  The important line is:

	[13:26:30] [PASSED] string_test_strprefix

Full session:

	$ cat .kunitconfig 
	CONFIG_KUNIT=y
	CONFIG_STRING_KUNIT_TEST=y
	$ mkdir -p ~/tmp
	$ export TMPDIR=$HOME/tmp
	$ ./tools/testing/kunit/kunit.py run "string*"
	[13:26:28] Configuring KUnit Kernel ...
	[13:26:28] Building KUnit Kernel ...
	Populating config with:
	$ make ARCH=um O=.kunit olddefconfig
	Building with:
	$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=24
	[13:26:30] Starting KUnit Kernel (1/1)...
	[13:26:30] ============================================================
	Running tests with:
	$ .kunit/linux 'kunit.filter_glob=string*' kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
	[13:26:30] ============= string-stream-test (12 subtests) =============
	[13:26:30] [PASSED] string_stream_managed_init_test
	[13:26:30] [PASSED] string_stream_unmanaged_init_test
	[13:26:30] [PASSED] string_stream_managed_free_test
	[13:26:30] [PASSED] string_stream_resource_free_test
	[13:26:30] [PASSED] string_stream_line_add_test
	[13:26:30] [PASSED] string_stream_variable_length_line_test
	[13:26:30] [PASSED] string_stream_append_test
	[13:26:30] [PASSED] string_stream_append_auto_newline_test
	[13:26:30] [PASSED] string_stream_append_empty_string_test
	[13:26:30] [PASSED] string_stream_no_auto_newline_test
	[13:26:30] [PASSED] string_stream_auto_newline_test
	[13:26:30] [PASSED] string_stream_performance_test
	[13:26:30] =============== [PASSED] string-stream-test ================
	[13:26:30] =================== string (29 subtests) ===================
	[13:26:30] [PASSED] string_test_memset16
	[13:26:30] [PASSED] string_test_memset32
	[13:26:30] [PASSED] string_test_memset64
	[13:26:30] [PASSED] string_test_strlen
	[13:26:30] [PASSED] string_test_strnlen
	[13:26:30] [PASSED] string_test_strchr
	[13:26:30] [PASSED] string_test_strnchr
	[13:26:30] [PASSED] string_test_strrchr
	[13:26:30] [PASSED] string_test_strspn
	[13:26:30] [PASSED] string_test_strprefix
	[13:26:30] [PASSED] string_test_strcmp
	[13:26:30] [PASSED] string_test_strcmp_long_strings
	[13:26:30] [PASSED] string_test_strncmp
	[13:26:30] [PASSED] string_test_strncmp_long_strings
	[13:26:30] [PASSED] string_test_strcasecmp
	[13:26:30] [PASSED] string_test_strcasecmp_long_strings
	[13:26:30] [PASSED] string_test_strncasecmp
	[13:26:30] [PASSED] string_test_strncasecmp_long_strings
	[13:26:30] [PASSED] string_test_strscpy
	[13:26:30] [PASSED] string_test_strcat
	[13:26:30] [PASSED] string_test_strncat
	[13:26:30] [PASSED] string_test_strlcat
	[13:26:30] [PASSED] string_test_strtomem
	[13:26:30] [PASSED] string_test_memtostr
	[13:26:30] [PASSED] string_test_strends
	[13:26:30] [SKIPPED] string_bench_strlen (not enabled)
	[13:26:30] [SKIPPED] string_bench_strnlen (not enabled)
	[13:26:30] [SKIPPED] string_bench_strchr (not enabled)
	[13:26:30] [SKIPPED] string_bench_strrchr (not enabled)
	[13:26:30] ===================== [PASSED] string ======================
	[13:26:30] =============== string_helpers (4 subtests) ================
	[13:26:30] [PASSED] test_get_size
	[13:26:30] [PASSED] test_upper_lower
	[13:26:30] [PASSED] test_unescape
	[13:26:30] [PASSED] test_escape
	[13:26:30] ================= [PASSED] string_helpers ==================
	[13:26:30] ============================================================
	[13:26:30] Testing complete. Ran 45 tests: passed: 41, skipped: 4
	[13:26:31] Elapsed time: 2.509s total, 0.001s configuring, 2.192s building, 0.271s running


Cheers,
Alex

Alejandro Colomar (2):
  string: Add strprefix(), and deprecate str_has_prefix()
  device property: Fix fwnode_name_eq() for empty node names

 drivers/base/property.c  |  5 +----
 include/linux/string.h   | 19 ++++++++++++++++++-
 lib/tests/string_kunit.c |  9 +++++++++
 3 files changed, 28 insertions(+), 5 deletions(-)

Range-diff against v1:
1:  9c81f6f62fd0 ! 1:  d3b325ecefd1 string: Add strprefix(), and deprecate str_has_prefix()
    @@ Commit message
         We'll slowly migrate existing code from str_has_prefix() to strprefix().
     
         Reported-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    -    Cc: Andreas Schwab <schwab@linux-m68k.org>
    -    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
         Cc: Andy Shevchenko <andy@kernel.org>
    -    Cc: Bartosz Golaszewski <brgl@kernel.org>
    -    Cc: Daniel Scally <djrscally@gmail.com>
    -    Cc: Danilo Krummrich <dakr@kernel.org>
    -    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    -    Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    -    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    -    Cc: Joe Perches <joe@perches.com>
    -    Cc: Johan Hovold <johan@kernel.org>
    -    Cc: Kees Cook <kees@kernel.org>
    -    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    -    Cc: Len Brown <lenb@kernel.org>
    -    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    -    Cc: Linus Walleij <linusw@kernel.org>
    -    Cc: Namhyung Kim <namhyung@kernel.org>
    -    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    -    Cc: Rob Herring <robh@kernel.org>
    -    Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
    -    Cc: Saravana Kannan <saravanak@kernel.org>
    -    Cc: Steven Rostedt <rostedt@goodmis.org>
    -    Cc: Tom Zanussi <zanussi@kernel.org
    -    Cc: linux-acpi@vger.kernel.org
    -    Cc: driver-core@lists.linux.dev
    -    Cc: linux-kernel@vger.kernel.org
    -    Cc: linux-hardening@vger.kernel.org
    -    Cc: devicetree@vger.kernel.org
    -    Cc: linux-gpio@vger.kernel.org
         Signed-off-by: Alejandro Colomar <alx@kernel.org>
     
      ## include/linux/string.h ##
    @@ include/linux/string.h: void memcpy_and_pad(void *dest, size_t dest_len, const v
       *
       * Returns:
       * * strlen(@prefix) if @str starts with @prefix
    +
    + ## lib/tests/string_kunit.c ##
    +@@ lib/tests/string_kunit.c: static void string_test_strspn(struct kunit *test)
    + 	}
    + }
    + 
    ++static void string_test_strprefix(struct kunit *test)
    ++{
    ++	KUNIT_ASSERT_EQ(test, 0, strcmp(strprefix("foobar", "foo"), "bar"));
    ++	KUNIT_ASSERT_EQ(test, 0, strcmp(strprefix("foobar", ""), "foobar"));
    ++	KUNIT_ASSERT_EQ(test, 0, strcmp(strprefix("foobar", "foobar"), ""));
    ++	KUNIT_ASSERT_NULL(test, strprefix("foobar", "bar"));
    ++}
    ++
    + static char strcmp_buffer1[STRCMP_LARGE_BUF_LEN];
    + static char strcmp_buffer2[STRCMP_LARGE_BUF_LEN];
    + 
    +@@ lib/tests/string_kunit.c: static struct kunit_case string_test_cases[] = {
    + 	KUNIT_CASE(string_test_strnchr),
    + 	KUNIT_CASE(string_test_strrchr),
    + 	KUNIT_CASE(string_test_strspn),
    ++	KUNIT_CASE(string_test_strprefix),
    + 	KUNIT_CASE(string_test_strcmp),
    + 	KUNIT_CASE(string_test_strcmp_long_strings),
    + 	KUNIT_CASE(string_test_strncmp),
2:  37eafcd682b0 ! 2:  ac9728afa027 device property: Fix fwnode_name_eq() for empty node names
    @@ Commit message
     
         Fixes: a9c8c738066b7 ("device property: Add fwnode_name_eq()")
         Reported-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    -    Cc: Andreas Schwab <schwab@linux-m68k.org>
    -    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
         Cc: Andy Shevchenko <andy@kernel.org>
    -    Cc: Bartosz Golaszewski <brgl@kernel.org>
    -    Cc: Daniel Scally <djrscally@gmail.com>
    -    Cc: Danilo Krummrich <dakr@kernel.org>
    -    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    -    Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    -    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    -    Cc: Joe Perches <joe@perches.com>
    -    Cc: Johan Hovold <johan@kernel.org>
    -    Cc: Kees Cook <kees@kernel.org>
    -    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    -    Cc: Len Brown <lenb@kernel.org>
    -    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    -    Cc: Linus Walleij <linusw@kernel.org>
    -    Cc: Namhyung Kim <namhyung@kernel.org>
    -    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    -    Cc: Rob Herring <robh@kernel.org>
    -    Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
    -    Cc: Saravana Kannan <saravanak@kernel.org>
    -    Cc: Steven Rostedt <rostedt@goodmis.org>
    -    Cc: Tom Zanussi <zanussi@kernel.org
    -    Cc: linux-acpi@vger.kernel.org
    -    Cc: driver-core@lists.linux.dev
    -    Cc: linux-kernel@vger.kernel.org
    -    Cc: linux-hardening@vger.kernel.org
    -    Cc: devicetree@vger.kernel.org
    -    Cc: linux-gpio@vger.kernel.org
         Signed-off-by: Alejandro Colomar <alx@kernel.org>
     
      ## drivers/base/property.c ##
-- 
2.55.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2026-11-05 12:46 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-05 11:12 [PATCH v1 0/2] Add strprefix() and fix a bug with it Alejandro Colomar
2026-11-05 11:13 ` [PATCH v1 1/2] string: Add strprefix(), and deprecate str_has_prefix() Alejandro Colomar
2026-11-05 11:27   ` Andy Shevchenko
2026-11-05 12:28     ` Alejandro Colomar
2026-11-05 16:14   ` Steven Rostedt
2026-11-05 16:33     ` Alejandro Colomar
2026-11-05 16:50       ` Steven Rostedt
2026-11-05 11:13 ` [PATCH v1 2/2] device property: Fix fwnode_name_eq() for empty node names Alejandro Colomar
2026-11-05 11:24 ` [PATCH v1 0/2] Add strprefix() and fix a bug with it Andy Shevchenko
2026-11-05 11:38   ` Alejandro Colomar
2026-11-05 11:59     ` Andy Shevchenko
2026-11-05 12:30 ` Bartosz Golaszewski
2026-11-05 12:49   ` Alejandro Colomar
2026-11-05 12:46 ` Alejandro Colomar [this message]
2026-11-05 12:46   ` [PATCH v2 1/2] string: Add strprefix(), and deprecate str_has_prefix() Alejandro Colomar
2026-11-05 12:51     ` Geert Uytterhoeven
2026-11-05 13:12       ` Alejandro Colomar
2026-11-05 12:46   ` [PATCH v2 2/2] device property: Fix fwnode_name_eq() for empty node names Alejandro Colomar
2026-11-05 14:01   ` [PATCH v2 0/2] Add strprefix() and fix a bug with it Bartosz Golaszewski
2026-11-05 14:16     ` Alejandro Colomar
2026-11-05 14:42       ` Andy Shevchenko
2026-11-05 15:06         ` Alejandro Colomar
2026-11-05 15:00       ` Bartosz Golaszewski
2026-11-05 15:14         ` Alejandro Colomar
2026-11-05 15:21       ` Krzysztof Kozlowski
2026-11-05 16:27         ` Steven Rostedt
2026-11-05 16:30           ` Krzysztof Kozlowski
2026-11-05 16:42         ` Alejandro Colomar

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=cover.1793882260.git.alx@kernel.org \
    --to=alx@kernel.org \
    --cc=alx+linux-hardening@kernel.org \
    --cc=andy@kernel.org \
    --cc=brgl@kernel.org \
    --cc=dakr@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=djrscally@gmail.com \
    --cc=driver-core@lists.linux.dev \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=joe@perches.com \
    --cc=johan@kernel.org \
    --cc=kees@kernel.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=lenb@kernel.org \
    --cc=linusw@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    --cc=rafael@kernel.org \
    --cc=robh@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=saravanak@kernel.org \
    --cc=schwab@linux-m68k.org \
    --cc=torvalds@linux-foundation.org \
    --cc=zanussi@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox