From nobody Fri Jun 17 19:39:22 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 35E7385BFDE; Fri, 17 Jun 2022 19:39:24 +0000 (UTC) (envelope-from git@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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LPq9l6xYvz3R36; Fri, 17 Jun 2022 19:39:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655494764; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=MnI13shr5OF/ahe3r/1J0y1ptY4ZfpO1fjqb2ZpAOMo=; b=LDc8pD8Bp9W2gPl8CuqqTexn9tLdCUF3cCRhJ4MM9DSQlV6/dmhAwrW+nNdooTgEiLjcfx XAmW9ChtIad1EkwFCnuVPnA69cb08LCHQqz+4dYCu8Yy8fjE6QtqIXMqRbnoK5wQDFkv0V Mm00TfahUT1bglwMFtT/MHBbsysgyv06Hwy3V+7jIIRimtRj/Tl7ll8P62bMCMBvEWRPIU CNKKi8KXpLHDUd7V3mIH3stxPLevB2tYCTaeAFJud205/glF4r9PZDiAGCtyHAOj99GsGi or3trdWz4KuKPVVaI3h6+33+5R4/SZ9FnI6q+qcukHjt/J5FjGKYci4J/pu+Bg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 17CCB25AD6; Fri, 17 Jun 2022 19:39:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25HJdM1I015937; Fri, 17 Jun 2022 19:39:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25HJdMPu015936; Fri, 17 Jun 2022 19:39:22 GMT (envelope-from git) Date: Fri, 17 Jun 2022 19:39:22 GMT Message-Id: <202206171939.25HJdMPu015936@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dmitry Chagin Subject: git: 302cff0ef9b4 - stable/13 - linux(4): Add a simple rseq syscall implementation. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 302cff0ef9b4ee61c8d0649ba8f54ec2d0d0e5d5 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655494764; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=MnI13shr5OF/ahe3r/1J0y1ptY4ZfpO1fjqb2ZpAOMo=; b=mpPZlqZthIGAOqj6I1BjIZzPx9uR4hJD61g2vsIqGsJpJtCYIGhyBPlkZutr3PQSy4Qpko j0u45ITONaMpv1GVUoIK2Vx8Zeoo5FF+0gCR/6Jqyf0DVF/hUAynOETjUpkrE+CSAuwfDW mf4XzKowJgIQe7R0loBVzMTpYpaH5QCdBHy+NGZX121rlaFgT/0HSxS6aw9UsDhyq6p/5E X364aXxqvHmSlpqRHBUVW8tB1g5MhxbpCjjm/XQ463eJz0IFygAEhn+085kwGm6L7fhrP3 p42TFur3Bi2768GIWswh369zefXGrFUlvBTcoJZHzrxuVAkXYvK2yBZSqDPdqA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1655494764; a=rsa-sha256; cv=none; b=ovttXdnU2Iu6gZTMRcYGABqORQwMKo2Z+sfE4dXaTGqhA/CWjRDZRM60a5RgAi7H+outvl cQby28yJlUfMmrquCIHvL6fqx9x5Oqz9CWNOh0Y+rzdBY9uggso4YnpsktoDcVSj8gd2rR ULUMIpyIR95QsO4nX6qp95Nkzn4dYu/eGYZWOoTz4zn+wyBuvExz5tlKBwFOncLt8H0+m5 LPs/06KONajDVZVrlZXWp3YlQkTMbCi1MPYR32EuQf5glQE45/c3tho3GxCgyeuKiFZA4W Sx4/kcbeO5NEQP/9H8WNLg54QKmq47T8KRlzeu7N6yMbuyGqA+8GpMu9bz89EA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=302cff0ef9b4ee61c8d0649ba8f54ec2d0d0e5d5 commit 302cff0ef9b4ee61c8d0649ba8f54ec2d0d0e5d5 Author: Dmitry Chagin AuthorDate: 2022-04-26 16:35:56 +0000 Commit: Dmitry Chagin CommitDate: 2022-06-17 19:34:03 +0000 linux(4): Add a simple rseq syscall implementation. To avoid annoyng messages from glibc-2.35 test suite add the simple implementation of rseq syscall which is do nothing for now. I plan to implement it if and when the API stabilizes. MFC after: 2 weeks (cherry picked from commit ee55d560e89ac8de37def993a13d2582638273b7) --- sys/compat/linux/linux_dummy.c | 1 - sys/compat/linux/linux_rseq.c | 87 ++++++++++++++++++++++++++++++++++++++++++ sys/modules/linux/Makefile | 2 +- sys/modules/linux64/Makefile | 2 +- 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/sys/compat/linux/linux_dummy.c b/sys/compat/linux/linux_dummy.c index e254bf94c026..57360c0d1a00 100644 --- a/sys/compat/linux/linux_dummy.c +++ b/sys/compat/linux/linux_dummy.c @@ -144,7 +144,6 @@ DUMMY(epoll_pwait2); DUMMY(mount_setattr); /* Linux 4.18: */ DUMMY(io_pgetevents); -DUMMY(rseq); /* Linux 5.0: */ DUMMY(pidfd_send_signal); DUMMY(io_uring_setup); diff --git a/sys/compat/linux/linux_rseq.c b/sys/compat/linux/linux_rseq.c new file mode 100644 index 000000000000..89bf526a4271 --- /dev/null +++ b/sys/compat/linux/linux_rseq.c @@ -0,0 +1,87 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2022 Dmitry Chagin + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#ifdef COMPAT_LINUX32 +#include +#include +#else +#include +#include +#endif + + +enum linux_rseq_cpu_id_state { + LINUX_RSEQ_CPU_ID_UNINITIALIZED = -1, + LINUX_RSEQ_CPU_ID_REGISTRATION_FAILED = -2, +}; + +enum linux_rseq_flags { + LINUX_RSEQ_FLAG_UNREGISTER = (1 << 0), +}; + +enum linux_rseq_cs_flags_bit { + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0, + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1, + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2, +}; + +enum linux_rseq_cs_flags { + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = + (1U << LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT), + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = + (1U << LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT), + LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = + (1U << LINUX_RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), +}; + +struct linux_rseq_cs { + uint32_t version; + uint32_t flags; + uint64_t start_ip; + uint64_t post_commit_offset; + uint64_t abort_ip; +} __attribute__((aligned(4 * sizeof(uint64_t)))); + +struct linux_rseq { + uint32_t cpu_id_start; + uint32_t cpu_id; + uint64_t rseq_cs; + uint32_t flags; +} __attribute__((aligned(4 * sizeof(uint64_t)))); + +int +linux_rseq(struct thread *td, struct linux_rseq_args *args) +{ + + return (ENOSYS); +} diff --git a/sys/modules/linux/Makefile b/sys/modules/linux/Makefile index 089187ca7cff..9b4453045c09 100644 --- a/sys/modules/linux/Makefile +++ b/sys/modules/linux/Makefile @@ -16,7 +16,7 @@ SRCS= linux_fork.c linux${SFX}_dummy_machdep.c linux_file.c linux_event.c \ linux${SFX}_machdep.c linux_misc.c linux_signal.c \ linux_socket.c linux_stats.c linux_sysctl.c linux${SFX}_sysent.c \ linux${SFX}_sysvec.c linux_uid16.c linux_time.c \ - linux_timer.c linux_vdso.c \ + linux_timer.c linux_vdso.c linux_rseq.c \ opt_inet6.h opt_compat.h opt_posix.h opt_usb.h vnode_if.h \ device_if.h bus_if.h .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" diff --git a/sys/modules/linux64/Makefile b/sys/modules/linux64/Makefile index e2a408f49bad..4a4a84d38c73 100644 --- a/sys/modules/linux64/Makefile +++ b/sys/modules/linux64/Makefile @@ -10,7 +10,7 @@ SRCS= linux_elf64.c linux_fork.c linux_dummy_machdep.c linux_file.c \ linux_event.c linux_futex.c linux_getcwd.c linux_ioctl.c linux_ipc.c \ linux_machdep.c linux_misc.c linux_ptrace.c linux_signal.c \ linux_socket.c linux_stats.c linux_sysctl.c linux_sysent.c \ - linux_sysvec.c linux_time.c linux_vdso.c linux_timer.c \ + linux_sysvec.c linux_time.c linux_vdso.c linux_timer.c linux_rseq.c \ opt_compat.h opt_inet6.h opt_posix.h opt_usb.h \ vnode_if.h device_if.h bus_if.h \ linux_support.s