]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Linux: Fix '__close_nocancel_nostatus' clobbering 'errno' [BZ #33035]
authorMaciej W. Rozycki <macro@redhat.com>
Tue, 24 Jun 2025 20:17:25 +0000 (21:17 +0100)
committerMaciej W. Rozycki <macro@redhat.com>
Tue, 24 Jun 2025 20:17:25 +0000 (21:17 +0100)
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 <fweimer@redhat.com>
sysdeps/unix/sysv/linux/not-cancel.h

index ece329711bc4ea849ce8816a617dd7cbd2e8eab1..73761ab04b341ce4aafe21908344bf9da756afb5 100644 (file)
@@ -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