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 D57E03858D37 for ; Wed, 19 Apr 2023 13:58:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D57E03858D37 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=1681912708; 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=c9VkmhKelYwAYK1xSSlPUOTOCUkSrDgzG1SSWinJ8f/7Q2HIWQj6q+MHh1/AWm5Lwaa4Bi lDY/eA7dQs9aU6Q1i16vxb8PLRrjy+0/6+MyojcV7L2OoatMZ3cbFGqFQhVWry6pI5sSCu zWipjIm/sRVIUFScWkKjyseR9ZVo54c= Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-49-Wozhplg5P5mpVy5MwKMJYw-1; Wed, 19 Apr 2023 09:58:27 -0400 X-MC-Unique: Wozhplg5P5mpVy5MwKMJYw-1 Received: by mail-qv1-f72.google.com with SMTP id z7-20020a0cd787000000b005e8bb5961b3so15039327qvi.7 for ; Wed, 19 Apr 2023 06:58:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681912706; x=1684504706; 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=IxO3ma6kJ3YzS86YlC+J/2JsxUp2Y4Pc/y4Kpnceieaa3PaL0zfswulGyRf1RTdLj4 G7GboTIGC0WWT93bnmvaR9A548PA5CERZLXmWAn+LpHu/2qv0QyAblQkqgE1mnhcXNG4 E3MVEawOsk1EfRaySNWKVEmMfyEfJyq4+mfRl3xnMtMu5pqxbzoPR0NPEczSN4FoUqal XOqTDz8ABl4uAAao/QqjtzmdEU/7EuUQr6znthSk7UdXWMIvKcWJxdS25XjT9UmRC4l8 3LNrogbhNPvyqDdhiSBfRrl4WsdGqmPoZCLzfOB2j237xi0KTiCQ9ucCuHYVNAHzNl2S 4VEw== X-Gm-Message-State: AAQBX9fqLM1iZsJacYEQ0e3i4MdRmwRpLF+Jx+Y6v+aXF8g9e07AdgrK WvjmbOHNe5Wa3HRuu6ZzA9ydMstCsE2O/qpwYnuaompFf7kAveO9EyhtBJxVvxZSYsviBgImZ7J GCRbwI0HRQsXG0R1r+WDcoQI3EksER+5THTZuKs952AWGxFS94713XQcJVkGU3rpvURYOy6pb8s LWHgcY X-Received: by 2002:ad4:5b8b:0:b0:5ea:c6f7:6d53 with SMTP id 11-20020ad45b8b000000b005eac6f76d53mr25225712qvp.31.1681912706562; Wed, 19 Apr 2023 06:58:26 -0700 (PDT) X-Google-Smtp-Source: AKy350Y5zwIwgHNo4a5OHy6Bkq/yhg6TOcYgTq2F7x86WFbJof5BqREh5PP89+SOQkOS6o9w01WH4A== X-Received: by 2002:ad4:5b8b:0:b0:5ea:c6f7:6d53 with SMTP id 11-20020ad45b8b000000b005eac6f76d53mr25225635qvp.31.1681912705604; Wed, 19 Apr 2023 06:58:25 -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 ks7-20020a056214310700b005e8f61012e0sm4366953qvb.27.2023.04.19.06.58.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Apr 2023 06:58:24 -0700 (PDT) From: Joe Simmons-Talbott To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v5 1/3] x86_64: Set the syscall register right before doing the syscall. Date: Wed, 19 Apr 2023 09:58:19 -0400 Message-Id: <20230419135821.4113156-2-josimmon@redhat.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230419135821.4113156-1-josimmon@redhat.com> References: <20230411133004.2268170-1-josimmon@redhat.com> <20230419135821.4113156-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