From patchwork Thu Jan 4 20:32:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 759871 Delivered-To: patch@linaro.org Received: by 2002:a5d:67c6:0:b0:336:6142:bf13 with SMTP id n6csp7170087wrw; Thu, 4 Jan 2024 12:32:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IH2z0d/0kqYRw5Pe0WTCiY+ySB60pP6Vv7JkKBqhoVgiXiB8MOOSF1QOXu9rbbW16hU1rih X-Received: by 2002:ac8:5d8f:0:b0:428:1dd3:500e with SMTP id d15-20020ac85d8f000000b004281dd3500emr1229444qtx.43.1704400358823; Thu, 04 Jan 2024 12:32:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1704400358; cv=pass; d=google.com; s=arc-20160816; b=vcDYKUpC8cM9F/wp91X17M+Pq4cOV1kyDzoGxZJZylzLstDackWtd8Ore8x4q1A1mr 0l79nmpR//4qyEAn31/kNnNxmtpVfZMMnS3kBEyfay4qzvdBY0O7SBsiCr2zHZ7vjS6a LzvGnqj7Uziom+O2WTJ3sGjndnLIgF+7u3zj4nJtQiBYAnX/Y61J54ZxxSP1S72xbjiu rhsYhWq1Yb/tZiKqvXXnK+j5Ym33d4Ug/PkSBWxrkl7vMnoVx7g39/qLX5afD4EkhNWC Zx8rS/MOsJta0ubOoyBdP6Lh2rT55hjF2211hNvwHeC6d/pqBOirXEUeQUmiwXzdB7fU AMHQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=WqdP86wpprqPCuLI4tGoVKoTR/SScPtmffCea0fcQZ4=; fh=qNpUks/TopiPZxY8eC/gxlafjz4HRhxj0r0Qc3ttvcE=; b=ILw1zT1F2+SahPd4iUVNhac2A0iOrfxLjk+b7u7CUNdo6b5IOioSnsAvsrONTG2LWr odfEAIaz6cqn90JyClFLYarfP4eyF/GtVENwZaBNFqMfbAFwyGNmVVB3YjvStTXtKDCh oY7yQ6QvG2ws9A2KtTMnlRMkJcNF/CdK/28L2U0cnRcZzOZ5LihktwRz+l+/npQ+IpJF nzgA4HQR6GVcumFGEWY1NYk9qlmMPPftgPn8JQFHGZn3Qsqf28koGMxWB32UfxV3yGjd 1RAqA4YAhgiM4Ckjllb9Kj6/amKT4JEYtjTKsbPQ09vflnMgf6oi0w4n4o0QXkN+mjVP xaAQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XKLQXFRL; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id v20-20020a05622a145400b00427920eb456si268912qtx.716.2024.01.04.12.32.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 12:32:38 -0800 (PST) Received-SPF: pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XKLQXFRL; arc=pass (i=1); spf=pass (google.com: domain of libc-alpha-bounces+patch=linaro.org@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="libc-alpha-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6D2CD3861010 for ; Thu, 4 Jan 2024 20:32:38 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id A29093861025 for ; Thu, 4 Jan 2024 20:32:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A29093861025 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A29093861025 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::631 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704400346; cv=none; b=u5NQBancHJwVZBa9P3YQClr17mRal5FKE/NqJnNHQqa2InTxn9wy6XjLCS+lOHRm1vWVxDib1aSxWXUT/cV5UjkRhAnMkEkHAlCrPKij6PINZYoJVcqsHG3km7gASNngZ2sX/VeRd1rF8Di0NZTGzNKEuATMuZmHEPt9aHUaetU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704400346; c=relaxed/simple; bh=4yLhkGjYD0GT7nm4SRlX2lHOw6YwOf7VTxYLlabe3DA=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=KaJGUL6ajsHFPybP6CqtZu0Lx7x4IpVHUkMd70SYIJ/6OQA7IYw13i71F39Icz27N1G9z+xQMgXPttET4oVGAnIjPZBzqWudM6SFisVPtsAuwGxaehmpbtQaeeiv9G1KkpyP/li28BYtmWVFpV1UrFMIChVDOjedfDYokxYmK1M= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-1d3f29fea66so6202855ad.3 for ; Thu, 04 Jan 2024 12:32:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1704400337; x=1705005137; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=WqdP86wpprqPCuLI4tGoVKoTR/SScPtmffCea0fcQZ4=; b=XKLQXFRLqVsk8Bcr0G0JB0M++2LvVeF6nzEnCfrQyIil8B4vSvXIT2ESolRpwe0iz4 pLBxciOVO4kYWy1kE2kVe+phymqrrHGAc87G20Byrzf91Bvw+ksYowbN74yidmMliM3f Tra9H/3Ko1FBU7JK0emZDLRhOYNtKuoCW870cncudKJWzqhjn+klygUBsERCCqRHVzy1 Yb7qDSrbdhwYkZcUMOBRtDDcTMCEq2RgaZxvTDKZauWzPthHON3jb/ggRzlFAAV+2b1B 9/T9WKcVf9Y5Dzj0twrm8mJiG19nxIFj9QuO9lePuvaeFNsHHNlGvV9JBmMD4nu2/zFb BKAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704400337; x=1705005137; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WqdP86wpprqPCuLI4tGoVKoTR/SScPtmffCea0fcQZ4=; b=SeeTM4csYdYF42LYiS8vlGfscUeC1eWrd6ujdsPzJqEqiV4JUazMZ02JvXa9LvFuBl L1QgHHVX3IQOtDfLCHcftHJRfQCHKSBaoaFxiFonDbAH6FC81+6pf+XE91O6l0O6AYVT Ag9+DsHQMnYyKbFBiNiYSszMTIakxneryDQcEKAzjgaSqWUIZUqRr8hCgcmlpj+AcB6k Zak3DggFBbvrRBSdMjBQh+cRYAj5k9ItPBAyhFLuqXKpYGuqMq70rv8RuCh1qfqLhKVv Xr0j3wjzOXKp5RDbA9OVmSDNLwzzzvD3r8uDumudEhADUiSdgOrf556zdkbbG15SssWI U2TA== X-Gm-Message-State: AOJu0YzDZVB48baBtR51RotbmaIFlqd4u3wR4qBLnXmvAHOpwleFbYDV 5KnpqU0BtSSgUZcEJD1CnjMoZiTZsMm1e/qrcPZnCqrRCLg= X-Received: by 2002:a17:903:2b06:b0:1d4:7863:7580 with SMTP id mc6-20020a1709032b0600b001d478637580mr1338440plb.109.1704400335204; Thu, 04 Jan 2024 12:32:15 -0800 (PST) Received: from mandiga.. ([2804:1b3:a7c1:bd9:e135:8c7a:c648:e012]) by smtp.gmail.com with ESMTPSA id e19-20020a63db13000000b005b18c53d73csm101944pgg.16.2024.01.04.12.32.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 12:32:14 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Cc: "H . J . Lu" , Noah Goldstein Subject: [PATCH] x86: Move CET infrastructure to x86_64 Date: Thu, 4 Jan 2024 17:32:09 -0300 Message-Id: <20240104203209.3147383-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_NONE, SCC_5_SHORT_WORD_LINES, 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 X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patch=linaro.org@sourceware.org And removes i686 support now that CET is x86_64 only. It essentially removes the i386 support from: - faaee1f07ed (x86: Support shadow stack pointer in setjmp/longjmp). - be9ccd27c09 (i386: Add _CET_ENDBR to indirect jump targets in) add_n.S/sub_n.S). - faaee1f07ed (x86: Support shadow stack pointer in setjmp/longjmp). - c02695d7764 (x86/CET: Update vfork to prevent child return). - c02695d7764 (x86: Update vfork to pop shadow stack). And move the Makefile and tests from the generic x86 folder to x86_64 one. The --enable-cet now issues an error with i686-linux-gnu. Checked on x86_64-linux-gnu and i686-linux-gnu. --- INSTALL | 3 +- NEWS | 4 +- manual/install.texi | 3 +- sysdeps/i386/__longjmp.S | 73 ------ sysdeps/i386/add_n.S | 25 -- sysdeps/i386/bsd-_setjmp.S | 21 -- sysdeps/i386/bsd-setjmp.S | 21 -- sysdeps/i386/configure | 8 +- sysdeps/i386/configure.ac | 7 +- sysdeps/i386/i686/add_n.S | 25 -- sysdeps/i386/setjmp.S | 21 -- sysdeps/i386/sub_n.S | 24 -- .../unix/sysv/linux/i386/____longjmp_chk.S | 38 --- sysdeps/unix/sysv/linux/i386/getcontext.S | 56 ----- sysdeps/unix/sysv/linux/i386/makecontext.S | 123 --------- sysdeps/unix/sysv/linux/i386/setcontext.S | 101 +------- sysdeps/unix/sysv/linux/i386/swapcontext.S | 139 ---------- sysdeps/unix/sysv/linux/i386/sysdep.h | 5 - sysdeps/unix/sysv/linux/i386/ucontext_i.sym | 4 - sysdeps/unix/sysv/linux/i386/vfork.S | 23 -- sysdeps/unix/sysv/linux/x86/Makefile | 27 -- sysdeps/unix/sysv/linux/x86_64/Makefile | 27 ++ .../{x86 => x86_64}/tst-cet-property-1.c | 0 .../{x86 => x86_64}/tst-cet-property-2.c | 0 .../{x86 => x86_64}/tst-cet-property-dep-2.S | 0 .../{x86 => x86_64}/tst-cet-setcontext-1.c | 0 .../linux/{x86 => x86_64}/tst-cet-vfork-1.c | 0 sysdeps/x86/Makefile | 238 ------------------ sysdeps/x86_64/Makefile | 238 ++++++++++++++++++ sysdeps/{x86 => x86_64}/tst-cet-legacy-1.c | 0 .../tst-cet-legacy-10-static.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-10.c | 0 .../tst-cet-legacy-10a-static.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-10a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-1a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-2.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-2a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-3.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-4.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-4a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-4b.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-4c.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-5.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-5a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-5b.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-6.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-6a.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-6b.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-7.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-8.c | 0 .../{x86 => x86_64}/tst-cet-legacy-9-static.c | 0 sysdeps/{x86 => x86_64}/tst-cet-legacy-9.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-1.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-2.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-4.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-5.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-5a.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-5b.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-5c.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-6.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-6a.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-6b.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-6c.c | 0 .../{x86 => x86_64}/tst-cet-legacy-mod-6d.c | 0 sysdeps/{x86 => x86_64}/tst-setjmp-cet.c | 0 .../tst-shstk-legacy-1-extra.S | 0 .../tst-shstk-legacy-1a-static.c | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1a.c | 0 .../tst-shstk-legacy-1b-static.c | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1b.c | 0 .../tst-shstk-legacy-1c-static.c | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1c.c | 0 .../tst-shstk-legacy-1d-static.c | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1d.c | 0 .../tst-shstk-legacy-1e-static.c | 0 .../tst-shstk-legacy-1e-static.sh | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1e.c | 0 .../{x86 => x86_64}/tst-shstk-legacy-1e.sh | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1f.c | 0 sysdeps/{x86 => x86_64}/tst-shstk-legacy-1g.c | 0 .../{x86 => x86_64}/tst-shstk-legacy-1g.sh | 0 .../{x86 => x86_64}/tst-shstk-legacy-mod-1.c | 0 82 files changed, 280 insertions(+), 974 deletions(-) rename sysdeps/unix/sysv/linux/{x86 => x86_64}/tst-cet-property-1.c (100%) rename sysdeps/unix/sysv/linux/{x86 => x86_64}/tst-cet-property-2.c (100%) rename sysdeps/unix/sysv/linux/{x86 => x86_64}/tst-cet-property-dep-2.S (100%) rename sysdeps/unix/sysv/linux/{x86 => x86_64}/tst-cet-setcontext-1.c (100%) rename sysdeps/unix/sysv/linux/{x86 => x86_64}/tst-cet-vfork-1.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-1.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-10-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-10.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-10a-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-10a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-1a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-2.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-2a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-3.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-4.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-4a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-4b.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-4c.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-5.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-5a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-5b.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-6.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-6a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-6b.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-7.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-8.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-9-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-9.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-1.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-2.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-4.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-5.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-5a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-5b.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-5c.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-6.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-6a.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-6b.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-6c.c (100%) rename sysdeps/{x86 => x86_64}/tst-cet-legacy-mod-6d.c (100%) rename sysdeps/{x86 => x86_64}/tst-setjmp-cet.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1-extra.S (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1a-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1a.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1b-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1b.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1c-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1c.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1d-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1d.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1e-static.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1e-static.sh (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1e.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1e.sh (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1f.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1g.c (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-1g.sh (100%) rename sysdeps/{x86 => x86_64}/tst-shstk-legacy-mod-1.c (100%) diff --git a/INSTALL b/INSTALL index be3697c62f..f194f14ec2 100644 --- a/INSTALL +++ b/INSTALL @@ -147,8 +147,7 @@ if ‘CFLAGS’ is specified it must enable optimization. For example: ‘--enable-cet=permissive’, CET is disabled when dlopening a non CET enabled shared library in CET enabled application. - NOTE: ‘--enable-cet’ has been tested for x86_64 and x32 on non-CET - and CET processors. + NOTE: ‘--enable-cet’ is only supported on x86_64 and x32. ‘--enable-memory-tagging’ Enable memory tagging support if the architecture supports it. diff --git a/NEWS b/NEWS index 17110e7b88..d75798a15b 100644 --- a/NEWS +++ b/NEWS @@ -9,8 +9,8 @@ Version 2.39 Major new features: -* Sync with Linux kernel 6.6 shadow stack interface. Since only x86-64 - is supported, --enable-cet is ignored for i386. +* Sync with Linux kernel 6.6 shadow stack interface. The --enable-cet + configure option in only supported on x86-64. * struct statvfs now has an f_type member, equal to the f_type statfs member; on the Hurd this was always available under a reserved name, diff --git a/manual/install.texi b/manual/install.texi index f752f6489d..ccfa16fde3 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -175,8 +175,7 @@ enabled shared library in CET enabled application. With @option{--enable-cet=permissive}, CET is disabled when dlopening a non CET enabled shared library in CET enabled application. -NOTE: @option{--enable-cet} has been tested for x86_64 and x32 -on non-CET and CET processors. +NOTE: @option{--enable-cet} is only supported on x86_64 and x32. @item --enable-memory-tagging Enable memory tagging support if the architecture supports it. When diff --git a/sysdeps/i386/__longjmp.S b/sysdeps/i386/__longjmp.S index 302c00ac62..bb83609d57 100644 --- a/sysdeps/i386/__longjmp.S +++ b/sysdeps/i386/__longjmp.S @@ -19,55 +19,14 @@ #include #include #include -#include #include #include -/* Don't restore shadow stack register if - 1. Shadow stack isn't enabled. Or - 2. __longjmp is defined for __longjmp_cancel. - */ -#if !SHSTK_ENABLED || defined __longjmp -# undef SHADOW_STACK_POINTER_OFFSET -#endif - .text ENTRY (__longjmp) #ifdef PTR_DEMANGLE movl 4(%esp), %eax /* User's jmp_buf in %eax. */ -# ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# else - xorl %edx, %edx -# endif - /* Check and adjust the Shadow-Stack-Pointer. */ - rdsspd %edx - /* And compare it with the saved ssp value. */ - subl SHADOW_STACK_POINTER_OFFSET(%eax), %edx - je L(skip_ssp) - /* Count the number of frames to adjust and adjust it - with incssp instruction. The instruction can adjust - the ssp by [0..255] value only thus use a loop if - the number of frames is bigger than 255. */ - negl %edx - shrl $2, %edx - /* NB: We saved Shadow-Stack-Pointer of setjmp. Since we are - restoring Shadow-Stack-Pointer of setjmp's caller, we - need to unwind shadow stack by one more frame. */ - addl $1, %edx - movl $255, %ebx -L(loop): - cmpl %ebx, %edx - cmovb %edx, %ebx - incsspd %ebx - subl %ebx, %edx - ja L(loop) -L(skip_ssp): -# endif /* Save the return address now. */ movl (JB_PC*4)(%eax), %edx /* Get the stack pointer. */ @@ -98,38 +57,6 @@ L(skip_ssp): #else movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ movl 8(%esp), %eax /* Second argument is return value. */ -# ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# endif - /* Check and adjust the Shadow-Stack-Pointer. */ - xorl %edx, %edx - /* Get the current ssp. */ - rdsspd %edx - /* And compare it with the saved ssp value. */ - subl SHADOW_STACK_POINTER_OFFSET(%ecx), %edx - je L(skip_ssp) - /* Count the number of frames to adjust and adjust it - with incssp instruction. The instruction can adjust - the ssp by [0..255] value only thus use a loop if - the number of frames is bigger than 255. */ - negl %edx - shrl $2, %edx - /* NB: We saved Shadow-Stack-Pointer of setjmp. Since we are - restoring Shadow-Stack-Pointer of setjmp's caller, we - need to unwind shadow stack by one more frame. */ - addl $1, %edx - movl $255, %ebx -L(loop): - cmpl %ebx, %edx - cmovb %edx, %ebx - incsspd %ebx - subl %ebx, %edx - ja L(loop) -L(skip_ssp): -# endif /* Save the return address now. */ movl (JB_PC*4)(%ecx), %edx LIBC_PROBE (longjmp, 3, 4@%ecx, -4@%eax, 4@%edx) diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S index d4af6d92ec..c1b7098b1c 100644 --- a/sysdeps/i386/add_n.S +++ b/sysdeps/i386/add_n.S @@ -40,13 +40,6 @@ ENTRY (__mpn_add_n) cfi_rel_offset (esi, 0) movl S2(%esp),%edx movl SIZE(%esp),%ecx - -#if IBT_ENABLED - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) -#endif - movl %ecx,%eax shrl $3,%ecx /* compute count for unrolled loop */ negl %eax @@ -58,9 +51,6 @@ ENTRY (__mpn_add_n) subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ -#if IBT_ENABLED - leal -4(,%eax,4),%ebx /* Count for 4-byte endbr32 */ -#endif #ifdef PIC /* Calculate start address in loop for PIC. Due to limitations in some assemblers, Loop-L0-3 cannot be put into the leal */ @@ -74,40 +64,30 @@ L(0): leal (%eax,%eax,8),%eax #else /* Calculate start address in loop for non-PIC. */ leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif -#if IBT_ENABLED - addl %ebx,%eax /* Adjust for endbr32 */ #endif jmp *%eax /* jump into loop */ ALIGN (3) L(oop): movl (%esi),%eax adcl (%edx),%eax movl %eax,(%edi) - _CET_ENDBR movl 4(%esi),%eax adcl 4(%edx),%eax movl %eax,4(%edi) - _CET_ENDBR movl 8(%esi),%eax adcl 8(%edx),%eax movl %eax,8(%edi) - _CET_ENDBR movl 12(%esi),%eax adcl 12(%edx),%eax movl %eax,12(%edi) - _CET_ENDBR movl 16(%esi),%eax adcl 16(%edx),%eax movl %eax,16(%edi) - _CET_ENDBR movl 20(%esi),%eax adcl 20(%edx),%eax movl %eax,20(%edi) - _CET_ENDBR movl 24(%esi),%eax adcl 24(%edx),%eax movl %eax,24(%edi) - _CET_ENDBR movl 28(%esi),%eax adcl 28(%edx),%eax movl %eax,28(%edi) @@ -120,11 +100,6 @@ L(oop): movl (%esi),%eax sbbl %eax,%eax negl %eax -#if IBT_ENABLED - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#endif popl %esi cfi_adjust_cfa_offset (-4) cfi_restore (esi) diff --git a/sysdeps/i386/bsd-_setjmp.S b/sysdeps/i386/bsd-_setjmp.S index eb3ac9c8e9..5fd671a477 100644 --- a/sysdeps/i386/bsd-_setjmp.S +++ b/sysdeps/i386/bsd-_setjmp.S @@ -23,18 +23,12 @@ #include #include #include -#include #include #define PARMS 4 /* no space for saved regs */ #define JMPBUF PARMS #define SIGMSK JMPBUF+4 -/* Don't save shadow stack register if shadow stack isn't enabled. */ -#if !SHSTK_ENABLED -# undef SHADOW_STACK_POINTER_OFFSET -#endif - ENTRY (_setjmp) xorl %eax, %eax @@ -58,21 +52,6 @@ ENTRY (_setjmp) movl %ebp, (JB_BP*4)(%edx) /* Save caller's frame pointer. */ movl %eax, JB_SIZE(%edx) /* No signal mask set. */ -#ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# else - xorl %ecx, %ecx -# endif - /* Get the current Shadow-Stack-Pointer and save it. */ - rdsspd %ecx - movl %ecx, SHADOW_STACK_POINTER_OFFSET(%edx) -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET -L(skip_ssp): -# endif -#endif ret END (_setjmp) libc_hidden_def (_setjmp) diff --git a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S index c03f235d0f..13338a6480 100644 --- a/sysdeps/i386/bsd-setjmp.S +++ b/sysdeps/i386/bsd-setjmp.S @@ -23,18 +23,12 @@ #include #include #include -#include #include #define PARMS 4 /* no space for saved regs */ #define JMPBUF PARMS #define SIGMSK JMPBUF+4 -/* Don't save shadow stack register if shadow stack isn't enabled. */ -#if !SHSTK_ENABLED -# undef SHADOW_STACK_POINTER_OFFSET -#endif - ENTRY (setjmp) /* Note that we have to use a non-exported symbol in the next jump since otherwise gas will emit it as a jump through the @@ -58,21 +52,6 @@ ENTRY (setjmp) #endif movl %ecx, (JB_PC*4)(%eax) movl %ebp, (JB_BP*4)(%eax) /* Save caller's frame pointer. */ -#ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# else - xorl %ecx, %ecx -# endif - /* Get the current Shadow-Stack-Pointer and save it. */ - rdsspd %ecx - movl %ecx, SHADOW_STACK_POINTER_OFFSET(%eax) -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET -L(skip_ssp): -# endif -#endif /* Call __sigjmp_save. */ pushl $1 diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure index cd63d314fa..84656cef6e 100644 --- a/sysdeps/i386/configure +++ b/sysdeps/i386/configure @@ -1,10 +1,10 @@ # This file is generated from configure.ac by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/i386. -# CET is only supported for x86-64. Set enable-cet to "no" to allow -# "ifneq ($(enable-cet),no)" in x86 Makefiles. -config_vars="$config_vars -enable-cet = "no"" +# CET is only supported for x86-64. +if test $enable_cet != no; then + as_fn_error $? "\"CET is only supported on x86_64 or x32\"" "$LINENO" 5 +fi # We no longer support i386 since it lacks the atomic instructions # required to implement NPTL threading. diff --git a/sysdeps/i386/configure.ac b/sysdeps/i386/configure.ac index b7d9436557..7f68e6210a 100644 --- a/sysdeps/i386/configure.ac +++ b/sysdeps/i386/configure.ac @@ -1,9 +1,10 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/i386. -# CET is only supported for x86-64. Set enable-cet to "no" to allow -# "ifneq ($(enable-cet),no)" in x86 Makefiles. -LIBC_CONFIG_VAR([enable-cet], ["no"]) +# CET is only supported for x86-64. +if test $enable_cet != no; then + AC_MSG_ERROR(["CET is only supported on x86_64 or x32"]) +fi # We no longer support i386 since it lacks the atomic instructions # required to implement NPTL threading. diff --git a/sysdeps/i386/i686/add_n.S b/sysdeps/i386/i686/add_n.S index c2bc798187..bbc0cc71a2 100644 --- a/sysdeps/i386/i686/add_n.S +++ b/sysdeps/i386/i686/add_n.S @@ -44,13 +44,6 @@ ENTRY (__mpn_add_n) cfi_rel_offset (esi, 0) movl S2(%esp),%edx movl SIZE(%esp),%ecx - -#if IBT_ENABLED - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) -#endif - movl %ecx,%eax shrl $3,%ecx /* compute count for unrolled loop */ negl %eax @@ -62,9 +55,6 @@ ENTRY (__mpn_add_n) subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ -#if IBT_ENABLED - leal -4(,%eax,4),%ebx /* Count for 4-byte endbr32 */ -#endif #ifdef PIC /* Calculate start address in loop for PIC. */ leal (L(oop)-L(0)-3)(%eax,%eax,8),%eax @@ -73,40 +63,30 @@ L(0): #else /* Calculate start address in loop for non-PIC. */ leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif -#if IBT_ENABLED - addl %ebx,%eax /* Adjust for endbr32 */ #endif jmp *%eax /* jump into loop */ ALIGN (3) L(oop): movl (%esi),%eax adcl (%edx),%eax movl %eax,(%edi) - _CET_ENDBR movl 4(%esi),%eax adcl 4(%edx),%eax movl %eax,4(%edi) - _CET_ENDBR movl 8(%esi),%eax adcl 8(%edx),%eax movl %eax,8(%edi) - _CET_ENDBR movl 12(%esi),%eax adcl 12(%edx),%eax movl %eax,12(%edi) - _CET_ENDBR movl 16(%esi),%eax adcl 16(%edx),%eax movl %eax,16(%edi) - _CET_ENDBR movl 20(%esi),%eax adcl 20(%edx),%eax movl %eax,20(%edi) - _CET_ENDBR movl 24(%esi),%eax adcl 24(%edx),%eax movl %eax,24(%edi) - _CET_ENDBR movl 28(%esi),%eax adcl 28(%edx),%eax movl %eax,28(%edi) @@ -119,11 +99,6 @@ L(oop): movl (%esi),%eax sbbl %eax,%eax negl %eax -#if IBT_ENABLED - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#endif popl %esi cfi_adjust_cfa_offset (-4) cfi_restore (esi) diff --git a/sysdeps/i386/setjmp.S b/sysdeps/i386/setjmp.S index ab1a8090cb..08a98f2388 100644 --- a/sysdeps/i386/setjmp.S +++ b/sysdeps/i386/setjmp.S @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -27,11 +26,6 @@ #define JMPBUF PARMS #define SIGMSK JMPBUF+4 -/* Don't save shadow stack register if shadow stack isn't enabled. */ -#if !SHSTK_ENABLED -# undef SHADOW_STACK_POINTER_OFFSET -#endif - ENTRY (__sigsetjmp) movl JMPBUF(%esp), %eax @@ -53,21 +47,6 @@ ENTRY (__sigsetjmp) movl %ecx, (JB_PC*4)(%eax) movl %ebp, (JB_BP*4)(%eax) /* Save caller's frame pointer. */ -#ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# else - xorl %ecx, %ecx -# endif - /* Get the current Shadow-Stack-Pointer and save it. */ - rdsspd %ecx - movl %ecx, SHADOW_STACK_POINTER_OFFSET(%eax) -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET -L(skip_ssp): -# endif -#endif #if IS_IN (rtld) /* In ld.so we never save the signal mask. */ xorl %eax, %eax diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S index 3ebe984672..f463bec9ff 100644 --- a/sysdeps/i386/sub_n.S +++ b/sysdeps/i386/sub_n.S @@ -40,13 +40,6 @@ ENTRY (__mpn_sub_n) cfi_rel_offset (esi, 0) movl S2(%esp),%edx movl SIZE(%esp),%ecx - -#if IBT_ENABLED - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) -#endif - movl %ecx,%eax shrl $3,%ecx /* compute count for unrolled loop */ negl %eax @@ -58,9 +51,6 @@ ENTRY (__mpn_sub_n) subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ -#if defined __CET__ && (__CET__ & 1) != 0 - leal -4(,%eax,4),%ebx /* Count for 4-byte endbr32 */ -#endif #ifdef PIC /* Calculate start address in loop for PIC. Due to limitations in some assemblers, Loop-L0-3 cannot be put into the leal */ @@ -74,20 +64,15 @@ L(0): leal (%eax,%eax,8),%eax #else /* Calculate start address in loop for non-PIC. */ leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif -#if defined __CET__ && (__CET__ & 1) != 0 - addl %ebx,%eax /* Adjust for endbr32 */ #endif jmp *%eax /* jump into loop */ ALIGN (3) L(oop): movl (%esi),%eax sbbl (%edx),%eax movl %eax,(%edi) - _CET_ENDBR movl 4(%esi),%eax sbbl 4(%edx),%eax movl %eax,4(%edi) - _CET_ENDBR movl 8(%esi),%eax sbbl 8(%edx),%eax movl %eax,8(%edi) @@ -95,19 +80,15 @@ L(oop): movl (%esi),%eax movl 12(%esi),%eax sbbl 12(%edx),%eax movl %eax,12(%edi) - _CET_ENDBR movl 16(%esi),%eax sbbl 16(%edx),%eax movl %eax,16(%edi) - _CET_ENDBR movl 20(%esi),%eax sbbl 20(%edx),%eax movl %eax,20(%edi) - _CET_ENDBR movl 24(%esi),%eax sbbl 24(%edx),%eax movl %eax,24(%edi) - _CET_ENDBR movl 28(%esi),%eax sbbl 28(%edx),%eax movl %eax,28(%edi) @@ -120,11 +101,6 @@ L(oop): movl (%esi),%eax sbbl %eax,%eax negl %eax -#if defined __CET__ && (__CET__ & 1) != 0 - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#endif popl %esi cfi_adjust_cfa_offset (-4) cfi_restore (esi) diff --git a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S index 0c49010f93..4ee66e8776 100644 --- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S @@ -18,15 +18,9 @@ #include #include #include -#include #include #include -/* Don't restore shadow stack register if shadow stack isn't enabled. */ -#if !SHSTK_ENABLED -# undef SHADOW_STACK_POINTER_OFFSET -#endif - .section .rodata.str1.1,"aMS",@progbits,1 .type longjmp_msg,@object longjmp_msg: @@ -52,38 +46,6 @@ longjmp_msg: ENTRY (____longjmp_chk) movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ -#ifdef SHADOW_STACK_POINTER_OFFSET -# if IS_IN (libc) && defined SHARED && defined FEATURE_1_OFFSET - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) -# else - xorl %edx, %edx -# endif - /* Check and adjust the Shadow-Stack-Pointer. */ - rdsspd %edx - /* And compare it with the saved ssp value. */ - subl SHADOW_STACK_POINTER_OFFSET(%ecx), %edx - je L(skip_ssp) - /* Count the number of frames to adjust and adjust it - with incssp instruction. The instruction can adjust - the ssp by [0..255] value only thus use a loop if - the number of frames is bigger than 255. */ - negl %edx - shrl $2, %edx - /* NB: We saved Shadow-Stack-Pointer of setjmp. Since we are - restoring Shadow-Stack-Pointer of setjmp's caller, we - need to unwind shadow stack by one more frame. */ - addl $1, %edx - movl $255, %ebx -L(loop): - cmpl %ebx, %edx - cmovb %edx, %ebx - incsspd %ebx - subl %ebx, %edx - ja L(loop) -L(skip_ssp): -#endif /* Save the return address now. */ movl (JB_PC*4)(%ecx), %edx /* Get the stack pointer. */ diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S index 3202ac002e..9c1ca3c263 100644 --- a/sysdeps/unix/sysv/linux/i386/getcontext.S +++ b/sysdeps/unix/sysv/linux/i386/getcontext.S @@ -17,7 +17,6 @@ . */ #include -#include #include "ucontext_i.h" @@ -42,61 +41,6 @@ ENTRY(__getcontext) movw %fs, %dx movl %edx, oFS(%eax) -#if SHSTK_ENABLED - /* Check if shadow stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(no_shstk) - - /* Save EAX in EDX. */ - movl %eax, %edx - - xorl %eax, %eax - cmpl %gs:SSP_BASE_OFFSET, %eax - jnz L(shadow_stack_bound_recorded) - - /* Save EBX in the first scratch register slot. */ - movl %ebx, oSCRATCH1(%edx) - - /* Get the base address and size of the default shadow stack - which must be the current shadow stack since nothing has - been recorded yet. */ - sub $24, %esp - mov %esp, %ecx - movl $ARCH_CET_STATUS, %ebx - movl $__NR_arch_prctl, %eax - ENTER_KERNEL - testl %eax, %eax - jz L(continue_no_err) - - /* This should never happen. */ - hlt - -L(continue_no_err): - /* Restore EBX from the first scratch register slot. */ - movl oSCRATCH1(%edx), %ebx - - /* Record the base of the current shadow stack. */ - movl 8(%esp), %eax - movl %eax, %gs:SSP_BASE_OFFSET - add $24, %esp - -L(shadow_stack_bound_recorded): - /* Load address of the context data structure. */ - movl 4(%esp), %eax - - /* Get the current shadow stack pointer. */ - rdsspd %edx - /* NB: Save the caller's shadow stack so that we can jump back - to the caller directly. */ - addl $4, %edx - movl %edx, oSSP(%eax) - - /* Save the current shadow stack base in ucontext. */ - movl %gs:SSP_BASE_OFFSET, %edx - movl %edx, (oSSP + 4)(%eax) - -L(no_shstk): -#endif /* We have separate floating-point register content memory on the stack. We use the __fpregs_mem block in the context. Set the links up correctly. */ diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S index 814127d130..7ee56300fa 100644 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ b/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -17,7 +17,6 @@ . */ #include -#include #include "ucontext_i.h" @@ -68,127 +67,6 @@ ENTRY(__makecontext) jnz 1b 2: -#if SHSTK_ENABLED - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(skip_ssp) - - /* Reload the pointer to ucontext. */ - movl 4(%esp), %eax - - /* Shadow stack is enabled. We need to allocate a new shadow - stack. */ - subl oSS_SP(%eax), %edx - shrl $STACK_SIZE_TO_SHADOW_STACK_SIZE_SHIFT, %edx - - /* Align shadow stack size to 8 bytes. */ - addl $7, %edx - andl $-8, %edx - - /* Store shadow stack size in __ssp[2]. */ - movl %edx, (oSSP + 8)(%eax) - - /* Save ESI in the second scratch register slot. */ - movl %esi, oSCRATCH2(%eax) - /* Save EDI in the third scratch register slot. */ - movl %edi, oSCRATCH3(%eax) - - /* Save the pointer to ucontext. */ - movl %eax, %edi - - /* Get the original shadow stack pointer. */ - rdsspd %esi - - /* Align the saved original shadow stack pointer to the next - 8 byte aligned boundary. */ - andl $-8, %esi - - /* Load the top of the new stack into EDX. */ - movl oESP(%eax), %edx - - /* We need to terminate the FDE here because the unwinder looks - at ra-1 for unwind information. */ - cfi_endproc - - /* Swap the original stack pointer with the top of the new - stack. */ - xchgl %esp, %edx - - /* Add 4 bytes since CALL will push the 4-byte return address - onto stack. */ - addl $4, %esp - - /* Allocate the new shadow stack. Save EBX in the first scratch - register slot. */ - movl %ebx, oSCRATCH1(%eax) - - /* CET syscall takes 64-bit sizes. */ - subl $16, %esp - movl (oSSP + 8)(%eax), %ecx - movl %ecx, (%esp) - movl $0, 4(%esp) - movl %ecx, 8(%esp) - movl $0, 12(%esp) - movl %esp, %ecx - - movl $ARCH_CET_ALLOC_SHSTK, %ebx - movl $__NR_arch_prctl, %eax - ENTER_KERNEL - testl %eax, %eax - jne L(hlt) /* This should never happen. */ - - /* Copy the base address of the new shadow stack to __ssp[1]. */ - movl (%esp), %eax - movl %eax, (oSSP + 4)(%edi) - - addl $16, %esp - - /* Restore EBX from the first scratch register slot. */ - movl oSCRATCH1(%edi), %ebx - - /* Get the size of the new shadow stack. */ - movl (oSSP + 8)(%edi), %ecx - - /* Use the restore stoken to restore the new shadow stack. */ - rstorssp -8(%eax, %ecx) - - /* Save the restore token at the next 8 byte aligned boundary - on the original shadow stack. */ - saveprevssp - - /* Push the address of "jmp exitcode" onto the new stack as - well as the new shadow stack. */ - call 1f - jmp L(exitcode) -1: - - /* Get the new shadow stack pointer. */ - rdsspd %eax - - /* Use the restore stoken to restore the original shadow stack. */ - rstorssp -8(%esi) - - /* Save the restore token on the new shadow stack. */ - saveprevssp - - /* Store the new shadow stack pointer in __ssp[0]. */ - movl %eax, oSSP(%edi) - - /* Restore the original stack. */ - mov %edx, %esp - - cfi_startproc - - /* Restore ESI from the second scratch register slot. */ - movl oSCRATCH2(%edi), %esi - /* Restore EDI from the third scratch register slot. */ - movl oSCRATCH3(%edi), %edi - - ret - -L(skip_ssp): -#endif - /* If the function we call returns we must continue with the context which is given in the uc_link element. To do this set the return address for the function the user provides @@ -244,7 +122,6 @@ L(call_exit): call HIDDEN_JUMPTARGET(exit) /* The 'exit' call should never return. In case it does cause the process to terminate. */ -L(hlt): hlt cfi_startproc END(__makecontext) diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S index 966fcbee1e..b6d827d11f 100644 --- a/sysdeps/unix/sysv/linux/i386/setcontext.S +++ b/sysdeps/unix/sysv/linux/i386/setcontext.S @@ -17,7 +17,6 @@ . */ #include -#include #include "ucontext_i.h" @@ -56,6 +55,9 @@ ENTRY(__setcontext) movl oFS(%eax), %ecx movw %cx, %fs + /* Fetch the address to return to. */ + movl oEIP(%eax), %ecx + /* Load the new stack pointer. */ cfi_def_cfa (eax, 0) cfi_offset (edi, oEDI) @@ -64,103 +66,6 @@ ENTRY(__setcontext) cfi_offset (ebx, oEBX) movl oESP(%eax), %esp -#if SHSTK_ENABLED - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(no_shstk) - - /* If the base of the target shadow stack is the same as the - base of the current shadow stack, we unwind the shadow - stack. Otherwise it is a stack switch and we look for a - restore token. */ - movl oSSP(%eax), %esi - movl %esi, %edi - - /* Get the base of the target shadow stack. */ - movl (oSSP + 4)(%eax), %ecx - cmpl %gs:SSP_BASE_OFFSET, %ecx - je L(unwind_shadow_stack) - - /* Align the saved original shadow stack pointer to the next - 8 byte aligned boundary. */ - andl $-8, %esi - -L(find_restore_token_loop): - /* Look for a restore token. */ - movl -8(%esi), %ebx - andl $-8, %ebx - cmpl %esi, %ebx - je L(restore_shadow_stack) - - /* Try the next slot. */ - subl $8, %esi - jmp L(find_restore_token_loop) - -L(restore_shadow_stack): - /* Pop return address from the shadow stack since setcontext - will not return. */ - movl $1, %ebx - incsspd %ebx - - /* Use the restore stoken to restore the target shadow stack. */ - rstorssp -8(%esi) - - /* Save the restore token on the old shadow stack. NB: This - restore token may be checked by setcontext or swapcontext - later. */ - saveprevssp - - /* Record the new shadow stack base that was switched to. */ - movl (oSSP + 4)(%eax), %ebx - movl %ebx, %gs:SSP_BASE_OFFSET - -L(unwind_shadow_stack): - rdsspd %ebx - subl %edi, %ebx - je L(skip_unwind_shadow_stack) - negl %ebx - shrl $2, %ebx - movl $255, %esi -L(loop): - cmpl %esi, %ebx - cmovb %ebx, %esi - incsspd %esi - subl %esi, %ebx - ja L(loop) - -L(skip_unwind_shadow_stack): - - /* Load the values of all the preserved registers (except ESP). */ - movl oEDI(%eax), %edi - movl oESI(%eax), %esi - movl oEBP(%eax), %ebp - movl oEBX(%eax), %ebx - - /* Get the return address set with getcontext. */ - movl oEIP(%eax), %ecx - - /* Check if return address is valid for the case when setcontext - is invoked from L(exitcode) with linked context. */ - rdsspd %eax - cmpl (%eax), %ecx - /* Clear EAX to indicate success. NB: Don't use xorl to keep - EFLAGS for jne. */ - movl $0, %eax - jne L(jmp) - /* Return to the new context if return address valid. */ - pushl %ecx - ret - -L(jmp): - /* Jump to the new context directly. */ - jmp *%ecx - -L(no_shstk): -#endif - - /* Fetch the address to return to. */ - movl oEIP(%eax), %ecx - /* Push the return address on the new stack so we can return there. */ pushl %ecx diff --git a/sysdeps/unix/sysv/linux/i386/swapcontext.S b/sysdeps/unix/sysv/linux/i386/swapcontext.S index b8367f025e..bb736ae7d2 100644 --- a/sysdeps/unix/sysv/linux/i386/swapcontext.S +++ b/sysdeps/unix/sysv/linux/i386/swapcontext.S @@ -17,7 +17,6 @@ . */ #include -#include #include "ucontext_i.h" @@ -76,144 +75,6 @@ ENTRY(__swapcontext) movl oFS(%eax), %edx movw %dx, %fs -#if SHSTK_ENABLED - /* Check if Shadow Stack is enabled. */ - testl $X86_FEATURE_1_SHSTK, %gs:FEATURE_1_OFFSET - jz L(no_shstk) - - xorl %eax, %eax - cmpl %gs:SSP_BASE_OFFSET, %eax - jnz L(shadow_stack_bound_recorded) - - /* Get the base address and size of the default shadow stack - which must be the current shadow stack since nothing has - been recorded yet. */ - sub $24, %esp - mov %esp, %ecx - movl $ARCH_CET_STATUS, %ebx - movl $__NR_arch_prctl, %eax - ENTER_KERNEL - testl %eax, %eax - jz L(continue_no_err) - - /* This should never happen. */ - hlt - -L(continue_no_err): - /* Record the base of the current shadow stack. */ - movl 8(%esp), %eax - movl %eax, %gs:SSP_BASE_OFFSET - add $24, %esp - -L(shadow_stack_bound_recorded): - /* Load address of the context data structure we save in. */ - movl 4(%esp), %eax - - /* Load address of the context data structure we swap in */ - movl 8(%esp), %edx - - /* If we unwind the stack, we can't undo stack unwinding. Just - save the target shadow stack pointer as the current shadow - stack pointer. */ - movl oSSP(%edx), %ecx - movl %ecx, oSSP(%eax) - - /* Save the current shadow stack base in ucontext. */ - movl %gs:SSP_BASE_OFFSET, %ecx - movl %ecx, (oSSP + 4)(%eax) - - /* If the base of the target shadow stack is the same as the - base of the current shadow stack, we unwind the shadow - stack. Otherwise it is a stack switch and we look for a - restore token. */ - movl oSSP(%edx), %esi - movl %esi, %edi - - /* Get the base of the target shadow stack. */ - movl (oSSP + 4)(%edx), %ecx - cmpl %gs:SSP_BASE_OFFSET, %ecx - je L(unwind_shadow_stack) - - /* Align the saved original shadow stack pointer to the next - 8 byte aligned boundary. */ - andl $-8, %esi - -L(find_restore_token_loop): - /* Look for a restore token. */ - movl -8(%esi), %ebx - andl $-8, %ebx - cmpl %esi, %ebx - je L(restore_shadow_stack) - - /* Try the next slot. */ - subl $8, %esi - jmp L(find_restore_token_loop) - -L(restore_shadow_stack): - /* The target shadow stack will be restored. Save the current - shadow stack pointer. */ - rdsspd %ecx - movl %ecx, oSSP(%eax) - - /* Use the restore stoken to restore the target shadow stack. */ - rstorssp -8(%esi) - - /* Save the restore token on the old shadow stack. NB: This - restore token may be checked by setcontext or swapcontext - later. */ - saveprevssp - - /* Record the new shadow stack base that was switched to. */ - movl (oSSP + 4)(%edx), %ebx - movl %ebx, %gs:SSP_BASE_OFFSET - -L(unwind_shadow_stack): - rdsspd %ebx - subl %edi, %ebx - je L(skip_unwind_shadow_stack) - negl %ebx - shrl $2, %ebx - movl $255, %esi -L(loop): - cmpl %esi, %ebx - cmovb %ebx, %esi - incsspd %esi - subl %esi, %ebx - ja L(loop) - -L(skip_unwind_shadow_stack): - - /* Load the new stack pointer. */ - movl oESP(%edx), %esp - - /* Load the values of all the preserved registers (except ESP). */ - movl oEDI(%edx), %edi - movl oESI(%edx), %esi - movl oEBP(%edx), %ebp - movl oEBX(%edx), %ebx - - /* Get the return address set with getcontext. */ - movl oEIP(%edx), %ecx - - /* Check if return address is valid for the case when setcontext - is invoked from L(exitcode) with linked context. */ - rdsspd %eax - cmpl (%eax), %ecx - /* Clear EAX to indicate success. NB: Don't use xorl to keep - EFLAGS for jne. */ - movl $0, %eax - jne L(jmp) - /* Return to the new context if return address valid. */ - pushl %ecx - ret - -L(jmp): - /* Jump to the new context directly. */ - jmp *%ecx - -L(no_shstk): -#endif - /* Fetch the address to return to. */ movl oEIP(%eax), %ecx diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 516a85ce12..25852f894e 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -446,9 +446,4 @@ struct libc_do_syscall_args #endif /* __ASSEMBLER__ */ -/* Each shadow stack slot takes 4 bytes. Assuming that each stack - frame takes 128 bytes, this is used to compute shadow stack size - from stack size. */ -#define STACK_SIZE_TO_SHADOW_STACK_SIZE_SHIFT 5 - #endif /* linux/i386/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/i386/ucontext_i.sym b/sysdeps/unix/sysv/linux/i386/ucontext_i.sym index 1d8608eafc..1dfe03d2cc 100644 --- a/sysdeps/unix/sysv/linux/i386/ucontext_i.sym +++ b/sysdeps/unix/sysv/linux/i386/ucontext_i.sym @@ -22,10 +22,6 @@ oEBP mreg (EBP) oESP mreg (ESP) oEBX mreg (EBX) oEIP mreg (EIP) -oSCRATCH1 mreg (EAX) -oSCRATCH2 mreg (ECX) -oSCRATCH3 mreg (EDX) oFPREGS mcontext (fpregs) oSIGMASK ucontext (uc_sigmask) oFPREGSMEM ucontext (__fpregs_mem) -oSSP ucontext (__ssp) diff --git a/sysdeps/unix/sysv/linux/i386/vfork.S b/sysdeps/unix/sysv/linux/i386/vfork.S index 80c2058f1e..ad85e0f096 100644 --- a/sysdeps/unix/sysv/linux/i386/vfork.S +++ b/sysdeps/unix/sysv/linux/i386/vfork.S @@ -46,29 +46,6 @@ ENTRY (__vfork) /* Branch forward if it failed. */ jae SYSCALL_ERROR_LABEL -#if SHSTK_ENABLED - /* Check if shadow stack is in use. */ - xorl %edx, %edx - rdsspd %edx - testl %edx, %edx - /* Normal return if shadow stack isn't in use. */ - je L(no_shstk) - - testl %eax, %eax - /* In parent, normal return. */ - jnz L(no_shstk) - - /* NB: In child, jump back to caller via indirect branch without - popping shadow stack which is shared with parent. Keep shadow - stack mismatched so that child returns in the vfork-calling - function will trigger SIGSEGV. */ - popl %ecx - cfi_adjust_cfa_offset (-4) - jmp *%ecx - -L(no_shstk): -#endif - ret PSEUDO_END (__vfork) diff --git a/sysdeps/unix/sysv/linux/x86/Makefile b/sysdeps/unix/sysv/linux/x86/Makefile index 9dfdd689a9..743b633b65 100644 --- a/sysdeps/unix/sysv/linux/x86/Makefile +++ b/sysdeps/unix/sysv/linux/x86/Makefile @@ -21,30 +21,3 @@ endif ifeq ($(subdir),setjmp) tests += tst-saved_mask-1 endif - -ifneq ($(enable-cet),no) -ifeq ($(subdir),elf) -tests += tst-cet-property-1 tst-cet-property-2 - -CFLAGS-tst-cet-property-1.o += -fcf-protection -ASFLAGS-tst-cet-property-dep-2.o += -fcf-protection - -$(objpfx)tst-cet-property-2: $(objpfx)tst-cet-property-dep-2.o -$(objpfx)tst-cet-property-2.out: $(objpfx)tst-cet-property-2 \ - $(objpfx)tst-cet-property-1.out - env $(run-program-env) $(test-via-rtld-prefix) \ - $(objpfx)tst-cet-property-2 \ - < $(objpfx)tst-cet-property-1.out > $@; \ - $(evaluate-test) -endif - -ifeq ($(subdir),posix) -tests += tst-cet-vfork-1 -CFLAGS-tst-cet-vfork-1.c += -mshstk -endif - -ifeq ($(subdir),stdlib) -tests += tst-cet-setcontext-1 -CFLAGS-tst-cet-setcontext-1.c += -mshstk -endif -endif diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile index 06b873949e..4223feb95f 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Makefile +++ b/sysdeps/unix/sysv/linux/x86_64/Makefile @@ -64,3 +64,30 @@ $(objpfx)libx86-64-isa-level.so: $(objpfx)libx86-64-isa-level-1.so cp $< $@ endif endif # $(subdir) == elf + +ifneq ($(enable-cet),no) +ifeq ($(subdir),elf) +tests += tst-cet-property-1 tst-cet-property-2 + +CFLAGS-tst-cet-property-1.o += -fcf-protection +ASFLAGS-tst-cet-property-dep-2.o += -fcf-protection + +$(objpfx)tst-cet-property-2: $(objpfx)tst-cet-property-dep-2.o +$(objpfx)tst-cet-property-2.out: $(objpfx)tst-cet-property-2 \ + $(objpfx)tst-cet-property-1.out + env $(run-program-env) $(test-via-rtld-prefix) \ + $(objpfx)tst-cet-property-2 \ + < $(objpfx)tst-cet-property-1.out > $@; \ + $(evaluate-test) +endif + +ifeq ($(subdir),posix) +tests += tst-cet-vfork-1 +CFLAGS-tst-cet-vfork-1.c += -mshstk +endif + +ifeq ($(subdir),stdlib) +tests += tst-cet-setcontext-1 +CFLAGS-tst-cet-setcontext-1.c += -mshstk +endif +endif diff --git a/sysdeps/unix/sysv/linux/x86/tst-cet-property-1.c b/sysdeps/unix/sysv/linux/x86_64/tst-cet-property-1.c similarity index 100% rename from sysdeps/unix/sysv/linux/x86/tst-cet-property-1.c rename to sysdeps/unix/sysv/linux/x86_64/tst-cet-property-1.c diff --git a/sysdeps/unix/sysv/linux/x86/tst-cet-property-2.c b/sysdeps/unix/sysv/linux/x86_64/tst-cet-property-2.c similarity index 100% rename from sysdeps/unix/sysv/linux/x86/tst-cet-property-2.c rename to sysdeps/unix/sysv/linux/x86_64/tst-cet-property-2.c diff --git a/sysdeps/unix/sysv/linux/x86/tst-cet-property-dep-2.S b/sysdeps/unix/sysv/linux/x86_64/tst-cet-property-dep-2.S similarity index 100% rename from sysdeps/unix/sysv/linux/x86/tst-cet-property-dep-2.S rename to sysdeps/unix/sysv/linux/x86_64/tst-cet-property-dep-2.S diff --git a/sysdeps/unix/sysv/linux/x86/tst-cet-setcontext-1.c b/sysdeps/unix/sysv/linux/x86_64/tst-cet-setcontext-1.c similarity index 100% rename from sysdeps/unix/sysv/linux/x86/tst-cet-setcontext-1.c rename to sysdeps/unix/sysv/linux/x86_64/tst-cet-setcontext-1.c diff --git a/sysdeps/unix/sysv/linux/x86/tst-cet-vfork-1.c b/sysdeps/unix/sysv/linux/x86_64/tst-cet-vfork-1.c similarity index 100% rename from sysdeps/unix/sysv/linux/x86/tst-cet-vfork-1.c rename to sysdeps/unix/sysv/linux/x86_64/tst-cet-vfork-1.c diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile index 5c8ab64c4d..bf913594c1 100644 --- a/sysdeps/x86/Makefile +++ b/sysdeps/x86/Makefile @@ -93,12 +93,6 @@ endif # $(subdir) == math ifeq ($(subdir),setjmp) gen-as-const-headers += jmp_buf-ssp.sym sysdep_routines += __longjmp_cancel -ifneq ($(enable-cet),no) -tests += \ - tst-setjmp-cet \ -# tests -tst-setjmp-cet-ENV = GLIBC_TUNABLES=glibc.cpu.x86_ibt=on:glibc.cpu.x86_shstk=on -endif endif ifeq ($(subdir),string) @@ -139,238 +133,6 @@ CFLAGS-tst-wcscmp-rtm.c += -mrtm CFLAGS-tst-wcsncmp-rtm.c += -mrtm -Wno-error endif -ifneq ($(enable-cet),no) -ifeq ($(subdir),elf) -sysdep-dl-routines += dl-cet - -tests += \ - tst-cet-legacy-1 \ - tst-cet-legacy-1a \ - tst-cet-legacy-2 \ - tst-cet-legacy-2a \ - tst-cet-legacy-3 \ - tst-cet-legacy-4 \ - tst-cet-legacy-5a \ - tst-cet-legacy-6a \ - tst-cet-legacy-7 \ - tst-cet-legacy-8 \ - tst-cet-legacy-9 \ - tst-cet-legacy-9-static \ - tst-cet-legacy-10 \ - tst-cet-legacy-10-static \ - tst-cet-legacy-10a \ - tst-cet-legacy-10a-static \ -# tests -tests-static += \ - tst-cet-legacy-9-static \ - tst-cet-legacy-10-static \ - tst-cet-legacy-10a-static \ -# tests-static -tst-cet-legacy-1a-ARGS = -- $(host-test-program-cmd) - -tests += \ - tst-shstk-legacy-1a \ - tst-shstk-legacy-1a-static \ - tst-shstk-legacy-1b \ - tst-shstk-legacy-1b-static \ - tst-shstk-legacy-1c \ - tst-shstk-legacy-1c-static \ - tst-shstk-legacy-1d \ - tst-shstk-legacy-1d-static \ - tst-shstk-legacy-1e \ - tst-shstk-legacy-1e-static \ - tst-shstk-legacy-1f \ - tst-shstk-legacy-1g \ -# tests -modules-names += \ - tst-shstk-legacy-mod-1 \ -# modules-names -tests-static += \ - tst-shstk-legacy-1a-static \ - tst-shstk-legacy-1b-static \ - tst-shstk-legacy-1c-static \ - tst-shstk-legacy-1d-static \ - tst-shstk-legacy-1e-static \ -# tests-static -extra-objs += \ - tst-shstk-legacy-1-extra.o \ -# extra-objs - -tests += \ - tst-cet-legacy-4a \ - tst-cet-legacy-4b \ - tst-cet-legacy-4c \ - tst-cet-legacy-5b \ - tst-cet-legacy-6b \ -# tests -modules-names += \ - tst-cet-legacy-mod-1 \ - tst-cet-legacy-mod-2 \ - tst-cet-legacy-mod-4 \ - tst-cet-legacy-mod-5a \ - tst-cet-legacy-mod-5b \ - tst-cet-legacy-mod-5c \ - tst-cet-legacy-mod-6a \ - tst-cet-legacy-mod-6b \ - tst-cet-legacy-mod-6c \ -# modules-names - -CFLAGS-tst-cet-legacy-2.c += -fcf-protection=none -fcf-protection=branch -CFLAGS-tst-cet-legacy-2a.c += -fcf-protection -CFLAGS-tst-cet-legacy-mod-1.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-mod-2.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-3.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-4.c += -fcf-protection=none -fcf-protection=branch -CPPFLAGS-tst-cet-legacy-4a.c += -DCET_IS_PERMISSIVE=1 -CFLAGS-tst-cet-legacy-4a.c += -fcf-protection -CFLAGS-tst-cet-legacy-4b.c += -fcf-protection -CFLAGS-tst-cet-legacy-mod-4.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-5a.c += -fcf-protection -mshstk -ifeq ($(enable-cet),permissive) -CPPFLAGS-tst-cet-legacy-5a.c += -DCET_IS_PERMISSIVE=1 -endif -CFLAGS-tst-cet-legacy-5b.c += -fcf-protection -mshstk -CPPFLAGS-tst-cet-legacy-5b.c += -DCET_DISABLED_BY_ENV=1 -CFLAGS-tst-cet-legacy-mod-5a.c += -fcf-protection=none -fcf-protection=branch -CFLAGS-tst-cet-legacy-mod-5b.c += -fcf-protection -CFLAGS-tst-cet-legacy-mod-5c.c += -fcf-protection -CFLAGS-tst-cet-legacy-6a.c += -fcf-protection -mshstk -ifeq ($(enable-cet),permissive) -CPPFLAGS-tst-cet-legacy-6a.c += -DCET_IS_PERMISSIVE=1 -endif -CFLAGS-tst-cet-legacy-6b.c += -fcf-protection -mshstk -CPPFLAGS-tst-cet-legacy-6b.c += -DCET_DISABLED_BY_ENV=1 -CFLAGS-tst-cet-legacy-mod-6a.c += -fcf-protection=none -fcf-protection=branch -CFLAGS-tst-cet-legacy-mod-6b.c += -fcf-protection -CFLAGS-tst-cet-legacy-mod-6c.c += -fcf-protection -CFLAGS-tst-cet-legacy-7.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-10.c += -mshstk -CFLAGS-tst-cet-legacy-10-static.c += -mshstk -CFLAGS-tst-cet-legacy-10a.c += -fcf-protection=none -CFLAGS-tst-cet-legacy-10a-static.c += -fcf-protection=none - -tst-cet-legacy-4-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-cet-legacy-6-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-cet-legacy-10-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-cet-legacy-10-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-cet-legacy-10a-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-cet-legacy-10a-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK - -CFLAGS-tst-shstk-legacy-1a.c += -fcf-protection=none -CFLAGS-tst-shstk-legacy-1a-static.c += -fcf-protection=none -CFLAGS-tst-shstk-legacy-1d.c += -fcf-protection=none -CFLAGS-tst-shstk-legacy-1d-static.c += -fcf-protection=none -CFLAGS-tst-shstk-legacy-1f.c += -fcf-protection=none - -$(objpfx)tst-cet-legacy-1: $(objpfx)tst-cet-legacy-mod-1.so \ - $(objpfx)tst-cet-legacy-mod-2.so -$(objpfx)tst-cet-legacy-1a: $(objpfx)tst-cet-legacy-mod-1.so \ - $(objpfx)tst-cet-legacy-mod-2.so -$(objpfx)tst-cet-legacy-2: $(objpfx)tst-cet-legacy-mod-2.so -$(objpfx)tst-cet-legacy-2.out: $(objpfx)tst-cet-legacy-mod-1.so -$(objpfx)tst-cet-legacy-2a: $(objpfx)tst-cet-legacy-mod-2.so -$(objpfx)tst-cet-legacy-2a.out: $(objpfx)tst-cet-legacy-mod-1.so -$(objpfx)tst-cet-legacy-4.out: $(objpfx)tst-cet-legacy-mod-4.so -$(objpfx)tst-cet-legacy-5a.out: $(objpfx)tst-cet-legacy-mod-5a.so \ - $(objpfx)tst-cet-legacy-mod-5b.so -$(objpfx)tst-cet-legacy-mod-5a.so: $(objpfx)tst-cet-legacy-mod-5c.so -$(objpfx)tst-cet-legacy-mod-5b.so: $(objpfx)tst-cet-legacy-mod-5c.so -$(objpfx)tst-cet-legacy-6a.out: $(objpfx)tst-cet-legacy-mod-6a.so \ - $(objpfx)tst-cet-legacy-mod-6b.so -$(objpfx)tst-cet-legacy-mod-6a.so: $(objpfx)tst-cet-legacy-mod-6c.so -$(objpfx)tst-cet-legacy-mod-6b.so: $(objpfx)tst-cet-legacy-mod-6c.so -LDFLAGS-tst-cet-legacy-mod-6c.so = -Wl,--enable-new-dtags,-z,nodelete -$(objpfx)tst-cet-legacy-4a.out: $(objpfx)tst-cet-legacy-mod-4.so -tst-cet-legacy-4a-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=permissive -$(objpfx)tst-cet-legacy-4b.out: $(objpfx)tst-cet-legacy-mod-4.so -tst-cet-legacy-4b-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=on -$(objpfx)tst-cet-legacy-4c.out: $(objpfx)tst-cet-legacy-mod-4.so -tst-cet-legacy-4c-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=off -$(objpfx)tst-cet-legacy-5b.out: $(objpfx)tst-cet-legacy-mod-5a.so \ - $(objpfx)tst-cet-legacy-mod-5b.so -tst-cet-legacy-5b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK -$(objpfx)tst-cet-legacy-6b.out: $(objpfx)tst-cet-legacy-mod-6a.so \ - $(objpfx)tst-cet-legacy-mod-6b.so -tst-cet-legacy-6b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK -tst-cet-legacy-9-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK -tst-cet-legacy-9-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK - -tst-shstk-legacy-1a-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-shstk-legacy-1a-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -$(objpfx)tst-shstk-legacy-1a: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1a-static: $(objpfx)tst-shstk-legacy-1-extra.o -tst-shstk-legacy-1b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-shstk-legacy-1b-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -$(objpfx)tst-shstk-legacy-1b: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1b-static: $(objpfx)tst-shstk-legacy-1-extra.o -tst-shstk-legacy-1c-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-SHSTK -tst-shstk-legacy-1c-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-SHSTK -$(objpfx)tst-shstk-legacy-1c: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1c-static: $(objpfx)tst-shstk-legacy-1-extra.o -tst-shstk-legacy-1d-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -tst-shstk-legacy-1d-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -$(objpfx)tst-shstk-legacy-1d: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1d-static: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1e: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1e-static: $(objpfx)tst-shstk-legacy-1-extra.o -$(objpfx)tst-shstk-legacy-1e.out: \ - $(..)/sysdeps/x86/tst-shstk-legacy-1e.sh $(objpfx)tst-shstk-legacy-1e - $(SHELL) $< $(common-objpfx) '$(test-program-prefix)' 2> $@; \ - $(evaluate-test) -$(objpfx)tst-shstk-legacy-1e-static.out: \ - $(..)/sysdeps/x86/tst-shstk-legacy-1e-static.sh \ - $(objpfx)tst-shstk-legacy-1e-static - $(SHELL) $< $(common-objpfx) 2> $@; \ - $(evaluate-test) -tst-shstk-legacy-1f-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK -$(objpfx)tst-shstk-legacy-1f: $(objpfx)tst-shstk-legacy-mod-1.so -$(objpfx)tst-shstk-legacy-mod-1.so: \ - $(objpfx)tst-shstk-legacy-mod-1.os \ - $(objpfx)tst-shstk-legacy-1-extra.os -$(objpfx)tst-shstk-legacy-1g: $(objpfx)tst-shstk-legacy-mod-1.so -$(objpfx)tst-shstk-legacy-1g.out: \ - $(..)/sysdeps/x86/tst-shstk-legacy-1g.sh $(objpfx)tst-shstk-legacy-1g - $(SHELL) $< $(common-objpfx) '$(test-program-prefix)' 2> $@; \ - $(evaluate-test) -endif - -# Add -fcf-protection to CFLAGS when CET is enabled. -CFLAGS-.o += -fcf-protection -CFLAGS-.os += -fcf-protection -CFLAGS-.op += -fcf-protection -CFLAGS-.oS += -fcf-protection - -# Compile assembly codes with when CET is enabled. -asm-CPPFLAGS += -fcf-protection -include cet.h - -ifeq ($(subdir),elf) -ifeq (yes,$(build-shared)) -tests-special += $(objpfx)check-cet.out -endif - -# FIXME: Can't use all-built-dso in elf/Makefile since this file is -# processed before elf/Makefile. Duplicate it here. -cet-built-dso := $(common-objpfx)elf/ld.so $(common-objpfx)libc.so \ - $(filter-out $(common-objpfx)linkobj/libc.so, \ - $(sort $(wildcard $(addprefix $(common-objpfx), \ - */lib*.so \ - iconvdata/*.so)))) - -$(cet-built-dso:=.note): %.note: % - @rm -f $@T - LC_ALL=C $(READELF) -n $< > $@T - test -s $@T - mv -f $@T $@ -common-generated += $(cet-built-dso:$(common-objpfx)%=%.note) - -$(objpfx)check-cet.out: $(..)sysdeps/x86/check-cet.awk \ - $(cet-built-dso:=.note) - LC_ALL=C $(AWK) -f $^ > $@; \ - $(evaluate-test) -generated += check-cet.out -endif -endif - ifeq ($(subdir),posix) tests += \ tst-sysconf-cache-linesize \ diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile index 00120ca9ca..d5cb0e0984 100644 --- a/sysdeps/x86_64/Makefile +++ b/sysdeps/x86_64/Makefile @@ -175,8 +175,236 @@ ifeq (no,$(build-hardcoded-path-in-tests)) tests-container += tst-glibc-hwcaps-cache endif +ifneq ($(enable-cet),no) +sysdep-dl-routines += dl-cet + +# FIXME: Can't use all-built-dso in elf/Makefile since this file is +# processed before elf/Makefile. Duplicate it here. +cet-built-dso := $(common-objpfx)elf/ld.so $(common-objpfx)libc.so \ + $(filter-out $(common-objpfx)linkobj/libc.so, \ + $(sort $(wildcard $(addprefix $(common-objpfx), \ + */lib*.so \ + iconvdata/*.so)))) + +$(cet-built-dso:=.note): %.note: % + @rm -f $@T + LC_ALL=C $(READELF) -n $< > $@T + test -s $@T + mv -f $@T $@ +common-generated += $(cet-built-dso:$(common-objpfx)%=%.note) + +tests += \ + tst-cet-legacy-1 \ + tst-cet-legacy-1a \ + tst-cet-legacy-2 \ + tst-cet-legacy-2a \ + tst-cet-legacy-3 \ + tst-cet-legacy-4 \ + tst-cet-legacy-5a \ + tst-cet-legacy-6a \ + tst-cet-legacy-7 \ + tst-cet-legacy-8 \ + tst-cet-legacy-9 \ + tst-cet-legacy-9-static \ + tst-cet-legacy-10 \ + tst-cet-legacy-10-static \ + tst-cet-legacy-10a \ + tst-cet-legacy-10a-static \ +# tests +tests-static += \ + tst-cet-legacy-9-static \ + tst-cet-legacy-10-static \ + tst-cet-legacy-10a-static \ +# tests-static +tst-cet-legacy-1a-ARGS = -- $(host-test-program-cmd) + +tests += \ + tst-shstk-legacy-1a \ + tst-shstk-legacy-1a-static \ + tst-shstk-legacy-1b \ + tst-shstk-legacy-1b-static \ + tst-shstk-legacy-1c \ + tst-shstk-legacy-1c-static \ + tst-shstk-legacy-1d \ + tst-shstk-legacy-1d-static \ + tst-shstk-legacy-1e \ + tst-shstk-legacy-1e-static \ + tst-shstk-legacy-1f \ + tst-shstk-legacy-1g \ +# tests +modules-names += \ + tst-shstk-legacy-mod-1 \ +# modules-names +tests-static += \ + tst-shstk-legacy-1a-static \ + tst-shstk-legacy-1b-static \ + tst-shstk-legacy-1c-static \ + tst-shstk-legacy-1d-static \ + tst-shstk-legacy-1e-static \ +# tests-static +extra-objs += \ + tst-shstk-legacy-1-extra.o \ +# extra-objs + +tests += \ + tst-cet-legacy-4a \ + tst-cet-legacy-4b \ + tst-cet-legacy-4c \ + tst-cet-legacy-5b \ + tst-cet-legacy-6b \ +# tests +modules-names += \ + tst-cet-legacy-mod-1 \ + tst-cet-legacy-mod-2 \ + tst-cet-legacy-mod-4 \ + tst-cet-legacy-mod-5a \ + tst-cet-legacy-mod-5b \ + tst-cet-legacy-mod-5c \ + tst-cet-legacy-mod-6a \ + tst-cet-legacy-mod-6b \ + tst-cet-legacy-mod-6c \ +# modules-names + +ifeq (yes,$(build-shared)) +tests-special += $(objpfx)check-cet.out +endif +$(objpfx)check-cet.out: $(..)sysdeps/x86/check-cet.awk \ + $(cet-built-dso:=.note) + LC_ALL=C $(AWK) -f $^ > $@; \ + $(evaluate-test) +generated += check-cet.out + +CFLAGS-tst-cet-legacy-2.c += -fcf-protection=none -fcf-protection=branch +CFLAGS-tst-cet-legacy-2a.c += -fcf-protection +CFLAGS-tst-cet-legacy-mod-1.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-mod-2.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-3.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-4.c += -fcf-protection=none -fcf-protection=branch +CPPFLAGS-tst-cet-legacy-4a.c += -DCET_IS_PERMISSIVE=1 +CFLAGS-tst-cet-legacy-4a.c += -fcf-protection +CFLAGS-tst-cet-legacy-4b.c += -fcf-protection +CFLAGS-tst-cet-legacy-mod-4.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-5a.c += -fcf-protection -mshstk +ifeq ($(enable-cet),permissive) +CPPFLAGS-tst-cet-legacy-5a.c += -DCET_IS_PERMISSIVE=1 +endif +CFLAGS-tst-cet-legacy-5b.c += -fcf-protection -mshstk +CPPFLAGS-tst-cet-legacy-5b.c += -DCET_DISABLED_BY_ENV=1 +CFLAGS-tst-cet-legacy-mod-5a.c += -fcf-protection=none -fcf-protection=branch +CFLAGS-tst-cet-legacy-mod-5b.c += -fcf-protection +CFLAGS-tst-cet-legacy-mod-5c.c += -fcf-protection +CFLAGS-tst-cet-legacy-6a.c += -fcf-protection -mshstk +ifeq ($(enable-cet),permissive) +CPPFLAGS-tst-cet-legacy-6a.c += -DCET_IS_PERMISSIVE=1 +endif +CFLAGS-tst-cet-legacy-6b.c += -fcf-protection -mshstk +CPPFLAGS-tst-cet-legacy-6b.c += -DCET_DISABLED_BY_ENV=1 +CFLAGS-tst-cet-legacy-mod-6a.c += -fcf-protection=none -fcf-protection=branch +CFLAGS-tst-cet-legacy-mod-6b.c += -fcf-protection +CFLAGS-tst-cet-legacy-mod-6c.c += -fcf-protection +CFLAGS-tst-cet-legacy-7.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-10.c += -mshstk +CFLAGS-tst-cet-legacy-10-static.c += -mshstk +CFLAGS-tst-cet-legacy-10a.c += -fcf-protection=none +CFLAGS-tst-cet-legacy-10a-static.c += -fcf-protection=none + +tst-cet-legacy-4-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-cet-legacy-6-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-cet-legacy-10-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-cet-legacy-10-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-cet-legacy-10a-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-cet-legacy-10a-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK + +CFLAGS-tst-shstk-legacy-1a.c += -fcf-protection=none +CFLAGS-tst-shstk-legacy-1a-static.c += -fcf-protection=none +CFLAGS-tst-shstk-legacy-1d.c += -fcf-protection=none +CFLAGS-tst-shstk-legacy-1d-static.c += -fcf-protection=none +CFLAGS-tst-shstk-legacy-1f.c += -fcf-protection=none + +$(objpfx)tst-cet-legacy-1: $(objpfx)tst-cet-legacy-mod-1.so \ + $(objpfx)tst-cet-legacy-mod-2.so +$(objpfx)tst-cet-legacy-1a: $(objpfx)tst-cet-legacy-mod-1.so \ + $(objpfx)tst-cet-legacy-mod-2.so +$(objpfx)tst-cet-legacy-2: $(objpfx)tst-cet-legacy-mod-2.so +$(objpfx)tst-cet-legacy-2.out: $(objpfx)tst-cet-legacy-mod-1.so +$(objpfx)tst-cet-legacy-2a: $(objpfx)tst-cet-legacy-mod-2.so +$(objpfx)tst-cet-legacy-2a.out: $(objpfx)tst-cet-legacy-mod-1.so +$(objpfx)tst-cet-legacy-4.out: $(objpfx)tst-cet-legacy-mod-4.so +$(objpfx)tst-cet-legacy-5a.out: $(objpfx)tst-cet-legacy-mod-5a.so \ + $(objpfx)tst-cet-legacy-mod-5b.so +$(objpfx)tst-cet-legacy-mod-5a.so: $(objpfx)tst-cet-legacy-mod-5c.so +$(objpfx)tst-cet-legacy-mod-5b.so: $(objpfx)tst-cet-legacy-mod-5c.so +$(objpfx)tst-cet-legacy-6a.out: $(objpfx)tst-cet-legacy-mod-6a.so \ + $(objpfx)tst-cet-legacy-mod-6b.so +$(objpfx)tst-cet-legacy-mod-6a.so: $(objpfx)tst-cet-legacy-mod-6c.so +$(objpfx)tst-cet-legacy-mod-6b.so: $(objpfx)tst-cet-legacy-mod-6c.so +LDFLAGS-tst-cet-legacy-mod-6c.so = -Wl,--enable-new-dtags,-z,nodelete +$(objpfx)tst-cet-legacy-4a.out: $(objpfx)tst-cet-legacy-mod-4.so +tst-cet-legacy-4a-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=permissive +$(objpfx)tst-cet-legacy-4b.out: $(objpfx)tst-cet-legacy-mod-4.so +tst-cet-legacy-4b-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=on +$(objpfx)tst-cet-legacy-4c.out: $(objpfx)tst-cet-legacy-mod-4.so +tst-cet-legacy-4c-ENV = GLIBC_TUNABLES=glibc.cpu.x86_shstk=off +$(objpfx)tst-cet-legacy-5b.out: $(objpfx)tst-cet-legacy-mod-5a.so \ + $(objpfx)tst-cet-legacy-mod-5b.so +tst-cet-legacy-5b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK +$(objpfx)tst-cet-legacy-6b.out: $(objpfx)tst-cet-legacy-mod-6a.so \ + $(objpfx)tst-cet-legacy-mod-6b.so +tst-cet-legacy-6b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK +tst-cet-legacy-9-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK +tst-cet-legacy-9-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK + +tst-shstk-legacy-1a-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-shstk-legacy-1a-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +$(objpfx)tst-shstk-legacy-1a: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1a-static: $(objpfx)tst-shstk-legacy-1-extra.o +tst-shstk-legacy-1b-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-shstk-legacy-1b-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +$(objpfx)tst-shstk-legacy-1b: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1b-static: $(objpfx)tst-shstk-legacy-1-extra.o +tst-shstk-legacy-1c-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-SHSTK +tst-shstk-legacy-1c-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-SHSTK +$(objpfx)tst-shstk-legacy-1c: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1c-static: $(objpfx)tst-shstk-legacy-1-extra.o +tst-shstk-legacy-1d-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +tst-shstk-legacy-1d-static-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +$(objpfx)tst-shstk-legacy-1d: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1d-static: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1e: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1e-static: $(objpfx)tst-shstk-legacy-1-extra.o +$(objpfx)tst-shstk-legacy-1e.out: \ + $(..)/sysdeps/x86_64/tst-shstk-legacy-1e.sh $(objpfx)tst-shstk-legacy-1e + $(SHELL) $< $(common-objpfx) '$(test-program-prefix)' 2> $@; \ + $(evaluate-test) +$(objpfx)tst-shstk-legacy-1e-static.out: \ + $(..)/sysdeps/x86_64/tst-shstk-legacy-1e-static.sh \ + $(objpfx)tst-shstk-legacy-1e-static + $(SHELL) $< $(common-objpfx) 2> $@; \ + $(evaluate-test) +tst-shstk-legacy-1f-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=SHSTK +$(objpfx)tst-shstk-legacy-1f: $(objpfx)tst-shstk-legacy-mod-1.so +$(objpfx)tst-shstk-legacy-mod-1.so: \ + $(objpfx)tst-shstk-legacy-mod-1.os \ + $(objpfx)tst-shstk-legacy-1-extra.os +$(objpfx)tst-shstk-legacy-1g: $(objpfx)tst-shstk-legacy-mod-1.so +$(objpfx)tst-shstk-legacy-1g.out: \ + $(..)/sysdeps/x86_64/tst-shstk-legacy-1g.sh $(objpfx)tst-shstk-legacy-1g + $(SHELL) $< $(common-objpfx) '$(test-program-prefix)' 2> $@; \ + $(evaluate-test) +endif # $(enable-cet) == no endif # $(subdir) == elf +ifneq ($(enable-cet),no) +# Add -fcf-protection to CFLAGS when CET is enabled. +CFLAGS-.o += -fcf-protection +CFLAGS-.os += -fcf-protection +CFLAGS-.op += -fcf-protection +CFLAGS-.oS += -fcf-protection + +# Compile assembly codes with when CET is enabled. +asm-CPPFLAGS += -fcf-protection -include cet.h +endif # $(enable-cet) == no + ifeq ($(subdir),csu) gen-as-const-headers += tlsdesc.sym rtld-offsets.sym endif @@ -196,7 +424,17 @@ sysdep_routines += \ tests += \ tst-rsi-wcslen +endif # (subdir) == wcsmbs + + +ifeq ($(subdir),setjmp) +ifneq ($(enable-cet),no) +tests += \ + tst-setjmp-cet \ +# tests +tst-setjmp-cet-ENV = GLIBC_TUNABLES=glibc.cpu.x86_ibt=on:glibc.cpu.x86_shstk=on endif +endif # (subdir) == setjmp do-tests-clean common-mostlyclean: tst-x86_64-1-clean diff --git a/sysdeps/x86/tst-cet-legacy-1.c b/sysdeps/x86_64/tst-cet-legacy-1.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-1.c rename to sysdeps/x86_64/tst-cet-legacy-1.c diff --git a/sysdeps/x86/tst-cet-legacy-10-static.c b/sysdeps/x86_64/tst-cet-legacy-10-static.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-10-static.c rename to sysdeps/x86_64/tst-cet-legacy-10-static.c diff --git a/sysdeps/x86/tst-cet-legacy-10.c b/sysdeps/x86_64/tst-cet-legacy-10.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-10.c rename to sysdeps/x86_64/tst-cet-legacy-10.c diff --git a/sysdeps/x86/tst-cet-legacy-10a-static.c b/sysdeps/x86_64/tst-cet-legacy-10a-static.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-10a-static.c rename to sysdeps/x86_64/tst-cet-legacy-10a-static.c diff --git a/sysdeps/x86/tst-cet-legacy-10a.c b/sysdeps/x86_64/tst-cet-legacy-10a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-10a.c rename to sysdeps/x86_64/tst-cet-legacy-10a.c diff --git a/sysdeps/x86/tst-cet-legacy-1a.c b/sysdeps/x86_64/tst-cet-legacy-1a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-1a.c rename to sysdeps/x86_64/tst-cet-legacy-1a.c diff --git a/sysdeps/x86/tst-cet-legacy-2.c b/sysdeps/x86_64/tst-cet-legacy-2.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-2.c rename to sysdeps/x86_64/tst-cet-legacy-2.c diff --git a/sysdeps/x86/tst-cet-legacy-2a.c b/sysdeps/x86_64/tst-cet-legacy-2a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-2a.c rename to sysdeps/x86_64/tst-cet-legacy-2a.c diff --git a/sysdeps/x86/tst-cet-legacy-3.c b/sysdeps/x86_64/tst-cet-legacy-3.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-3.c rename to sysdeps/x86_64/tst-cet-legacy-3.c diff --git a/sysdeps/x86/tst-cet-legacy-4.c b/sysdeps/x86_64/tst-cet-legacy-4.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-4.c rename to sysdeps/x86_64/tst-cet-legacy-4.c diff --git a/sysdeps/x86/tst-cet-legacy-4a.c b/sysdeps/x86_64/tst-cet-legacy-4a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-4a.c rename to sysdeps/x86_64/tst-cet-legacy-4a.c diff --git a/sysdeps/x86/tst-cet-legacy-4b.c b/sysdeps/x86_64/tst-cet-legacy-4b.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-4b.c rename to sysdeps/x86_64/tst-cet-legacy-4b.c diff --git a/sysdeps/x86/tst-cet-legacy-4c.c b/sysdeps/x86_64/tst-cet-legacy-4c.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-4c.c rename to sysdeps/x86_64/tst-cet-legacy-4c.c diff --git a/sysdeps/x86/tst-cet-legacy-5.c b/sysdeps/x86_64/tst-cet-legacy-5.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-5.c rename to sysdeps/x86_64/tst-cet-legacy-5.c diff --git a/sysdeps/x86/tst-cet-legacy-5a.c b/sysdeps/x86_64/tst-cet-legacy-5a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-5a.c rename to sysdeps/x86_64/tst-cet-legacy-5a.c diff --git a/sysdeps/x86/tst-cet-legacy-5b.c b/sysdeps/x86_64/tst-cet-legacy-5b.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-5b.c rename to sysdeps/x86_64/tst-cet-legacy-5b.c diff --git a/sysdeps/x86/tst-cet-legacy-6.c b/sysdeps/x86_64/tst-cet-legacy-6.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-6.c rename to sysdeps/x86_64/tst-cet-legacy-6.c diff --git a/sysdeps/x86/tst-cet-legacy-6a.c b/sysdeps/x86_64/tst-cet-legacy-6a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-6a.c rename to sysdeps/x86_64/tst-cet-legacy-6a.c diff --git a/sysdeps/x86/tst-cet-legacy-6b.c b/sysdeps/x86_64/tst-cet-legacy-6b.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-6b.c rename to sysdeps/x86_64/tst-cet-legacy-6b.c diff --git a/sysdeps/x86/tst-cet-legacy-7.c b/sysdeps/x86_64/tst-cet-legacy-7.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-7.c rename to sysdeps/x86_64/tst-cet-legacy-7.c diff --git a/sysdeps/x86/tst-cet-legacy-8.c b/sysdeps/x86_64/tst-cet-legacy-8.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-8.c rename to sysdeps/x86_64/tst-cet-legacy-8.c diff --git a/sysdeps/x86/tst-cet-legacy-9-static.c b/sysdeps/x86_64/tst-cet-legacy-9-static.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-9-static.c rename to sysdeps/x86_64/tst-cet-legacy-9-static.c diff --git a/sysdeps/x86/tst-cet-legacy-9.c b/sysdeps/x86_64/tst-cet-legacy-9.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-9.c rename to sysdeps/x86_64/tst-cet-legacy-9.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-1.c b/sysdeps/x86_64/tst-cet-legacy-mod-1.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-1.c rename to sysdeps/x86_64/tst-cet-legacy-mod-1.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-2.c b/sysdeps/x86_64/tst-cet-legacy-mod-2.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-2.c rename to sysdeps/x86_64/tst-cet-legacy-mod-2.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-4.c b/sysdeps/x86_64/tst-cet-legacy-mod-4.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-4.c rename to sysdeps/x86_64/tst-cet-legacy-mod-4.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-5.c b/sysdeps/x86_64/tst-cet-legacy-mod-5.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-5.c rename to sysdeps/x86_64/tst-cet-legacy-mod-5.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-5a.c b/sysdeps/x86_64/tst-cet-legacy-mod-5a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-5a.c rename to sysdeps/x86_64/tst-cet-legacy-mod-5a.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-5b.c b/sysdeps/x86_64/tst-cet-legacy-mod-5b.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-5b.c rename to sysdeps/x86_64/tst-cet-legacy-mod-5b.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-5c.c b/sysdeps/x86_64/tst-cet-legacy-mod-5c.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-5c.c rename to sysdeps/x86_64/tst-cet-legacy-mod-5c.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-6.c b/sysdeps/x86_64/tst-cet-legacy-mod-6.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-6.c rename to sysdeps/x86_64/tst-cet-legacy-mod-6.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-6a.c b/sysdeps/x86_64/tst-cet-legacy-mod-6a.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-6a.c rename to sysdeps/x86_64/tst-cet-legacy-mod-6a.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-6b.c b/sysdeps/x86_64/tst-cet-legacy-mod-6b.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-6b.c rename to sysdeps/x86_64/tst-cet-legacy-mod-6b.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-6c.c b/sysdeps/x86_64/tst-cet-legacy-mod-6c.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-6c.c rename to sysdeps/x86_64/tst-cet-legacy-mod-6c.c diff --git a/sysdeps/x86/tst-cet-legacy-mod-6d.c b/sysdeps/x86_64/tst-cet-legacy-mod-6d.c similarity index 100% rename from sysdeps/x86/tst-cet-legacy-mod-6d.c rename to sysdeps/x86_64/tst-cet-legacy-mod-6d.c diff --git a/sysdeps/x86/tst-setjmp-cet.c b/sysdeps/x86_64/tst-setjmp-cet.c similarity index 100% rename from sysdeps/x86/tst-setjmp-cet.c rename to sysdeps/x86_64/tst-setjmp-cet.c diff --git a/sysdeps/x86/tst-shstk-legacy-1-extra.S b/sysdeps/x86_64/tst-shstk-legacy-1-extra.S similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1-extra.S rename to sysdeps/x86_64/tst-shstk-legacy-1-extra.S diff --git a/sysdeps/x86/tst-shstk-legacy-1a-static.c b/sysdeps/x86_64/tst-shstk-legacy-1a-static.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1a-static.c rename to sysdeps/x86_64/tst-shstk-legacy-1a-static.c diff --git a/sysdeps/x86/tst-shstk-legacy-1a.c b/sysdeps/x86_64/tst-shstk-legacy-1a.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1a.c rename to sysdeps/x86_64/tst-shstk-legacy-1a.c diff --git a/sysdeps/x86/tst-shstk-legacy-1b-static.c b/sysdeps/x86_64/tst-shstk-legacy-1b-static.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1b-static.c rename to sysdeps/x86_64/tst-shstk-legacy-1b-static.c diff --git a/sysdeps/x86/tst-shstk-legacy-1b.c b/sysdeps/x86_64/tst-shstk-legacy-1b.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1b.c rename to sysdeps/x86_64/tst-shstk-legacy-1b.c diff --git a/sysdeps/x86/tst-shstk-legacy-1c-static.c b/sysdeps/x86_64/tst-shstk-legacy-1c-static.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1c-static.c rename to sysdeps/x86_64/tst-shstk-legacy-1c-static.c diff --git a/sysdeps/x86/tst-shstk-legacy-1c.c b/sysdeps/x86_64/tst-shstk-legacy-1c.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1c.c rename to sysdeps/x86_64/tst-shstk-legacy-1c.c diff --git a/sysdeps/x86/tst-shstk-legacy-1d-static.c b/sysdeps/x86_64/tst-shstk-legacy-1d-static.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1d-static.c rename to sysdeps/x86_64/tst-shstk-legacy-1d-static.c diff --git a/sysdeps/x86/tst-shstk-legacy-1d.c b/sysdeps/x86_64/tst-shstk-legacy-1d.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1d.c rename to sysdeps/x86_64/tst-shstk-legacy-1d.c diff --git a/sysdeps/x86/tst-shstk-legacy-1e-static.c b/sysdeps/x86_64/tst-shstk-legacy-1e-static.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1e-static.c rename to sysdeps/x86_64/tst-shstk-legacy-1e-static.c diff --git a/sysdeps/x86/tst-shstk-legacy-1e-static.sh b/sysdeps/x86_64/tst-shstk-legacy-1e-static.sh similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1e-static.sh rename to sysdeps/x86_64/tst-shstk-legacy-1e-static.sh diff --git a/sysdeps/x86/tst-shstk-legacy-1e.c b/sysdeps/x86_64/tst-shstk-legacy-1e.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1e.c rename to sysdeps/x86_64/tst-shstk-legacy-1e.c diff --git a/sysdeps/x86/tst-shstk-legacy-1e.sh b/sysdeps/x86_64/tst-shstk-legacy-1e.sh similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1e.sh rename to sysdeps/x86_64/tst-shstk-legacy-1e.sh diff --git a/sysdeps/x86/tst-shstk-legacy-1f.c b/sysdeps/x86_64/tst-shstk-legacy-1f.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1f.c rename to sysdeps/x86_64/tst-shstk-legacy-1f.c diff --git a/sysdeps/x86/tst-shstk-legacy-1g.c b/sysdeps/x86_64/tst-shstk-legacy-1g.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1g.c rename to sysdeps/x86_64/tst-shstk-legacy-1g.c diff --git a/sysdeps/x86/tst-shstk-legacy-1g.sh b/sysdeps/x86_64/tst-shstk-legacy-1g.sh similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-1g.sh rename to sysdeps/x86_64/tst-shstk-legacy-1g.sh diff --git a/sysdeps/x86/tst-shstk-legacy-mod-1.c b/sysdeps/x86_64/tst-shstk-legacy-mod-1.c similarity index 100% rename from sysdeps/x86/tst-shstk-legacy-mod-1.c rename to sysdeps/x86_64/tst-shstk-legacy-mod-1.c