From patchwork Mon Apr 24 15:03:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 68215 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 855873857347 for ; Mon, 24 Apr 2023 15:04:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 855873857347 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1682348671; bh=7SIiizsCRGCFrR7j0QDf6fo6H/b1wYWN8VDWlr7SfJQ=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Nq5Uy4rFIB0uLq5g1zUKGvG5oC/fGJs3Ico5EbkTiLvFdR/ygbJFqiHxHqWGYXmUP KR4s0ou6KndwlGlSQOQa12RTqdlLK13DnFs7TLQ58T+Y9Fqkz35uheC+a99ggDfa6y tvNMpEDdPdVGs2XneCjEWrKv0T6/Rf3ayypbrcVw= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 1F68E3858D35 for ; Mon, 24 Apr 2023 15:04:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1F68E3858D35 Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-447-96CVRHkdMvK8ENe_5v_MNQ-1; Mon, 24 Apr 2023 11:04:03 -0400 X-MC-Unique: 96CVRHkdMvK8ENe_5v_MNQ-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-74e3f0a830cso194693485a.0 for ; Mon, 24 Apr 2023 08:04:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682348642; x=1684940642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7SIiizsCRGCFrR7j0QDf6fo6H/b1wYWN8VDWlr7SfJQ=; b=QG0/Ti7AbB9+R2MHHRysdu/qcyD9xv4puq9TZN9w0f9DqDnO2HEOHj3xvI2HQ0jKIZ MMtJBmwuzl9Rqo3ouQHr/V3AeFkYH/FgPuTMh6SSBFrE54LlZXpQ7rT9/yZ3vvI8TuBF r//QfuC9eY98IHcPWdWQlvrAU7rTjeZMlMqAoNybmgXfM2PUeH+awTKuFoCwfgaQQM+m +otH75/uwQtjp2DCDiQCA8j3JYPhvDblP8bx2+iYONeoj5APlCTdfnlRCl+8f1Tf1ovz QujF0G2H4+T83mqOqj0BycGknkv/HbY/29QKYWiP0H9Ekbn0phT3bv7upDddEax5W2s5 QaQA== X-Gm-Message-State: AAQBX9cEz7jtQ9f+/U00KxCaoBkKD3gECDeLaNC9M6qyqT7myrhemSSo Dxt3RfkskTn220LDJ8ZcVKjFLneGH7R0xFXbYoL+juLZcG1V/VO8XouScWscdETjMOn0f5AcYeR nJ7vDSHRdJl7FnPepYb9IihuwwEcfSgt9OfKZAWQgxLbrJQIcaRit5Mm00hCKTskj7CB6Npi+ss Ug7VMz X-Received: by 2002:a05:622a:1705:b0:3f0:a382:cd51 with SMTP id h5-20020a05622a170500b003f0a382cd51mr4061902qtk.8.1682348642413; Mon, 24 Apr 2023 08:04:02 -0700 (PDT) X-Google-Smtp-Source: AKy350Ye2Db2hngqWiJ8/qWEXu9FR6rXht2tyZftOyPxBPNqtWt6Ue20e+4h1lGH0I4Azb0fYVGfzA== X-Received: by 2002:a05:622a:1705:b0:3f0:a382:cd51 with SMTP id h5-20020a05622a170500b003f0a382cd51mr4061809qtk.8.1682348641631; Mon, 24 Apr 2023 08:04:01 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id t15-20020ac8530f000000b003e9c6a4a381sm3683807qtn.54.2023.04.24.08.04.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Apr 2023 08:04:00 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v6 3/3] nptl: Use direct syscall numbers in setxid Date: Mon, 24 Apr 2023 11:03:53 -0400 Message-Id: <20230424150353.1469397-4-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230424150353.1469397-1-josimmon@redhat.com> References: <20230424150353.1469397-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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-Patchwork-Original-From: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Make all internal glibc syscalls use direct compile time numeric values rather than variables. This will make the syscall number easier to identify during static analysis. --- nptl/nptl_setxid.c | 136 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 132 insertions(+), 4 deletions(-) diff --git a/nptl/nptl_setxid.c b/nptl/nptl_setxid.c index 4bfcfe4188..797015def1 100644 --- a/nptl/nptl_setxid.c +++ b/nptl/nptl_setxid.c @@ -66,8 +66,72 @@ __nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx) || si->si_code != SI_TKILL) return; - result = INTERNAL_SYSCALL_NCS (xidcmd->syscall_no, 3, xidcmd->id[0], - xidcmd->id[1], xidcmd->id[2]); + switch(xidcmd->syscall_no) + { +#ifdef __NR_setuid32 + case __NR_setuid32: + result = INTERNAL_SYSCALL_NCS (__NR_setuid32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setuid32 */ + case __NR_setuid: + result = INTERNAL_SYSCALL_NCS (__NR_setuid, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#ifdef __NR_setreuid32 + case __NR_setreuid32: + result = INTERNAL_SYSCALL_NCS (__NR_setreuid32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setreuid32 */ + case __NR_setreuid: + result = INTERNAL_SYSCALL_NCS (__NR_setreuid, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#ifdef __NR_setresgid32 + case __NR_setresgid32: + result = INTERNAL_SYSCALL_NCS (__NR_setresgid32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setresgid32 */ + case __NR_setresgid: + result = INTERNAL_SYSCALL_NCS (__NR_setresgid, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#ifdef __NR_setregid32 + case __NR_setregid32: + result = INTERNAL_SYSCALL_NCS (__NR_setregid32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setregid32 */ + case __NR_setregid: + result = INTERNAL_SYSCALL_NCS (__NR_setregid, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#ifdef __NR_setgid32 + case __NR_setgid32: + result = INTERNAL_SYSCALL_NCS (__NR_setgid32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setgid32 */ + case __NR_setgid: + result = INTERNAL_SYSCALL_NCS (__NR_setgid, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#ifdef __NR_setgroups32 + case __NR_setgroups32: + result = INTERNAL_SYSCALL_NCS (__NR_setgroups32, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; +#endif /* __NR_setgroups32 */ + case __NR_setgroups: + result = INTERNAL_SYSCALL_NCS (__NR_setgroups, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + break; + default: + result = INTERNAL_SYSCALL_NCS (xidcmd->syscall_no, 3, xidcmd->id[0], + xidcmd->id[1], xidcmd->id[2]); + } int error = 0; if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result))) error = INTERNAL_SYSCALL_ERRNO (result); @@ -262,8 +326,72 @@ __nptl_setxid (struct xid_command *cmdp) /* This must be last, otherwise the current thread might not have permissions to send SIGSETXID syscall to the other threads. */ - result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3, - cmdp->id[0], cmdp->id[1], cmdp->id[2]); + switch(cmdp->syscall_no) + { +#ifdef __NR_setuid32 + case __NR_setuid32: + result = INTERNAL_SYSCALL_NCS (__NR_setuid32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setuid32 */ + case __NR_setuid: + result = INTERNAL_SYSCALL_NCS (__NR_setuid, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#ifdef __NR_setreuid32 + case __NR_setreuid32: + result = INTERNAL_SYSCALL_NCS (__NR_setreuid32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setreuid32 */ + case __NR_setreuid: + result = INTERNAL_SYSCALL_NCS (__NR_setreuid, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#ifdef __NR_setresgid32 + case __NR_setresgid32: + result = INTERNAL_SYSCALL_NCS (__NR_setresgid32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setresgid32 */ + case __NR_setresgid: + result = INTERNAL_SYSCALL_NCS (__NR_setresgid, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#ifdef __NR_setregid32 + case __NR_setregid32: + result = INTERNAL_SYSCALL_NCS (__NR_setregid32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setregid32 */ + case __NR_setregid: + result = INTERNAL_SYSCALL_NCS (__NR_setregid, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#ifdef __NR_setgid32 + case __NR_setgid32: + result = INTERNAL_SYSCALL_NCS (__NR_setgid32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setgid32 */ + case __NR_setgid: + result = INTERNAL_SYSCALL_NCS (__NR_setgid, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#ifdef __NR_setgroups32 + case __NR_setgroups32: + result = INTERNAL_SYSCALL_NCS (__NR_setgroups32, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; +#endif /* __NR_setgroups32 */ + case __NR_setgroups: + result = INTERNAL_SYSCALL_NCS (__NR_setgroups, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + break; + default: + result = INTERNAL_SYSCALL_NCS (cmdp->syscall_no, 3, cmdp->id[0], + cmdp->id[1], cmdp->id[2]); + } int error = 0; if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result))) {