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 6BB5D3858D28 for ; Mon, 24 Apr 2023 15:04:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6BB5D3858D28 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=1682348642; 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=W8KC5UdJqVboddf0rmFjmBsaESpepi1G6lSh6Y0REPw=; b=Qa20zgHBnta+sUQHltmWVfGsY0W3vT4BoV3fFFyE8ZzDEjyqkXUtR7dvmHs5NWtvKs2MJc aovVrrxZXdF7b6g2VnaJgQpqBRboJlReG9+sr1/MfedrgWyXnjpco4FGtSc97BEQqI4Z9o CjYV8XjoVnfWjtyUBb8LtGmewiozZ3g= 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-443-vz3ICPZBPqKooeQx0Xi8jA-1; Mon, 24 Apr 2023 11:04:00 -0400 X-MC-Unique: vz3ICPZBPqKooeQx0Xi8jA-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-74e3f0a8349so188681185a.2 for ; Mon, 24 Apr 2023 08:04:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682348639; x=1684940639; 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=W8KC5UdJqVboddf0rmFjmBsaESpepi1G6lSh6Y0REPw=; b=fjIOv+cU2Llb2ZIYj83W8CLMw0neGe27j0kNQ09HtSjpGvbLNk405tpavK7fqKr9sy zJ10cMe6HMX9SaVbH9jo9wu6ZiY39wbTATRUxB6JpOl8zMMStLWriJ642zh20/+Oc13n aoRrlmAdSTzmwGfoJwVbjGLeDUX0WAqO66SmJXT9PKpN5/hjB5WKkjW7xtNHrk4iZ2rT QLeDy68+hLYeEytKqFwSgZmwtq5k0L7d30kYNWiZwOMVwbi31NmrAQttBiUEum81+jNe LbrcDEukt8990adgu/BHdxzbrBC19WgwFXXGSivrlJTZeVcL1qjEYGcAyKNuuj3IYblD PoFg== X-Gm-Message-State: AAQBX9ejiyRKgwSDtm+Jfwl4IsuR+EMDzcJ5fkR9sK65KOHsIgyV43ih f9i3lT03VZACwh9D40HYw68VsfaSMx+6eKS+BqBVSxVhSLVOVMoohyLayiywV8kuOjsNM67UUuC e/IvAy+Ia10tGoBNR61m/3iNNCFYvNo19yIoutOk3MzS7adLxGjAO/vl5FPXYvtAEXtCHkzyWZW dvICUs X-Received: by 2002:a05:622a:44d:b0:3e6:6262:9710 with SMTP id o13-20020a05622a044d00b003e662629710mr20663699qtx.38.1682348639380; Mon, 24 Apr 2023 08:03:59 -0700 (PDT) X-Google-Smtp-Source: AKy350a0zSE5o3DsclCq7C21fA6E2XCavbmbBmqVGftkr7e9OW4TGxWAzG+2/gSjB0pCbWb9wc7eTg== X-Received: by 2002:a05:622a:44d:b0:3e6:6262:9710 with SMTP id o13-20020a05622a044d00b003e662629710mr20663655qtx.38.1682348638899; Mon, 24 Apr 2023 08:03:58 -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.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Apr 2023 08:03:58 -0700 (PDT) From: Joe Simmons-Talbott To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v6 1/3] x86_64: Set the syscall register right before doing the syscall. Date: Mon, 24 Apr 2023 11:03:51 -0400 Message-Id: <20230424150353.1469397-2-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 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true 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 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 | 24 ++++++++++++------------ 1 file changed, 12 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..0db8660531 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -257,9 +257,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 +273,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 +291,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 +311,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 +333,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 +358,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