Re: [PATCH 0/6] posix: Do not recurse once per pattern component in glob (BZ #34453)

Collin Funk <[email protected]> Wed, 05 Aug 2026 17:57:47 -0700
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
Adhemerval Zanella <[email protected]> writes:

> glob calls itself recursively once per directory component and once per
> brace expression, so stack usage grows with the length of the pattern
> and a few thousand components overflow a default 8 MiB stack before
> glob can answer (BZ #34453).
>
> The last patch replaces the recursion with heap-allocated state, the
> same approach used for the recent ftw fix (commit 418581126ac, "io:
> ftw: Use state stack instead of recursion (BZ 33882)").  The directory
> components are collected into an array and matched iteratively from
> left to right, and the brace expansions are walked with an explicit
> stack.
>
> The patches before it remove the alloca usage from glob.  Besides
> simplifying the recursion removal, this makes glibc and gnulib run the
> same code: gnulib builds this file with __libc_use_alloca defined to
> false, so the alloca paths were compiled out there and only glibc ever
> executed them.  The alloca accounting is also a tricky and misleading
> API, it only counts the buffers explicitly allocated through
> alloca_account, not the rest of each frame, and every recursive call
> started again with a fresh budget, so it never bounded the actual
> stack usage.
>
> Checked on x86_64-linux-gnu, aarch64-linux-gnu, and i686-linux-gnu.
> The file was also built and tested as gnulib's glob replacement.
>
> Adhemerval Zanella (6):
>   posix: Use malloc instead of alloca for the glob directory name
>   posix: Move the glob home directory lookups out of __glob
>   posix: Use malloc instead of alloca for the glob user name
>   posix: Use malloc instead of alloca for the glob brace expansion
>   posix: Remove the alloca uses from glob_in_dir
>   posix: Do not recurse once per pattern component in glob [BZ #34453]
>
>  posix/Makefile           |    1 +
>  posix/glob.c             | 1043 ++++++++++++++++++++++++++------------
>  posix/tst-glob-bz34453.c |  116 +++++
>  posix/tst-glob-tilde.c   |   19 +
>  4 files changed, 847 insertions(+), 332 deletions(-)
>  create mode 100644 posix/tst-glob-bz34453.c

The general idea of the change seems good to me, although I haven't
reviewed the patches yet.

Just want to mention that my feeling is that this isn't a security issue
as the bug report says. I don't think any sensitive services are
allowing users to pass arbitrary number of wildcards to glob.

Collin