From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.efficios.com (mail.efficios.com [167.114.26.124]) by sourceware.org (Postfix) with ESMTPS id 24ACE396EC3B for ; Thu, 30 Apr 2020 20:37:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 24ACE396EC3B Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id C296C292509; Thu, 30 Apr 2020 16:37:37 -0400 (EDT) Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id v59CYPa6Utbm; Thu, 30 Apr 2020 16:37:37 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id 30A65292508; Thu, 30 Apr 2020 16:37:37 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.efficios.com 30A65292508 X-Virus-Scanned: amavisd-new at efficios.com Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id MKjDw-bbzQJ1; Thu, 30 Apr 2020 16:37:37 -0400 (EDT) Received: from mail03.efficios.com (mail03.efficios.com [167.114.26.124]) by mail.efficios.com (Postfix) with ESMTP id 20DD829203F; Thu, 30 Apr 2020 16:37:37 -0400 (EDT) Date: Thu, 30 Apr 2020 16:37:37 -0400 (EDT) From: Mathieu Desnoyers To: Florian Weimer Cc: carlos , Joseph Myers , Szabolcs Nagy , libc-alpha Message-ID: <467540610.78605.1588279057114.JavaMail.zimbra@efficios.com> In-Reply-To: <87v9lgk90c.fsf@oldenburg2.str.redhat.com> References: <20200428171513.22926-1-mathieu.desnoyers@efficios.com> <874kt0lx6i.fsf@oldenburg2.str.redhat.com> <729499446.78182.1588267203324.JavaMail.zimbra@efficios.com> <87zhaskgsp.fsf@oldenburg2.str.redhat.com> <1904112038.78406.1588275546194.JavaMail.zimbra@efficios.com> <625724399.78482.1588276415331.JavaMail.zimbra@efficios.com> <1916849841.78543.1588276745582.JavaMail.zimbra@efficios.com> <87v9lgk90c.fsf@oldenburg2.str.redhat.com> Subject: Re: [RFC PATCH glibc 1/3] glibc: Perform rseq(2) registration at C startup and thread creation (v18) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [167.114.26.124] X-Mailer: Zimbra 8.8.15_GA_3918 (ZimbraWebClient - FF75 (Linux)/8.8.15_GA_3895) Thread-Topic: glibc: Perform rseq(2) registration at C startup and thread creation (v18) Thread-Index: xYGbhK+0VjJulQjHKjgnkOW3dh6Qmg== X-Spam-Status: No, score=-14.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Apr 2020 20:37:39 -0000 ----- On Apr 30, 2020, at 4:34 PM, Florian Weimer fweimer@redhat.com wrote: > * Mathieu Desnoyers: > >> I'm actually wondering about "EPERM". Is it sometimes used by seccomp >> filters to refuse a system call ? > > Yes, it's the default for systemd-nspawn. I have argued against it, but > unsuccessfully. It breaks all kinds of stuff inside glibc, too. OK, so how about this errno handling ? static inline void rseq_register_current_thread (void) { int ret; if (__rseq_abi.cpu_id != RSEQ_CPU_ID_UNINITIALIZED) __libc_fatal ("glibc fatal error: " "rseq already initialized for this thread\n"); ret = INTERNAL_SYSCALL_CALL (rseq, &__rseq_abi, sizeof (struct rseq), 0, RSEQ_SIG); if (INTERNAL_SYSCALL_ERROR_P (ret)) { const char *msg = NULL; switch (INTERNAL_SYSCALL_ERRNO (ret)) { case ENOSYS: /* rseq system call not implemented. */ case EPERM: /* rseq system call filtered by seccomp. */ case EACCES: /* rseq system call filtered by seccomp. */ __rseq_abi.cpu_id = RSEQ_CPU_ID_REGISTRATION_FAILED; break; case EINVAL: msg = "glibc fatal error: rseq already registered for this thread\n"; break; case EBUSY: msg = "glibc fatal error: rseq parameters are invalid\n"; break; case EFAULT: msg = "glibc fatal error: rseq is an invalid address\n"; break; default: msg = "glibc fatal error: unexpected rseq errno\n"; break; } if (msg) __libc_fatal (msg); } } Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com