Bug 3336 - openssh-8.6_p1 fails to build tests with glibc 2.34
Summary: openssh-8.6_p1 fails to build tests with glibc 2.34
Status: CLOSED FIXED
Alias: None
Product: Portable OpenSSH
Classification: Unclassified
Component: Build system (show other bugs)
Version: 8.6p1
Hardware: amd64 Linux
: P5 normal
Assignee: Assigned to nobody
URL:
Keywords:
Depends on:
Blocks: V_8_7
  Show dependency treegraph
 
Reported: 2021-08-10 17:38 AEST by Timo Gurr
Modified: 2022-02-25 13:57 AEDT (History)
1 user (show)

See Also:


Attachments
openssh-8.6_p1-build.log (319.31 KB, text/x-log)
2021-08-10 17:38 AEST, Timo Gurr
no flags Details
use includes.h in compat tests. (2.74 KB, patch)
2021-08-10 21:02 AEST, Darren Tucker
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Timo Gurr 2021-08-10 17:38:35 AEST
Created attachment 3542 [details]
openssh-8.6_p1-build.log

While tests compile fine on a system with glibc 2.33 it fails to do so on systems with glibc 2.34 with:

[...]
make[1]: Leaving directory '/var/tmp/paludis/build/net-misc-openssh-8.6_p1/work/openssh-8.6p1/openbsd-compat/regress'
closefromtest.c:27:5: error: conflicting types for 'closefrom'
   27 | int closefrom(int);
      |     ^~~~~~~~~
In file included from closefromtest.c:23:
/usr/x86_64-pc-linux-gnu/include/unistd.h:363:13: note: previous declaration of 'closefrom' was here
  363 | extern void closefrom (int __lowfd) __THROW;
      |             ^~~~~~~~~
make[1]: *** [Makefile:22: closefromtest] Error 1
make: *** [Makefile:753: compat-tests] Error 2
[...]

Complete build.log attached.

See also: https://bugs.gentoo.org/806761
Comment 1 Darren Tucker 2021-08-10 20:19:14 AEST
Sigh.  From the OpenBSD closefrom(2) man page:
"""
     int
     closefrom(int fd);
[...]
HISTORY
     The closefrom() function first appeared in Solaris 9 and has been
     available since OpenBSD 3.5.
"""
However in glibc 2.34:

$ grep closefrom posix/unistd.h
extern void closefrom (int __lowfd) __THROW;

(Despite its presence under posix/, POSIX does not specify closefrom():
https://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html
"""
The standard developers rejected a proposal to add closefrom() to the standard. Because the standard permits implementations to use inherited file descriptors as a means of providing a conforming environment for the child process, it is not possible to standardize an interface that closes arbitrary file descriptors above a certain value while still guaranteeing a conforming environment.
"""

Of the systems that I have at hand:
 - on OpenBSD 6.9, NetBSD 8 and DragonFlyBSD 6, MINIX3 closefrom returns int.
 - on Solaris 10, FreeBSD 12 closefrom return void.

so it's already a tire fire.

I vaguely recall a reason it doesn't include openbsd-compat.h.  We might be able to get away with just config.h and HAVE_CLOSEFROM.
Comment 2 Darren Tucker 2021-08-10 21:02:36 AEST
Created attachment 3543 [details]
use includes.h in compat tests.

Please try this patch.
Comment 3 Timo Gurr 2021-08-10 21:43:17 AEST
(In reply to Darren Tucker from comment #2)
> Created attachment 3543 [details]
> use includes.h in compat tests.
> 
> Please try this patch.

Thanks! The provided patch works for me on both glibc 2.34 which was failing before and also on 2.33.
Comment 4 Darren Tucker 2021-08-11 09:39:03 AEST
The patch has been applied and will be in the next major release.  Thanks for the report.
Comment 5 Damien Miller 2022-02-25 13:57:17 AEDT
closing bugs resolved before openssh-8.9