From owner-svn-src-all@freebsd.org Tue Nov 3 19:50:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 953D446236D; Tue, 3 Nov 2020 19:50:43 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4CQgPb3SQVz4MS4; Tue, 3 Nov 2020 19:50:43 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5A5EE20098; Tue, 3 Nov 2020 19:50:43 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0A3Johuh032475; Tue, 3 Nov 2020 19:50:43 GMT (envelope-from cem@FreeBSD.org) Received: (from cem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0A3JohPI032474; Tue, 3 Nov 2020 19:50:43 GMT (envelope-from cem@FreeBSD.org) Message-Id: <202011031950.0A3JohPI032474@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cem set sender to cem@FreeBSD.org using -f From: Conrad Meyer Date: Tue, 3 Nov 2020 19:50:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r367303 - head/sys/compat/linux X-SVN-Group: head X-SVN-Commit-Author: cem X-SVN-Commit-Paths: head/sys/compat/linux X-SVN-Commit-Revision: 367303 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Nov 2020 19:50:43 -0000 Author: cem Date: Tue Nov 3 19:50:42 2020 New Revision: 367303 URL: https://svnweb.freebsd.org/changeset/base/367303 Log: linux(4): Improve netlink diagnostics Add some missing netlink_family definitions and produce vaguely human-readable error messages for those definitions, like we used to do for just ROUTE and KOBJECT_UEVENTS. Additionally, if we know it's a netfilter socket but didn't find it in the table, fall back to printing that instead of the generic handler ("socket domain 16, ..."). No change to the emulator correctness, just mildly improved diagnostics for gaps. Modified: head/sys/compat/linux/linux.h head/sys/compat/linux/linux_socket.c Modified: head/sys/compat/linux/linux.h ============================================================================== --- head/sys/compat/linux/linux.h Tue Nov 3 19:14:03 2020 (r367302) +++ head/sys/compat/linux/linux.h Tue Nov 3 19:50:42 2020 (r367303) @@ -60,8 +60,14 @@ struct l_sockaddr { #define LINUX_AF_INET6 10 #define LINUX_AF_NETLINK 16 -#define LINUX_NETLINK_ROUTE 0 -#define LINUX_NETLINK_UEVENT 15 +#define LINUX_NETLINK_ROUTE 0 +#define LINUX_NETLINK_SOCK_DIAG 4 +#define LINUX_NETLINK_NFLOG 5 +#define LINUX_NETLINK_SELINUX 7 +#define LINUX_NETLINK_AUDIT 9 +#define LINUX_NETLINK_FIB_LOOKUP 10 +#define LINUX_NETLINK_NETFILTER 12 +#define LINUX_NETLINK_KOBJECT_UEVENT 15 /* * net device flags Modified: head/sys/compat/linux/linux_socket.c ============================================================================== --- head/sys/compat/linux/linux_socket.c Tue Nov 3 19:14:03 2020 (r367302) +++ head/sys/compat/linux/linux_socket.c Tue Nov 3 19:50:42 2020 (r367303) @@ -502,6 +502,17 @@ goout: return (error); } +static const char *linux_netlink_names[] = { + [LINUX_NETLINK_ROUTE] = "ROUTE", + [LINUX_NETLINK_SOCK_DIAG] = "SOCK_DIAG", + [LINUX_NETLINK_NFLOG] = "NFLOG", + [LINUX_NETLINK_SELINUX] = "SELINUX", + [LINUX_NETLINK_AUDIT] = "AUDIT", + [LINUX_NETLINK_FIB_LOOKUP] = "FIB_LOOKUP", + [LINUX_NETLINK_NETFILTER] = "NETFILTER", + [LINUX_NETLINK_KOBJECT_UEVENT] = "KOBJECT_UEVENT", +}; + int linux_socket(struct thread *td, struct linux_socket_args *args) { @@ -516,22 +527,29 @@ linux_socket(struct thread *td, struct linux_socket_ar return (retval_socket); domain = linux_to_bsd_domain(args->domain); if (domain == -1) { - if (args->domain == LINUX_AF_NETLINK && - args->protocol == LINUX_NETLINK_ROUTE) { - linux_msg(curthread, - "unsupported socket(AF_NETLINK, %d, NETLINK_ROUTE)", type); - return (EAFNOSUPPORT); + /* Mask off SOCK_NONBLOCK / CLOEXEC for error messages. */ + type = args->type & LINUX_SOCK_TYPE_MASK; + if (args->domain == LINUX_AF_NETLINK) { + const char *nl_name; + + if (args->protocol >= 0 && + args->protocol < nitems(linux_netlink_names)) + nl_name = linux_netlink_names[args->protocol]; + else + nl_name = NULL; + if (nl_name != NULL) + linux_msg(curthread, + "unsupported socket(AF_NETLINK, %d, " + "NETLINK_%s)", type, nl_name); + else + linux_msg(curthread, + "unsupported socket(AF_NETLINK, %d, %d)", + type, args->protocol); + } else { + linux_msg(curthread, "unsupported socket domain %d, " + "type %d, protocol %d", args->domain, type, + args->protocol); } - - if (args->domain == LINUX_AF_NETLINK && - args->protocol == LINUX_NETLINK_UEVENT) { - linux_msg(curthread, - "unsupported socket(AF_NETLINK, %d, NETLINK_UEVENT)", type); - return (EAFNOSUPPORT); - } - - linux_msg(curthread, "unsupported socket domain %d, type %d, protocol %d", - args->domain, args->type & LINUX_SOCK_TYPE_MASK, args->protocol); return (EAFNOSUPPORT); }