]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
Don't auto-enable Capsicum sandbox on FreeBSD 9/10.
authorDarren Tucker <dtucker@dtucker.net>
Fri, 19 Nov 2021 05:01:51 +0000 (16:01 +1100)
committerDarren Tucker <dtucker@dtucker.net>
Fri, 19 Nov 2021 05:11:39 +0000 (16:11 +1100)
Since we changed from select() to ppoll() tests have been failing.
This seems to be because FreeBSD 10 (and presumably 9) do not allow
ppoll() in the privsep process and sshd will fail with "Not permitted in
capability mode".  Setting CAP_EVENT on the FDs doesn't help, but weirdly,
poll() works without that.  Those versions are EOL so this situation is
unlikely to change.

configure.ac

index a159d9f07ab2a54cbe35407d3450f7f843b6bb5a..ddb6c5b113a8a08feea013724326bf37cbf68c7b 100644 (file)
@@ -994,6 +994,11 @@ mips-sony-bsd|mips-sony-newsos4)
        # and will crash if they cannot be opened.
        AC_DEFINE([SANDBOX_SKIP_RLIMIT_NOFILE], [1],
            [define if setrlimit RLIMIT_NOFILE breaks things])
+       case "$host" in
+       *-*-freebsd9.*|*-*-freebsd10.*)
+               # Capsicum on 9 and 10 do not allow ppoll() so don't auto-enable.
+               disable_capsicum=yes
+       esac
        ;;
 *-*-bsdi*)
        AC_DEFINE([SETEUID_BREAKS_SETUID])
@@ -3654,6 +3659,7 @@ elif test "x$sandbox_arg" = "xseccomp_filter" || \
        AC_DEFINE([SANDBOX_SECCOMP_FILTER], [1], [Sandbox using seccomp filter])
 elif test "x$sandbox_arg" = "xcapsicum" || \
      ( test -z "$sandbox_arg" && \
+       test "x$disable_capsicum" != "xyes" && \
        test "x$ac_cv_header_sys_capsicum_h" = "xyes" && \
        test "x$ac_cv_func_cap_rights_limit" = "xyes") ; then
        test "x$ac_cv_header_sys_capsicum_h" != "xyes" && \