Re: [PATCH v2 0/3] tools/nolibc: fix readdir_r() and the FD_* macros on 64-bit

From: Thomas Weißschuh

Date: Sat Sep 26 2026 - 03:35:44 EST


On 2026-09-25 16:15:57-0500, Danish Khateeb wrote:
> Two bugs that only show up on 64-bit architectures:
>
> - readdir_r() truncates the directory offset to an int. On ext4 it
> fails within the first few entries of almost every directory (since
> v6.19), or returns the next-to-last entry twice and never the last
> one (v6.15 to v6.18). Patch 1.
>
> - FD_SET(), FD_CLR() and FD_ISSET() build their masks from an int, so
> they use the wrong bits for fds 31-63 of each 64-bit word, and
> select() on fd 40 fails with EBADF. Patch 2, with a test in patch 3.
>
> There is no selftest for patch 1: it needs a directory with large
> offsets, and nolibc-test only lists /proc/self, whose offsets are
> small. I tested it with a small program that lists a directory with
> readdir_r() instead.
>
> Changes in v2:
> - Dropped Cc: stable from patches 1 and 2, which are otherwise
> unchanged.
> - Patch 3: dropped the select() test, and moved the FD_* test to the
> stdlib tests, with its helper in the same order as the test cases
> (Thomas). It is also shorter: FD_CLR() is now checked on a set
> filled with memset().
> - Rebased on nolibc/for-next 6f114ae7b600.

Applied, thanks!

(...)