amd64/86229: Missing recvmsg syscall in freebsd32 API causes sshd
crash on amd64
Phil Regnauld
pr-gnats at catpipe.net
Fri Sep 16 14:00:32 PDT 2005
>Number: 86229
>Category: amd64
>Synopsis: Missing recvmsg syscall in freebsd32 API causes sshd crash on amd64
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-amd64
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Sep 16 21:00:29 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Phil Regnauld
>Release: FreeBSD 5.4-STABLE amd64
>Organization:
catpipe Systems ApS
>Environment:
System: FreeBSD j2 5.4-STABLE FreeBSD 5.4-STABLE #0: Thu Sep 15 21:21:01 CEST 2005 admin at j2:/usr/obj/usr/src/sys/JAIL amd64
>Description:
recvmsg(2) is not implemented in the freebsd32 compatibility layer.
>From /sys/compat/freebsd32/syscalls.master:
; XXX implement
27 AUE_NULL UNIMPL recvmsg
This is a problem when trying to run, among others sshd from i386/4-STABLE
or 5-STABLE (for example in a jail): if privilege separation (the default)
is used, then recvmsg is called by the child after the fork. The missing
syscall causes a termination of sshd with SIGSYS (12):
14143 sshd CALL recvmsg
14143 sshd RET recvmsg -1 errno 78 Function not implemented
[...]
14143 sshd PSIG SIGSYS SIG_DFL
This is a problem as both i386 and amd64 are Tier 1 platforms, and the
non availability of recvmsg() can be a problem for many applications.
>How-To-Repeat:
Compile the following statically on 5.x/i386 or 4.x/i386 system and execute on
an amd64 system with "options COMPAT_IA32" in the kernel.
#include <sys/types.h>
#include <sys/socket.h>
#include <err.h>
#include <stdio.h>
int
main(void)
{
fprintf(stderr, "moo1\n");
recvmsg(0, 0, 0);
fprintf(stderr, "moo2\n");
err(1, "moo");
return 0;
}
>Fix:
No known fix. In the case of sshd, disable privilege separation
in /etc/ssh/sshd_config (not necessary if logging in as root).
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-amd64
mailing list