From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681766441; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rRmx6o/0M27Ci7AUJnnF4ye3AfWz/oUZ3PGh+V+oi3U=; b=NJKMXr5Ge4GHgppZYhmOCgweTotmAz151QpQ0yIitCrYRgI8/zhCdiN+JS7DPrisdThuPN 8y2iWhTlLXnH5XQ0RGvVe2oXShZUkgnyorBMO2T6mfzxAh8VKKMIKQjJcCahvH5sSjPCFA kRsQWyRFOPKOFH4odNBinKnOpIVoQ9M= 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) From: Joe Simmons-Talbott 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 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true 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 List-Id: 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; \ -- 2.39.2