[PATCH 1/2] Linux: Fix '__close_nocancel_nostatus' clobbering 'errno' [BZ #33035]
Maciej W. Rozycki
macro@orcam.me.uk
Wed Jun 4 18:03:16 GMT 2025
From: Maciej W. Rozycki <macro@redhat.com>
Fix fallout from commit c181840c93d3 ("Consolidate non cancellable close
call") that caused '__close_nocancel_nostatus' to clobber 'errno' on a
close(2) failure, a 2.27 regression.
The problem came from a rewrite from 'close_not_cancel_no_status' to
'__close_nocancel_nostatus' switching from an inline implementation that
used INTERNAL_SYSCALL macro (which stays away from 'errno') to a call to
'__close_nocancel' function that uses INLINE_SYSCALL_CALL macro (which
does poke at 'errno').
Implement '__close_nocancel_nostatus' in terms of INTERNAL_SYSCALL_CALL
then, which leaves 'errno' intact.
---
Changes from v1:
- Switch to an inline implementation.
---
sysdeps/unix/sysv/linux/not-cancel.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
glibc-linux-close-nocancel-nostatus.diff
Index: glibc/sysdeps/unix/sysv/linux/not-cancel.h
===================================================================
--- glibc.orig/sysdeps/unix/sysv/linux/not-cancel.h
+++ glibc/sysdeps/unix/sysv/linux/not-cancel.h
@@ -73,7 +73,7 @@ hidden_proto (__fcntl64_nocancel)
static inline void
__close_nocancel_nostatus (int fd)
{
- __close_nocancel (fd);
+ INTERNAL_SYSCALL_CALL (close, fd);
}
/* Non cancellable writev syscall that does not also set errno in case of
More information about the Libc-alpha
mailing list