From: Maciej W. Rozycki Date: Tue, 24 Jun 2025 20:17:25 +0000 (+0100) Subject: Linux: Fix '__close_nocancel_nostatus' clobbering 'errno' [BZ #33035] X-Git-Tag: glibc-2.42~88 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3b0d495ac406f14131d299e933b49bfdd02bf626;p=thirdparty%2Fglibc.git Linux: Fix '__close_nocancel_nostatus' clobbering 'errno' [BZ #33035] 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. Reviewed-by: Florian Weimer --- diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h index ece329711b..73761ab04b 100644 --- a/sysdeps/unix/sysv/linux/not-cancel.h +++ b/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