From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com [IPv6:2607:f8b0:4864:20::b32]) by sourceware.org (Postfix) with ESMTPS id 36C5A3876890 for ; Mon, 17 Apr 2023 18:39:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 36C5A3876890 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-xb32.google.com with SMTP id k39so5200403ybj.8 for ; Mon, 17 Apr 2023 11:39:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681756740; x=1684348740; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dC9lXAvxybmu5oFNmCbOKkW3KmbDLvmj3hIEPV/n6B4=; b=a7uIqcqEXfc+flFp5zfyDMhggCypldcdI56mv775jx9KP8UCQaoDzTWqYt/r4Ghp2I HtGpTEplWxjSKSBd/G2dBZUOZNtExSm9n8oK8TPMb5qmDCVThh9oul8gYLfz9Y4yusyt 9W+nSQNGheSnJQf+K9xKXQ7KsJjX4MetBzoYkdgOtsElLG4Hh6Qep8sPR/1e8YPEZDEk rATU/gn3DUFJ/mVBqRU8/UgTi5BuFzvIEgtwAVVYCFxPoIakPlSLCHMiqmkGYJtfmuI2 OBFICWn8uXF6jhtlS7no0Y4VDLPwWFCe3+mvhinv9/iWDVknX0gHJpWkZGILFBhkTMPV BkvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681756740; x=1684348740; h=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=dC9lXAvxybmu5oFNmCbOKkW3KmbDLvmj3hIEPV/n6B4=; b=HwxX4xPCe4KiBcwAVNugDjC1MihDd5vYbOKkA2gGoJdNf/yWIvahOflYXlgu6476td lvKF/Bk/AL0fMaZAGbS9HqCqvURN7/pCx+s6sI7xWziF/DnW3sXqO0olBY31qoGYP3SX XBfg8MO4ZKWlvRzGmLs5QRQ+6Z9x7JjkfAgKPWz9wiJnmwCGPWS2HGlgu81MaGnT98b+ VvbEUbylNxaKsZii1FrY9kejd6pUE84Dkfof3VrFS48XfJ2M8GtANaTUpXL/PNqGi/He aEugXZ9emwhQ4oKlFZJqEZcn5he0HY8OenBPX4eab49fdEBcrbx5NWK6sXlNQneoNFpe PB6g== X-Gm-Message-State: AAQBX9fHLAV+f0K8P3Idgh/l1SumIF0RyRJ2l5qM3FsMEL/GULV+FSNa HAlV61+P6NEnJH8JlFp+LRUTb8526Dtx0URkhU0= X-Google-Smtp-Source: AKy350aPfzKhbuhZBctvzNq7gVSaVJ4d+CiBbI8tQLynxyBj4n4SvM/HhtUarE8G68r+m/1CEPlLOstWSX2PB8+GTTI= X-Received: by 2002:a25:76c4:0:b0:b8b:f1ac:9c6e with SMTP id r187-20020a2576c4000000b00b8bf1ac9c6emr7982411ybc.2.1681756740483; Mon, 17 Apr 2023 11:39:00 -0700 (PDT) MIME-Version: 1.0 References: <20230411133004.2268170-1-josimmon@redhat.com> <20230417153451.1450817-1-josimmon@redhat.com> <20230417153451.1450817-2-josimmon@redhat.com> <20230417160043.GC2106608@oak> In-Reply-To: <20230417160043.GC2106608@oak> From: "H.J. Lu" Date: Mon, 17 Apr 2023 11:38:24 -0700 Message-ID: Subject: Re: [PATCH v3 1/2] x86_64: Set the syscall register right before doing the syscall. To: Joe Simmons-Talbott Cc: libc-alpha@sourceware.org Content-Type: multipart/mixed; boundary="0000000000001daace05f98c814a" X-Spam-Status: No, score=-3022.0 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: --0000000000001daace05f98c814a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 17, 2023 at 9:00=E2=80=AFAM Joe Simmons-Talbott wrote: > > On Mon, Apr 17, 2023 at 08:54:17AM -0700, H.J. Lu wrote: > > On Mon, Apr 17, 2023 at 8:35=E2=80=AFAM Joe Simmons-Talbott via Libc-al= pha > > wrote: > > > > > > To make identifying syscalls easier during call tree analysis load th= e > > > 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 ca= ll > > > 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 instructi= on > > > to the syscall instruction makes this task easier and less error pron= e. > > > Being able to reliably identify syscalls made by a given API will mak= e > > > it easier to understand and verify the safety and security of glibc. > > > --- > > > sysdeps/unix/sysv/linux/x86_64/sysdep.h | 33 +++++++++++++++++++++++= ++ > > > 1 file changed, 33 insertions(+) > > > > > > diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/s= ysv/linux/x86_64/sysdep.h > > > index cfb51be8c5..800a56723f 100644 > > > --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h > > > +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > > > @@ -250,12 +250,20 @@ > > > (long int) resultvar; = \ > > > }) > > > > > > +#define MSTR_HELPER(x) #x > > > +#define MSTR(x) MSTR_HELPER(x) > > > + > > > #undef internal_syscall1 > > > #define internal_syscall1(number, arg1) = \ > > > ({ = \ > > > unsigned long int resultvar; = \ > > > TYPEFY (arg1, __arg1) =3D ARGIFY (arg1); = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > @@ -272,6 +280,11 @@ > > > TYPEFY (arg1, __arg1) =3D ARGIFY (arg1); = \ > > > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > @@ -290,6 +303,11 @@ > > > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > > > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > @@ -310,6 +328,11 @@ > > > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > > > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > @@ -332,6 +355,11 @@ > > > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > > > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > @@ -357,6 +385,11 @@ > > > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > > > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > > > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > > > + if (__builtin_constant_p(number)) \ > > > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > > > + : /* no outputs */ \ > > > + : "i" (number) \ > > > + : "eax"); = \ > > > asm volatile ( = \ > > > "syscall\n\t" = \ > > > : "=3Da" (resultvar) = \ > > > -- > > > 2.39.2 > > > > > > > Won't the compiler load EAX twice when number is a constant? > > > > Yes. I'll have a new version combining the two asm sections into one > like for aarch64 soon. > > Joe > There is no need for __builtin_constant_p. Please try this. --=20 H.J. --0000000000001daace05f98c814a Content-Type: text/x-patch; charset="US-ASCII"; name="syscall.patch" Content-Disposition: attachment; filename="syscall.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lgl6hvnj0 ZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9zeXNkZXAuaCBiL3N5 c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9zeXNkZXAuaAppbmRleCBjZmI1MWJlOGM1Li41 ODk3NWJkZjNmIDEwMDY0NAotLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvc3lz ZGVwLmgKKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L3N5c2RlcC5oCkBAIC0y NDMsOSArMjQzLDkgQEAKICh7CQkJCQkJCQkJXAogICAgIHVuc2lnbmVkIGxvbmcgaW50IHJlc3Vs dHZhcjsJCQkJCVwKICAgICBhc20gdm9sYXRpbGUgKAkJCQkJCQlcCi0gICAgInN5c2NhbGxcblx0 IgkJCQkJCQlcCisgICAgIm1vdiAlMSwgJWswXG5cdHN5c2NhbGxcblx0IgkJCQkJXAogICAgIDog Ij1hIiAocmVzdWx0dmFyKQkJCQkJCQlcCi0gICAgOiAiMCIgKG51bWJlcikJCQkJCQkJXAorICAg IDogImciIChudW1iZXIpCQkJCQkJCVwKICAgICA6ICJtZW1vcnkiLCBSRUdJU1RFUlNfQ0xPQkJF UkVEX0JZX1NZU0NBTEwpOwkJCVwKICAgICAobG9uZyBpbnQpIHJlc3VsdHZhcjsJCQkJCQlcCiB9 KQpAQCAtMjU3LDkgKzI1Nyw5IEBACiAgICAgVFlQRUZZIChhcmcxLCBfX2FyZzEpID0gQVJHSUZZ IChhcmcxKTsJCQkgCVwKICAgICByZWdpc3RlciBUWVBFRlkgKGFyZzEsIF9hMSkgYXNtICgicmRp IikgPSBfX2FyZzE7CQkJXAogICAgIGFzbSB2b2xhdGlsZSAoCQkJCQkJCVwKLSAgICAic3lzY2Fs bFxuXHQiCQkJCQkJCVwKKyAgICAibW92ICUxLCAlazBcblx0c3lzY2FsbFxuXHQiCQkJCQlcCiAg ICAgOiAiPWEiIChyZXN1bHR2YXIpCQkJCQkJCVwKLSAgICA6ICIwIiAobnVtYmVyKSwgInIiIChf YTEpCQkJCQkJXAorICAgIDogImciIChudW1iZXIpLCAiciIgKF9hMSkJCQkJCQlcCiAgICAgOiAi bWVtb3J5IiwgUkVHSVNURVJTX0NMT0JCRVJFRF9CWV9TWVNDQUxMKTsJCQlcCiAgICAgKGxvbmcg aW50KSByZXN1bHR2YXI7CQkJCQkJXAogfSkKQEAgLTI3Myw5ICsyNzMsOSBAQAogICAgIHJlZ2lz dGVyIFRZUEVGWSAoYXJnMiwgX2EyKSBhc20gKCJyc2kiKSA9IF9fYXJnMjsJCQlcCiAgICAgcmVn aXN0ZXIgVFlQRUZZIChhcmcxLCBfYTEpIGFzbSAoInJkaSIpID0gX19hcmcxOwkJCVwKICAgICBh c20gdm9sYXRpbGUgKAkJCQkJCQlcCi0gICAgInN5c2NhbGxcblx0IgkJCQkJCQlcCisgICAgIm1v diAlMSwgJWswXG5cdHN5c2NhbGxcblx0IgkJCQkJXAogICAgIDogIj1hIiAocmVzdWx0dmFyKQkJ CQkJCQlcCi0gICAgOiAiMCIgKG51bWJlciksICJyIiAoX2ExKSwgInIiIChfYTIpCQkJCVwKKyAg ICA6ICJnIiAobnVtYmVyKSwgInIiIChfYTEpLCAiciIgKF9hMikJCQkJXAogICAgIDogIm1lbW9y eSIsIFJFR0lTVEVSU19DTE9CQkVSRURfQllfU1lTQ0FMTCk7CQkJXAogICAgIChsb25nIGludCkg cmVzdWx0dmFyOwkJCQkJCVwKIH0pCkBAIC0yOTEsOSArMjkxLDkgQEAKICAgICByZWdpc3RlciBU WVBFRlkgKGFyZzIsIF9hMikgYXNtICgicnNpIikgPSBfX2FyZzI7CQkJXAogICAgIHJlZ2lzdGVy IFRZUEVGWSAoYXJnMSwgX2ExKSBhc20gKCJyZGkiKSA9IF9fYXJnMTsJCQlcCiAgICAgYXNtIHZv bGF0aWxlICgJCQkJCQkJXAotICAgICJzeXNjYWxsXG5cdCIJCQkJCQkJXAorICAgICJtb3YgJTEs ICVrMFxuXHRzeXNjYWxsXG5cdCIJCQkJCVwKICAgICA6ICI9YSIgKHJlc3VsdHZhcikJCQkJCQkJ XAotICAgIDogIjAiIChudW1iZXIpLCAiciIgKF9hMSksICJyIiAoX2EyKSwgInIiIChfYTMpCQkJ XAorICAgIDogImciIChudW1iZXIpLCAiciIgKF9hMSksICJyIiAoX2EyKSwgInIiIChfYTMpCQkJ XAogICAgIDogIm1lbW9yeSIsIFJFR0lTVEVSU19DTE9CQkVSRURfQllfU1lTQ0FMTCk7CQkJXAog ICAgIChsb25nIGludCkgcmVzdWx0dmFyOwkJCQkJCVwKIH0pCkBAIC0zMTEsOSArMzExLDkgQEAK ICAgICByZWdpc3RlciBUWVBFRlkgKGFyZzIsIF9hMikgYXNtICgicnNpIikgPSBfX2FyZzI7CQkJ XAogICAgIHJlZ2lzdGVyIFRZUEVGWSAoYXJnMSwgX2ExKSBhc20gKCJyZGkiKSA9IF9fYXJnMTsJ CQlcCiAgICAgYXNtIHZvbGF0aWxlICgJCQkJCQkJXAotICAgICJzeXNjYWxsXG5cdCIJCQkJCQkJ XAorICAgICJtb3YgJTEsICVrMFxuXHRzeXNjYWxsXG5cdCIJCQkJCVwKICAgICA6ICI9YSIgKHJl c3VsdHZhcikJCQkJCQkJXAotICAgIDogIjAiIChudW1iZXIpLCAiciIgKF9hMSksICJyIiAoX2Ey KSwgInIiIChfYTMpLCAiciIgKF9hNCkJCVwKKyAgICA6ICJnIiAobnVtYmVyKSwgInIiIChfYTEp LCAiciIgKF9hMiksICJyIiAoX2EzKSwgInIiIChfYTQpCQlcCiAgICAgOiAibWVtb3J5IiwgUkVH SVNURVJTX0NMT0JCRVJFRF9CWV9TWVNDQUxMKTsJCQlcCiAgICAgKGxvbmcgaW50KSByZXN1bHR2 YXI7CQkJCQkJXAogfSkKQEAgLTMzMyw5ICszMzMsOSBAQAogICAgIHJlZ2lzdGVyIFRZUEVGWSAo YXJnMiwgX2EyKSBhc20gKCJyc2kiKSA9IF9fYXJnMjsJCQlcCiAgICAgcmVnaXN0ZXIgVFlQRUZZ IChhcmcxLCBfYTEpIGFzbSAoInJkaSIpID0gX19hcmcxOwkJCVwKICAgICBhc20gdm9sYXRpbGUg KAkJCQkJCQlcCi0gICAgInN5c2NhbGxcblx0IgkJCQkJCQlcCisgICAgIm1vdiAlMSwgJWswXG5c dHN5c2NhbGxcblx0IgkJCQkJXAogICAgIDogIj1hIiAocmVzdWx0dmFyKQkJCQkJCQlcCi0gICAg OiAiMCIgKG51bWJlciksICJyIiAoX2ExKSwgInIiIChfYTIpLCAiciIgKF9hMyksICJyIiAoX2E0 KSwJCVwKKyAgICA6ICJnIiAobnVtYmVyKSwgInIiIChfYTEpLCAiciIgKF9hMiksICJyIiAoX2Ez KSwgInIiIChfYTQpLAkJXAogICAgICAgInIiIChfYTUpCQkJCQkJCQlcCiAgICAgOiAibWVtb3J5 IiwgUkVHSVNURVJTX0NMT0JCRVJFRF9CWV9TWVNDQUxMKTsJCQlcCiAgICAgKGxvbmcgaW50KSBy ZXN1bHR2YXI7CQkJCQkJXApAQCAtMzU4LDkgKzM1OCw5IEBACiAgICAgcmVnaXN0ZXIgVFlQRUZZ IChhcmcyLCBfYTIpIGFzbSAoInJzaSIpID0gX19hcmcyOwkJCVwKICAgICByZWdpc3RlciBUWVBF RlkgKGFyZzEsIF9hMSkgYXNtICgicmRpIikgPSBfX2FyZzE7CQkJXAogICAgIGFzbSB2b2xhdGls ZSAoCQkJCQkJCVwKLSAgICAic3lzY2FsbFxuXHQiCQkJCQkJCVwKKyAgICAibW92ICUxLCAlazBc blx0c3lzY2FsbFxuXHQiCQkJCQlcCiAgICAgOiAiPWEiIChyZXN1bHR2YXIpCQkJCQkJCVwKLSAg ICA6ICIwIiAobnVtYmVyKSwgInIiIChfYTEpLCAiciIgKF9hMiksICJyIiAoX2EzKSwgInIiIChf YTQpLAkJXAorICAgIDogImciIChudW1iZXIpLCAiciIgKF9hMSksICJyIiAoX2EyKSwgInIiIChf YTMpLCAiciIgKF9hNCksCQlcCiAgICAgICAiciIgKF9hNSksICJyIiAoX2E2KQkJCQkJCVwKICAg ICA6ICJtZW1vcnkiLCBSRUdJU1RFUlNfQ0xPQkJFUkVEX0JZX1NZU0NBTEwpOwkJCVwKICAgICAo bG9uZyBpbnQpIHJlc3VsdHZhcjsJCQkJCQlcCmRpZmYgLS1naXQgYS9zeXNkZXBzL3g4Nl82NC9u cHRsL3Rscy5oIGIvc3lzZGVwcy94ODZfNjQvbnB0bC90bHMuaAppbmRleCAxNDAzZjkzOWY3Li5m MjA2YjExMjk1IDEwMDY0NAotLS0gYS9zeXNkZXBzL3g4Nl82NC9ucHRsL3Rscy5oCisrKyBiL3N5 c2RlcHMveDg2XzY0L25wdGwvdGxzLmgKQEAgLTE0OSw5ICsxNDksOSBAQCBfU3RhdGljX2Fzc2Vy dCAob2Zmc2V0b2YgKHRjYmhlYWRfdCwgX19nbGliY191bnVzZWQyKSA9PSAweDgwLAogICAgICBf aGVhZC0+c2VsZiA9IF90aHJkZXNjcjsJCQkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAg ICAgIC8qIEl0IGlzIGEgc2ltcGxlIHN5c2NhbGwgdG8gc2V0IHRoZSAlZnMgdmFsdWUgZm9yIHRo ZSB0aHJlYWQuICAqLwkgICAgICBcCi0gICAgIGFzbSB2b2xhdGlsZSAoInN5c2NhbGwiCQkJCQkJ ICAgICAgXAorICAgICBhc20gdm9sYXRpbGUgKCJtb3YgJTEsICVrMFxuXHRzeXNjYWxsIgkJCQkg ICAgICBcCiAJCSAgIDogIj1hIiAoX3Jlc3VsdCkJCQkJCSAgICAgIFwKLQkJICAgOiAiMCIgKCh1 bnNpZ25lZCBsb25nIGludCkgX19OUl9hcmNoX3ByY3RsKSwJCSAgICAgIFwKKwkJICAgOiAiaSIg KF9fTlJfYXJjaF9wcmN0bCksCQkJCSAgICAgIFwKIAkJICAgICAiRCIgKCh1bnNpZ25lZCBsb25n IGludCkgQVJDSF9TRVRfRlMpLAkJICAgICAgXAogCQkgICAgICJTIiAoX3RocmRlc2NyKQkJCQkJ ICAgICAgXAogCQkgICA6ICJtZW1vcnkiLCAiY2MiLCAicjExIiwgImN4Iik7CQkJICAgICAgXAo= --0000000000001daace05f98c814a--