include/linux/glob.h | 2 + lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- lib/kunit/executor.c | 13 +++++ lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 252 insertions(+), 10 deletions(-)
Bug fixes, extensions, and test coverage for lib/glob.c:
Patches 1-3 fix corner cases in the existing glob_match():
- Inverted character class ranges like [z-a] are now normalized
instead of silently failing to match.
- A trailing backslash is treated as a literal '\' rather than
reading past the end of the pattern string.
- [^...] is accepted as an alias for [!...] to match the
regex-style negation syntax documented in glob(7).
Patches 4-5 add two new utility functions:
- glob_match_nocase() for case-insensitive matching, useful for
subsystems like ATA that need case-folded denylist comparisons.
- glob_validate() for checking pattern syntax before use, so
callers can reject malformed patterns early with a clear error.
Patches 6-7 add kunit test coverage:
- 47 new test cases for glob_match covering escapes, inverted
ranges, caret negation, edge cases, and unclosed brackets.
- 11 test cases for glob_match_nocase.
- 17 test cases for glob_validate.
Patch 8 adds a real in-tree caller for glob_validate() in the kunit
executor, validating user-provided filter_glob patterns and returning
-EINVAL for malformed ones.
Changes since v3:
- Resend: v3 accidentally included stale v2 patch files in the
same email thread. No code changes from v3.
Changes since v2:
- Fixed missing '^' in __glob_match metacharacter comment (patch 4).
- Dropped unnecessary braces in glob_validate case '[' (patch 5).
- Added real-world example to glob_validate() commit message (patch 5).
Changes since v1:
- Added patch 8 (kunit executor caller for glob_validate).
- Updated glob_match_nocase() commit message to reference the ATA
denylist as the intended caller (follow-up patch).
Josh Law (8):
lib/glob: normalize inverted character class ranges
lib/glob: treat trailing backslash as literal character
lib/glob: accept [^...] as character class negation syntax
lib/glob: add case-insensitive glob_match_nocase()
lib/glob: add glob_validate() for pattern syntax checking
lib/tests: add glob test cases for escapes, edge cases, and new
features
lib/tests: add kunit tests for glob_match_nocase() and glob_validate()
kunit: validate glob filter patterns before use
include/linux/glob.h | 2 +
lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++----
lib/kunit/executor.c | 13 +++++
lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 252 insertions(+), 10 deletions(-)
--
2.34.1
Hi Josh, Le 16/03/2026 à 5:17 AM, Josh Law a écrit : > Bug fixes, extensions, and test coverage for lib/glob.c: > > Patches 1-3 fix corner cases in the existing glob_match(): > - Inverted character class ranges like [z-a] are now normalized > instead of silently failing to match. > - A trailing backslash is treated as a literal '\' rather than > reading past the end of the pattern string. > - [^...] is accepted as an alias for [!...] to match the > regex-style negation syntax documented in glob(7). > > Patches 4-5 add two new utility functions: > - glob_match_nocase() for case-insensitive matching, useful for > subsystems like ATA that need case-folded denylist comparisons. > - glob_validate() for checking pattern syntax before use, so > callers can reject malformed patterns early with a clear error. > > Patches 6-7 add kunit test coverage: > - 47 new test cases for glob_match covering escapes, inverted > ranges, caret negation, edge cases, and unclosed brackets. > - 11 test cases for glob_match_nocase. > - 17 test cases for glob_validate. > > Patch 8 adds a real in-tree caller for glob_validate() in the kunit > executor, validating user-provided filter_glob patterns and returning > -EINVAL for malformed ones. > > Changes since v3: > - Resend: v3 accidentally included stale v2 patch files in the > same email thread. No code changes from v3. > > Changes since v2: > - Fixed missing '^' in __glob_match metacharacter comment (patch 4). > - Dropped unnecessary braces in glob_validate case '[' (patch 5). > - Added real-world example to glob_validate() commit message (patch 5). > > Changes since v1: > - Added patch 8 (kunit executor caller for glob_validate). > - Updated glob_match_nocase() commit message to reference the ATA > denylist as the intended caller (follow-up patch). > > Josh Law (8): > lib/glob: normalize inverted character class ranges > lib/glob: treat trailing backslash as literal character > lib/glob: accept [^...] as character class negation syntax > lib/glob: add case-insensitive glob_match_nocase() > lib/glob: add glob_validate() for pattern syntax checking > lib/tests: add glob test cases for escapes, edge cases, and new > features > lib/tests: add kunit tests for glob_match_nocase() and glob_validate() > kunit: validate glob filter patterns before use > > include/linux/glob.h | 2 + > lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- > lib/kunit/executor.c | 13 +++++ > lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 252 insertions(+), 10 deletions(-) > Thanks: always good to have better test coverage (and those are some nasty corner cases!) Series is: Acked-by: David Gow <david@davidgow.net> Tested-by: David Gow <david@davidgow.net> I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. Cheers, -- David
On 17 March 2026 07:19:47 GMT, David Gow <david@davidgow.net> wrote: >Hi Josh, > >Le 16/03/2026 à 5:17 AM, Josh Law a écrit : >> Bug fixes, extensions, and test coverage for lib/glob.c: >> >> Patches 1-3 fix corner cases in the existing glob_match(): >> - Inverted character class ranges like [z-a] are now normalized >> instead of silently failing to match. >> - A trailing backslash is treated as a literal '\' rather than >> reading past the end of the pattern string. >> - [^...] is accepted as an alias for [!...] to match the >> regex-style negation syntax documented in glob(7). >> >> Patches 4-5 add two new utility functions: >> - glob_match_nocase() for case-insensitive matching, useful for >> subsystems like ATA that need case-folded denylist comparisons. >> - glob_validate() for checking pattern syntax before use, so >> callers can reject malformed patterns early with a clear error. >> >> Patches 6-7 add kunit test coverage: >> - 47 new test cases for glob_match covering escapes, inverted >> ranges, caret negation, edge cases, and unclosed brackets. >> - 11 test cases for glob_match_nocase. >> - 17 test cases for glob_validate. >> >> Patch 8 adds a real in-tree caller for glob_validate() in the kunit >> executor, validating user-provided filter_glob patterns and returning >> -EINVAL for malformed ones. >> >> Changes since v3: >> - Resend: v3 accidentally included stale v2 patch files in the >> same email thread. No code changes from v3. >> >> Changes since v2: >> - Fixed missing '^' in __glob_match metacharacter comment (patch 4). >> - Dropped unnecessary braces in glob_validate case '[' (patch 5). >> - Added real-world example to glob_validate() commit message (patch 5). >> >> Changes since v1: >> - Added patch 8 (kunit executor caller for glob_validate). >> - Updated glob_match_nocase() commit message to reference the ATA >> denylist as the intended caller (follow-up patch). >> >> Josh Law (8): >> lib/glob: normalize inverted character class ranges >> lib/glob: treat trailing backslash as literal character >> lib/glob: accept [^...] as character class negation syntax >> lib/glob: add case-insensitive glob_match_nocase() >> lib/glob: add glob_validate() for pattern syntax checking >> lib/tests: add glob test cases for escapes, edge cases, and new >> features >> lib/tests: add kunit tests for glob_match_nocase() and glob_validate() >> kunit: validate glob filter patterns before use >> >> include/linux/glob.h | 2 + >> lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- >> lib/kunit/executor.c | 13 +++++ >> lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ >> 4 files changed, 252 insertions(+), 10 deletions(-) >> > >Thanks: always good to have better test coverage (and those are some nasty corner cases!) > >Series is: > >Acked-by: David Gow <david@davidgow.net> >Tested-by: David Gow <david@davidgow.net> > >I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. > >Cheers, >-- David > Also, David? You mean the *ENTIRE* series as in the code too (the new functions) Or just your kunit changes V/R Josh Law
Le 18/03/2026 à 12:32 AM, Josh Law a écrit : > > > On 17 March 2026 07:19:47 GMT, David Gow <david@davidgow.net> wrote: >> Hi Josh, >> >> Le 16/03/2026 à 5:17 AM, Josh Law a écrit : >>> Bug fixes, extensions, and test coverage for lib/glob.c: >>> >>> Patches 1-3 fix corner cases in the existing glob_match(): >>> - Inverted character class ranges like [z-a] are now normalized >>> instead of silently failing to match. >>> - A trailing backslash is treated as a literal '\' rather than >>> reading past the end of the pattern string. >>> - [^...] is accepted as an alias for [!...] to match the >>> regex-style negation syntax documented in glob(7). >>> >>> Patches 4-5 add two new utility functions: >>> - glob_match_nocase() for case-insensitive matching, useful for >>> subsystems like ATA that need case-folded denylist comparisons. >>> - glob_validate() for checking pattern syntax before use, so >>> callers can reject malformed patterns early with a clear error. >>> >>> Patches 6-7 add kunit test coverage: >>> - 47 new test cases for glob_match covering escapes, inverted >>> ranges, caret negation, edge cases, and unclosed brackets. >>> - 11 test cases for glob_match_nocase. >>> - 17 test cases for glob_validate. >>> >>> Patch 8 adds a real in-tree caller for glob_validate() in the kunit >>> executor, validating user-provided filter_glob patterns and returning >>> -EINVAL for malformed ones. >>> >>> Changes since v3: >>> - Resend: v3 accidentally included stale v2 patch files in the >>> same email thread. No code changes from v3. >>> >>> Changes since v2: >>> - Fixed missing '^' in __glob_match metacharacter comment (patch 4). >>> - Dropped unnecessary braces in glob_validate case '[' (patch 5). >>> - Added real-world example to glob_validate() commit message (patch 5). >>> >>> Changes since v1: >>> - Added patch 8 (kunit executor caller for glob_validate). >>> - Updated glob_match_nocase() commit message to reference the ATA >>> denylist as the intended caller (follow-up patch). >>> >>> Josh Law (8): >>> lib/glob: normalize inverted character class ranges >>> lib/glob: treat trailing backslash as literal character >>> lib/glob: accept [^...] as character class negation syntax >>> lib/glob: add case-insensitive glob_match_nocase() >>> lib/glob: add glob_validate() for pattern syntax checking >>> lib/tests: add glob test cases for escapes, edge cases, and new >>> features >>> lib/tests: add kunit tests for glob_match_nocase() and glob_validate() >>> kunit: validate glob filter patterns before use >>> >>> include/linux/glob.h | 2 + >>> lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- >>> lib/kunit/executor.c | 13 +++++ >>> lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ >>> 4 files changed, 252 insertions(+), 10 deletions(-) >>> >> >> Thanks: always good to have better test coverage (and those are some nasty corner cases!) >> >> Series is: >> >> Acked-by: David Gow <david@davidgow.net> >> Tested-by: David Gow <david@davidgow.net> >> >> I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. >> >> Cheers, >> -- David >> > > > Also, David? You mean the *ENTIRE* series as in the code too (the new functions) Or just your kunit changes > I only really need to Ack the KUnit changes, but I did test the entire series, so feel free to apply it to all of them. Cheers, -- David
On 18 March 2026 07:19:53 GMT, David Gow <david@davidgow.net> wrote: >Le 18/03/2026 à 12:32 AM, Josh Law a écrit : >> >> >> On 17 March 2026 07:19:47 GMT, David Gow <david@davidgow.net> wrote: >>> Hi Josh, >>> >>> Le 16/03/2026 à 5:17 AM, Josh Law a écrit : >>>> Bug fixes, extensions, and test coverage for lib/glob.c: >>>> >>>> Patches 1-3 fix corner cases in the existing glob_match(): >>>> - Inverted character class ranges like [z-a] are now normalized >>>> instead of silently failing to match. >>>> - A trailing backslash is treated as a literal '\' rather than >>>> reading past the end of the pattern string. >>>> - [^...] is accepted as an alias for [!...] to match the >>>> regex-style negation syntax documented in glob(7). >>>> >>>> Patches 4-5 add two new utility functions: >>>> - glob_match_nocase() for case-insensitive matching, useful for >>>> subsystems like ATA that need case-folded denylist comparisons. >>>> - glob_validate() for checking pattern syntax before use, so >>>> callers can reject malformed patterns early with a clear error. >>>> >>>> Patches 6-7 add kunit test coverage: >>>> - 47 new test cases for glob_match covering escapes, inverted >>>> ranges, caret negation, edge cases, and unclosed brackets. >>>> - 11 test cases for glob_match_nocase. >>>> - 17 test cases for glob_validate. >>>> >>>> Patch 8 adds a real in-tree caller for glob_validate() in the kunit >>>> executor, validating user-provided filter_glob patterns and returning >>>> -EINVAL for malformed ones. >>>> >>>> Changes since v3: >>>> - Resend: v3 accidentally included stale v2 patch files in the >>>> same email thread. No code changes from v3. >>>> >>>> Changes since v2: >>>> - Fixed missing '^' in __glob_match metacharacter comment (patch 4). >>>> - Dropped unnecessary braces in glob_validate case '[' (patch 5). >>>> - Added real-world example to glob_validate() commit message (patch 5). >>>> >>>> Changes since v1: >>>> - Added patch 8 (kunit executor caller for glob_validate). >>>> - Updated glob_match_nocase() commit message to reference the ATA >>>> denylist as the intended caller (follow-up patch). >>>> >>>> Josh Law (8): >>>> lib/glob: normalize inverted character class ranges >>>> lib/glob: treat trailing backslash as literal character >>>> lib/glob: accept [^...] as character class negation syntax >>>> lib/glob: add case-insensitive glob_match_nocase() >>>> lib/glob: add glob_validate() for pattern syntax checking >>>> lib/tests: add glob test cases for escapes, edge cases, and new >>>> features >>>> lib/tests: add kunit tests for glob_match_nocase() and glob_validate() >>>> kunit: validate glob filter patterns before use >>>> >>>> include/linux/glob.h | 2 + >>>> lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- >>>> lib/kunit/executor.c | 13 +++++ >>>> lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ >>>> 4 files changed, 252 insertions(+), 10 deletions(-) >>>> >>> >>> Thanks: always good to have better test coverage (and those are some nasty corner cases!) >>> >>> Series is: >>> >>> Acked-by: David Gow <david@davidgow.net> >>> Tested-by: David Gow <david@davidgow.net> >>> >>> I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. >>> >>> Cheers, >>> -- David >>> >> >> >> Also, David? You mean the *ENTIRE* series as in the code too (the new functions) Or just your kunit changes >> > >I only really need to Ack the KUnit changes, but I did test the entire series, so feel free to apply it to all of them. > >Cheers, >-- David > Thanks! Andrew. This is ready to be merged V/R Josh Law
On 18 March 2026 07:19:53 GMT, David Gow <david@davidgow.net> wrote: >Le 18/03/2026 à 12:32 AM, Josh Law a écrit : >> >> >> On 17 March 2026 07:19:47 GMT, David Gow <david@davidgow.net> wrote: >>> Hi Josh, >>> >>> Le 16/03/2026 à 5:17 AM, Josh Law a écrit : >>>> Bug fixes, extensions, and test coverage for lib/glob.c: >>>> >>>> Patches 1-3 fix corner cases in the existing glob_match(): >>>> - Inverted character class ranges like [z-a] are now normalized >>>> instead of silently failing to match. >>>> - A trailing backslash is treated as a literal '\' rather than >>>> reading past the end of the pattern string. >>>> - [^...] is accepted as an alias for [!...] to match the >>>> regex-style negation syntax documented in glob(7). >>>> >>>> Patches 4-5 add two new utility functions: >>>> - glob_match_nocase() for case-insensitive matching, useful for >>>> subsystems like ATA that need case-folded denylist comparisons. >>>> - glob_validate() for checking pattern syntax before use, so >>>> callers can reject malformed patterns early with a clear error. >>>> >>>> Patches 6-7 add kunit test coverage: >>>> - 47 new test cases for glob_match covering escapes, inverted >>>> ranges, caret negation, edge cases, and unclosed brackets. >>>> - 11 test cases for glob_match_nocase. >>>> - 17 test cases for glob_validate. >>>> >>>> Patch 8 adds a real in-tree caller for glob_validate() in the kunit >>>> executor, validating user-provided filter_glob patterns and returning >>>> -EINVAL for malformed ones. >>>> >>>> Changes since v3: >>>> - Resend: v3 accidentally included stale v2 patch files in the >>>> same email thread. No code changes from v3. >>>> >>>> Changes since v2: >>>> - Fixed missing '^' in __glob_match metacharacter comment (patch 4). >>>> - Dropped unnecessary braces in glob_validate case '[' (patch 5). >>>> - Added real-world example to glob_validate() commit message (patch 5). >>>> >>>> Changes since v1: >>>> - Added patch 8 (kunit executor caller for glob_validate). >>>> - Updated glob_match_nocase() commit message to reference the ATA >>>> denylist as the intended caller (follow-up patch). >>>> >>>> Josh Law (8): >>>> lib/glob: normalize inverted character class ranges >>>> lib/glob: treat trailing backslash as literal character >>>> lib/glob: accept [^...] as character class negation syntax >>>> lib/glob: add case-insensitive glob_match_nocase() >>>> lib/glob: add glob_validate() for pattern syntax checking >>>> lib/tests: add glob test cases for escapes, edge cases, and new >>>> features >>>> lib/tests: add kunit tests for glob_match_nocase() and glob_validate() >>>> kunit: validate glob filter patterns before use >>>> >>>> include/linux/glob.h | 2 + >>>> lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- >>>> lib/kunit/executor.c | 13 +++++ >>>> lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ >>>> 4 files changed, 252 insertions(+), 10 deletions(-) >>>> >>> >>> Thanks: always good to have better test coverage (and those are some nasty corner cases!) >>> >>> Series is: >>> >>> Acked-by: David Gow <david@davidgow.net> >>> Tested-by: David Gow <david@davidgow.net> >>> >>> I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. >>> >>> Cheers, >>> -- David >>> >> >> >> Also, David? You mean the *ENTIRE* series as in the code too (the new functions) Or just your kunit changes >> > >I only really need to Ack the KUnit changes, but I did test the entire series, so feel free to apply it to all of them. > >Cheers, >-- David > Hello David, So the new functions are perfectly fine? I mean code review wise I think they are, and I have tested them with a stash driver.. So I guess also Tested-by: Josh Law <objecting@objecting.org>
On 17 March 2026 07:19:47 GMT, David Gow <david@davidgow.net> wrote: >Hi Josh, > >Le 16/03/2026 à 5:17 AM, Josh Law a écrit : >> Bug fixes, extensions, and test coverage for lib/glob.c: >> >> Patches 1-3 fix corner cases in the existing glob_match(): >> - Inverted character class ranges like [z-a] are now normalized >> instead of silently failing to match. >> - A trailing backslash is treated as a literal '\' rather than >> reading past the end of the pattern string. >> - [^...] is accepted as an alias for [!...] to match the >> regex-style negation syntax documented in glob(7). >> >> Patches 4-5 add two new utility functions: >> - glob_match_nocase() for case-insensitive matching, useful for >> subsystems like ATA that need case-folded denylist comparisons. >> - glob_validate() for checking pattern syntax before use, so >> callers can reject malformed patterns early with a clear error. >> >> Patches 6-7 add kunit test coverage: >> - 47 new test cases for glob_match covering escapes, inverted >> ranges, caret negation, edge cases, and unclosed brackets. >> - 11 test cases for glob_match_nocase. >> - 17 test cases for glob_validate. >> >> Patch 8 adds a real in-tree caller for glob_validate() in the kunit >> executor, validating user-provided filter_glob patterns and returning >> -EINVAL for malformed ones. >> >> Changes since v3: >> - Resend: v3 accidentally included stale v2 patch files in the >> same email thread. No code changes from v3. >> >> Changes since v2: >> - Fixed missing '^' in __glob_match metacharacter comment (patch 4). >> - Dropped unnecessary braces in glob_validate case '[' (patch 5). >> - Added real-world example to glob_validate() commit message (patch 5). >> >> Changes since v1: >> - Added patch 8 (kunit executor caller for glob_validate). >> - Updated glob_match_nocase() commit message to reference the ATA >> denylist as the intended caller (follow-up patch). >> >> Josh Law (8): >> lib/glob: normalize inverted character class ranges >> lib/glob: treat trailing backslash as literal character >> lib/glob: accept [^...] as character class negation syntax >> lib/glob: add case-insensitive glob_match_nocase() >> lib/glob: add glob_validate() for pattern syntax checking >> lib/tests: add glob test cases for escapes, edge cases, and new >> features >> lib/tests: add kunit tests for glob_match_nocase() and glob_validate() >> kunit: validate glob filter patterns before use >> >> include/linux/glob.h | 2 + >> lib/glob.c | 123 ++++++++++++++++++++++++++++++++++++---- >> lib/kunit/executor.c | 13 +++++ >> lib/tests/glob_kunit.c | 124 +++++++++++++++++++++++++++++++++++++++++ >> 4 files changed, 252 insertions(+), 10 deletions(-) >> > >Thanks: always good to have better test coverage (and those are some nasty corner cases!) > >Series is: > >Acked-by: David Gow <david@davidgow.net> >Tested-by: David Gow <david@davidgow.net> > >I'm making the assumption that this is going in via mm-nonmm, not the kselftest/kunit tree, as it has dependencies in that branch. > >Cheers, >-- David > Cheers David! Have a great day! V/R Josh Law
© 2016 - 2026 Red Hat, Inc.