From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) by sourceware.org (Postfix) with ESMTPS id 5003D3858D37 for ; Wed, 19 Apr 2023 15:36:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5003D3858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yb1-xb2f.google.com with SMTP id l5so11203311ybe.7 for ; Wed, 19 Apr 2023 08:36:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681918567; x=1684510567; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=XTBDO7o0ySGeioRNNdKkTDRfVmIv19OOPVFN0tjvYyg=; b=WVYXWaw+yLYIfZ3jhwr437pecvP3m7S/fdPrWdF69ZxncjTP+Zr2GOS1+lEMM7ZmL3 08XRtIcHGaSTKeOB/CbuAtxTxHzvExk7jYijTTKc5V9vrX/pHzSrhe/LdF3m8sH2Tyiv 6PtrPMXEOsqytawc8GzhrEowvvRa3By+k6qnUlMlV9Mmw3MR8yvzdjOG0ykOJNXsSiK6 JjhspUj/tl/Jj/rEU2j5dOyDCWLB8gMHVoqZqnqlLHLFSeqjtoiWRp5tFqut67YebQdt VG6MLIpywympPc6QGPiNYn2KEdr6D/cTwmrqkwt8jhq/vXPjgSBa4hEhsG73E2uiA9wv JNyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681918567; x=1684510567; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XTBDO7o0ySGeioRNNdKkTDRfVmIv19OOPVFN0tjvYyg=; b=aG49YoChDVsZJMUrlKlVy6AAQV9grmvo/zh+xpyWnAvxzPvyuXhdJmg0YY2sdQC/Ll KE4KLjigf6mHhMtrVh8ku9O0Bp3y5a+cvSgtzikkpBwhj98wU6D3R6J9jBg99I+TCCcD I6mYOuyDqve23VHr0E/3SXWoaS4y3wakdDUvR4VQiY4xRgkELVVzX+0eUJI7eKyPxBTZ hih7w+A/pNtIP9fS3FMgUG99LoobqJwMEUlEXopelGKP8kQGig/A0WB0Ix5Nk6WxKPYs l4byVKR3tr1SVvyY3ta6zN48INhr6zO9t6IKbXc+53uGkPm7AsQt255HyL/3beMNPjhE QAUg== X-Gm-Message-State: AAQBX9eWcUhvnIVMtoCdAZkY05pCYGXSYB9ZZvpxyiWeOEykQjvG0MXZ yB+N1OHnidCIt7XxK3TVyp4RujdgwwRMINw94iKZoalc X-Google-Smtp-Source: AKy350ahjf15VSUxUF52FLgDTe7ZvdGcohA86tgNLNaYS2pI6svLQDTaKK9x8480Lx/s/knKxl7vz/31OCP5oy7RE8U= X-Received: by 2002:a25:d20b:0:b0:b95:31a3:9d89 with SMTP id j11-20020a25d20b000000b00b9531a39d89mr72218ybg.2.1681918566608; Wed, 19 Apr 2023 08:36:06 -0700 (PDT) MIME-Version: 1.0 References: <20230411133004.2268170-1-josimmon@redhat.com> <20230419135821.4113156-1-josimmon@redhat.com> <20230419135821.4113156-2-josimmon@redhat.com> In-Reply-To: <20230419135821.4113156-2-josimmon@redhat.com> From: "H.J. Lu" Date: Wed, 19 Apr 2023 08:35:30 -0700 Message-ID: Subject: Re: [PATCH v5 1/3] x86_64: Set the syscall register right before doing the syscall. To: Joe Simmons-Talbott Cc: libc-alpha@sourceware.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-3022.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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: On Wed, Apr 19, 2023 at 6:59=E2=80=AFAM Joe Simmons-Talbott via Libc-alpha wrote: > > 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) These are unused. > #undef internal_syscall1 > #define internal_syscall1(number, arg1) = \ > ({ \ > @@ -257,9 +260,9 @@ > TYPEFY (arg1, __arg1) =3D ARGIFY (arg1); = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > asm volatile ( \ > - "syscall\n\t" \ > + "movl %1, %k0\n\tsyscall\n\t" \ > : "=3Da" (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 > --=20 H.J.