Paul Eggert <egg...@cs.ucla.edu> writes:

> On 2025-08-01 15:05, Collin Funk wrote:
>> I was hoping that file could be made a tiny stub, due to the
>> workarounds for Linux 4.19 being mostly unnecessary now that it is EOL.
>> But now we have a new problem to deal with. :)
>
> That we do. But we can more thorougly stubify the old Linux kernel bug
> workaround while we're in the neighborhood. Probably best not to
> remove it entirely as RHEL 8 still uses the no-longer-supported
> kernel.

Good point. I agree.

> +#   if defined __GLIBC__ && ! (2 < __GLIBC__ + (43 <= __GLIBC_MINOR__))
> +      /* Work around glibc bug 33245
> +         <https://sourceware.org/bugzilla/show_bug.cgi?id=33245>.
> +         This bug is present in glibc 2.42 (2025) and fixed in 2.43,
> +         so this workaround, and the configure-time check for glibc,
> +         can be removed once glibc 2.42 and earlier is no longer a
> +         consideration.  Perhaps in 2040.  */
> +      if (SYS_BUFSIZE_MAX < length)
> +        length = SYS_BUFSIZE_MAX;
> +# endif

Can't we make this condition only occur for glibc 2.41 and glibc 2.42?
The issue shouldn't occur before commit
89b53077d2a58f00e7debdfe58afabe953dac60d in glibc (2024-06-25). Before
that commit SYSCALL_CANCEL was defined as the following:

#define SYSCALL_CANCEL(...) \
  ({                                                                         \
    long int sc_ret;                                                         \
    if (NO_SYSCALL_CANCEL_CHECKING)                                          \
      sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__);                            \
    else                                                                     \
      {                                                                      \
        int sc_cancel_oldtype = LIBC_CANCEL_ASYNC ();                        \
        sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__);                          \
        LIBC_CANCEL_RESET (sc_cancel_oldtype);                               \
      }                                                                      \
    sc_ret;                                                                  \
  })

So returning 'long int' like the now fixed version.

Also, I assume this bug will cause problems in any syscall returning
ssize_t (e.g. read, write, send).

Collin



Reply via email to