From patchwork Mon Apr 17 21:20:33 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: 1769863 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=Ho2uUb1Q; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q0g2g5q6lz23tD for ; Tue, 18 Apr 2023 07:20:59 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A9D443857017 for ; Mon, 17 Apr 2023 21:20:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A9D443857017 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1681766457; bh=rRmx6o/0M27Ci7AUJnnF4ye3AfWz/oUZ3PGh+V+oi3U=; 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=Ho2uUb1QAjCzv4dWGq+TqCV5FiRBvFXL/7ZA2mlhWinW+DwI7Qbti5+oyxYO7XplT m0sMMqg7BT/jCDKE697Pi68yEaAoZ9ve2MhH7JbOgO5V33aKZ4trS8k4dOVzLUfM66 aAF/o0uCMZRcWhtCiUdV/ZOFCZkOu3KI4B313Hcw= 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 CB62B3858C53 for ; Mon, 17 Apr 2023 21:20:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CB62B3858C53 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-149-S8UV5naKOP-WfYINRyRsqg-1; Mon, 17 Apr 2023 17:20:40 -0400 X-MC-Unique: S8UV5naKOP-WfYINRyRsqg-1 Received: by mail-qk1-f200.google.com with SMTP id q79-20020a374352000000b007484744a472so11981139qka.22 for ; Mon, 17 Apr 2023 14:20:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681766439; x=1684358439; 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=rRmx6o/0M27Ci7AUJnnF4ye3AfWz/oUZ3PGh+V+oi3U=; b=RcjfvnnUnFG3E4rvC5PRVg4w1uw2C5h+vZktdmKKy+jtwST2yYvQALuD5xHPrkJhqH X+pjFGwnUIMfdHyrPUMPrI1mA4t6jMEmKHt53nG4DgHk9Cpj+448dK+EkPgMPq6BbrMz nTAZxpeUuCrh8aMz5aTPqgj4IPFGc1I9jjVKVnTetgpr7XALWZPET6LbRA79c7V/ZZog SosxXWNQ9VooqxeoimSy7Mr/hCnhlaX49HyZq35jlqSyTvciyfP5tjPipra1XR24v/53 mtlAuYRZK7eam6wuG+R21qmkShIUNtHvNbNgwUZz8VmuONbq83TS3JzmdQu8LOqReIu+ kTlQ== X-Gm-Message-State: AAQBX9co/GUA90Jeie1jw6Ayww1RpaJC4k0FRCI0FxtsE3iuBW6J9t7o A0/fgV8tXmTh1/COcO8Bi+K23TreZPN7UhvIFmEyLpDiIuygWovbor/SC/QhTFFZlJlVFdCaxde FeSgMd+bIrTK3JzSU71sz4abz+L5oNNX/nKSG4JOdbp1lbDtb++bLsuFRWerhOdf0i4Vs42GwO8 JFS1zV X-Received: by 2002:a05:6214:e4c:b0:5ef:4823:a949 with SMTP id o12-20020a0562140e4c00b005ef4823a949mr13462597qvc.45.1681766439129; Mon, 17 Apr 2023 14:20:39 -0700 (PDT) X-Google-Smtp-Source: AKy350ZyE5e/dspBaVYsOE71qZsW6wJAzxjwaH2ok8bws6FEwz1ZkIDhe0cq05YXa24tk+U0kIT9rA== X-Received: by 2002:a05:6214:e4c:b0:5ef:4823:a949 with SMTP id o12-20020a0562140e4c00b005ef4823a949mr13462567qvc.45.1681766438731; Mon, 17 Apr 2023 14:20:38 -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 q1-20020ad44341000000b005ef817d14casm668666qvs.83.2023.04.17.14.20.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Apr 2023 14:20:38 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v4 1/2] x86_64: Set the syscall register right before doing the syscall. Date: Mon, 17 Apr 2023 17:20:33 -0400 Message-Id: <20230417212034.3890596-2-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230417212034.3890596-1-josimmon@redhat.com> References: <20230411133004.2268170-1-josimmon@redhat.com> <20230417212034.3890596-1-josimmon@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.0 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+incoming=patchwork.ozlabs.org@sourceware.org Sender: "Libc-alpha" To make identifying syscalls easier during call tree analysis load the syscall number just before performing the syscall. Compiler optimizations can place quite a few instructions between the setting of the syscall number and the syscall instruction. During call tree analysis the number of instructions between the two can lead to more difficulty for both tools and humans in properly identifying the syscall number. Having the syscall number set in the prior instruction to the syscall instruction makes this task easier and less error prone. Being able to reliably identify syscalls made by a given API will make it easier to understand and verify the safety and security of glibc. --- sysdeps/unix/sysv/linux/x86_64/sysdep.h | 27 ++++++++++++++----------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h index cfb51be8c5..fd9eb4b02f 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -250,6 +250,9 @@ (long int) resultvar; \ }) +#define MSTR_HELPER(x) #x +#define MSTR(x) MSTR_HELPER(x) + #undef internal_syscall1 #define internal_syscall1(number, arg1) \ ({ \ @@ -257,9 +260,9 @@ TYPEFY (arg1, __arg1) = ARGIFY (arg1); \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1) \ + : "g" (number), "r" (_a1) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \ }) @@ -273,9 +276,9 @@ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1), "r" (_a2) \ + : "g" (number), "r" (_a1), "r" (_a2) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \ }) @@ -291,9 +294,9 @@ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3) \ + : "g" (number), "r" (_a1), "r" (_a2), "r" (_a3) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \ }) @@ -311,9 +314,9 @@ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4) \ + : "g" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \ }) @@ -333,9 +336,9 @@ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \ + : "g" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \ "r" (_a5) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \ @@ -358,9 +361,9 @@ register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \ register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \ asm volatile ( \ - "syscall\n\t" \ + "movl %1, %k0\n\tsyscall\n\t" \ : "=a" (resultvar) \ - : "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \ + : "g" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \ "r" (_a5), "r" (_a6) \ : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ (long int) resultvar; \