From patchwork Thu Aug 30 14:40:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581879 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5368A5A4 for ; Thu, 30 Aug 2018 14:45:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 42E6B2B560 for ; Thu, 30 Aug 2018 14:45:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 36EE02BC83; Thu, 30 Aug 2018 14:45:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8E552B560 for ; Thu, 30 Aug 2018 14:45:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6C2A06B523E; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3D4786B5240; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 11A646B5241; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by kanga.kvack.org (Postfix) with ESMTP id B7F986B5240 for ; Thu, 30 Aug 2018 10:44:44 -0400 (EDT) Received: by mail-pf1-f199.google.com with SMTP id x85-v6so4877531pfe.13 for ; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=lR86AMn4GmPcAYjY8yw8TqDa6SPHOetcxZ4l5Gjz5Fg=; b=O2WvDGcqVkusxvdsdbfHs8NkLxW5xsZIDbpxZ7HpNKAe8/mzIn5MgmEMD5ybi700Dq SkY+XTRtlXDPPx/+BnSHRVgFgGrfUUsTs94uglTvxrWrquVsovg1L037KT2sGU48Qvvl cYBoqO8WbiPb5FbKcerBRd0Cy/C3eNi4ORLlON6zoDl4bguqmxbaY7xNKWFNipE9KqHs CcRrXcwxuJmJ3sTtfrh+3HkgIJUjaO00i8XljwGEMf8e8l9EFgsea+4qAfMju1WBF0Kd bo+3GD5oETLArtsmK6iYB6yDA5u7vDyTsyCBDkGOfiSBhBLT3KDhq+1kr7TVhxAvBQwP MSwA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51B/meDpQZQIbKtJStQBoxG+VP2VhUoJnn9nkWmIgpROsN022qJO O0QHrrE6yxLda6IaTlyXeAKMCK4sn91Yby3FdcrNVhO3JKCp8kfVIu1lMxfpWqR9+/w7gpaXDjp h696M7uQjeXX87JGjdgtg72J7Cn5wEjbzylYl5JekH2Bz1FILhCW/F3mibV8lB4Ij2g== X-Received: by 2002:a62:6bc5:: with SMTP id g188-v6mr6819838pfc.91.1535640284450; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYyjyOzweK7fBdS3lCVX5asm9IN6bG3nwS9ZgGym9xAh1c0EmwFOoiqiZ7rEQiDtWDortAT X-Received: by 2002:a62:6bc5:: with SMTP id g188-v6mr6819788pfc.91.1535640283704; Thu, 30 Aug 2018 07:44:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640283; cv=none; d=google.com; s=arc-20160816; b=z8K50SjxUkfZqNZaOHQtwaWPpjExfWju/mjsFMb4H7t9rrNkGZPZYfVFl52XyDfMye 2F4kvzjKkAsZIqNR/hppVcyLiixcJu52dPV5oLnd3DfmxgRnzl+i+y/PFyVBXmsPErPF vNgJ3tiXunW4oQri4M64PoHkZr2sdFm4f4cUh0yqHHmdpoVk8mJCghQdybBoS2BOLQaG 7xG1+OdsDPGltZZO5vr7/N0mbIc/Ja/0v/NpD5pk/+f4WgQJmRlMEfYXGvnqndHk8AA+ uPYKeGNjowmjaIDDoen7Acyl/DDq4Kz4l8yBGqO4N3rXjOFtLVYaBVkrc76GMA9kT39k IWMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=lR86AMn4GmPcAYjY8yw8TqDa6SPHOetcxZ4l5Gjz5Fg=; b=t4u1WdmNP4JmOTAkezDqjkIh8r/0sqCgJNVyYiKmX9EBRfIVEe6o38B+Re8Y6WWBfE WfCJKmMMNY6PwXrLvvXHpYThtx+6nKHHINdtAIfUN9tzMr1o5B75Me1fZihtNnbAU1OL KLmTAo+iQRVnExUBdQC7UBnUi2HzCJTzknykmJxcq62+U3OB4ujCvwNJGL1cou4ASRU8 EO2SjZlP/eEu215RgfxSUs2FxpyJ8VmUpbfaDEPKJ/CH/xuwSIyFog2Ufv4snOxSViVn rTPKshX3Cp3UlricOi6yoAiUBD8WljZ0bd+eV8EzMlbyEaXXEU0QSEFJX9zqtWyy0r4S vRgA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id t10-v6si6980653pgn.667.2018.08.30.07.44.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:43 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910401" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:30 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 1/8] x86/cet/ibt: Add Kconfig option for user-mode Indirect Branch Tracking Date: Thu, 30 Aug 2018 07:40:02 -0700 Message-Id: <20180830144009.3314-2-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The user-mode indirect branch tracking support is done mostly by GCC to insert ENDBR64/ENDBR32 instructions at branch targets. The kernel provides CPUID enumeration, feature MSR setup and the allocation of legacy bitmap. Signed-off-by: Yu-cheng Yu --- arch/x86/Kconfig | 12 ++++++++++++ arch/x86/Makefile | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 2cfe11e1cf7f..0d97b03f35f6 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1941,6 +1941,18 @@ config X86_INTEL_SHADOW_STACK_USER If unsure, say y. +config X86_INTEL_BRANCH_TRACKING_USER + prompt "Intel Indirect Branch Tracking for user-mode" + def_bool n + depends on CPU_SUP_INTEL && X86_64 + select X86_INTEL_CET + select ARCH_HAS_PROGRAM_PROPERTIES + ---help--- + Indirect Branch Tracking provides hardware protection against return-/jmp- + oriented programing attacks. + + If unsure, say y + config EFI bool "EFI runtime service support" depends on ACPI diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 00927853e409..0da5121c30db 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -159,6 +159,13 @@ ifdef CONFIG_X86_INTEL_SHADOW_STACK_USER endif endif +# Check compiler ibt support +ifdef CONFIG_X86_INTEL_BRANCH_TRACKING_USER + ifeq ($(call cc-option-yn, -fcf-protection=branch), n) + $(error CONFIG_X86_INTEL_BRANCH_TRACKING_USER not supported by compiler) + endif +endif + # # If the function graph tracer is used with mcount instead of fentry, # '-maccumulate-outgoing-args' is needed to prevent a GCC bug From patchwork Thu Aug 30 14:40:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581877 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F1DC55A4 for ; Thu, 30 Aug 2018 14:45:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E09AC2B560 for ; Thu, 30 Aug 2018 14:45:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D3CF22BC83; Thu, 30 Aug 2018 14:45:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 33F992B560 for ; Thu, 30 Aug 2018 14:45:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 38C4D6B5246; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 27DBF6B5244; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 055856B5243; Thu, 30 Aug 2018 10:44:44 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by kanga.kvack.org (Postfix) with ESMTP id AAA376B523E for ; Thu, 30 Aug 2018 10:44:44 -0400 (EDT) Received: by mail-pl1-f199.google.com with SMTP id k18-v6so2768055pls.12 for ; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=L+/Tn5nKXnM/AtanBQWGX6YAXI6YQyH8JQ6uoNf8kGo=; b=OGXdGPV9pb6j035ApgoGqFGZ5y+20vgVBU0JY0jwJ33rhvs58mTJ2T4kPexg58UAHE V5QHPDAXBp0kGhxDpenORJNH7jU2HD+eeJNASyLV3xhaF1Rc63mHiW2+vfxqtI5+iiny HGsyhx1F90TTcWiNDWDr5RaEokF1a2t9BsHuMdsE9aORbCERWoJplHDspkv8CjK5QxAW WnZvynJS6YeUnblM8s4J71ngILmeABqcnmwbiau5jyCRDKrZLQHR8HuHjkRqoW5L8zBi GS00EMtyz+vOyoKVLf0NxREIZewnup15koHTzcAgqV/P/bPp4CufI4xf4lIT3gYPpOq+ 4N0A== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51DqpfrEgkSjRb8/jde6pIBpZTWm5Y1HYzx4klNtTyNuv/02SR7w lhZCQ7GydCgFfmHdobQAZ0aHrMrEuBLo/c+elqtZnn9Tx9Ag4CI2ilWJdK8BmLJhsDvugMI8ASi +IiLCBkTQs25J/WKvljHUk/EemY1245XbtUIKDMVKAIpGaxPvxon1WQSOipbhQmNZVg== X-Received: by 2002:a62:401:: with SMTP id 1-v6mr10738679pfe.28.1535640284385; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZgs1RFp3JvsMaHUK/IPZ2Lq942faG3tloSFYF/KlkGWIE33RPpPgKnPfmM7AdrpwO1iM1C X-Received: by 2002:a62:401:: with SMTP id 1-v6mr10738633pfe.28.1535640283470; Thu, 30 Aug 2018 07:44:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640283; cv=none; d=google.com; s=arc-20160816; b=DXKNoynNq8ozJj2xxcoQ1dyFo1VssxJ1LsQiuB5dVm6Feott+8DG+FOAFtOLPEVpf+ 2XcgFdA2U9oJSBo9sclx87hPTwydQ9eMH29IP8nlFeYBdVp7QIHAcru/Q1+k0Tihx4VS ukLJ18mKQWgg7weYowS65tjNS1BW+MqGXap3z2varpQ4azlwa9kRsCQ6/q4XQoyYqX5D v+IelGHyzD7Hu/hoEgEzbcuS5Q+a0om0JGLn362ltYkiohB4ZxdKPCtqpfT27mIgEO/G fW49hIJYv5a8PJEDiuGxMFm0Jgo0g4Cz0WuRN5SBnwQVh01LmGCHbhPRMD1D3eg32vhd egrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=L+/Tn5nKXnM/AtanBQWGX6YAXI6YQyH8JQ6uoNf8kGo=; b=KIXxh6VN0hTgiolmFZ0YaiHHjuE8o4EyFPCAE5o3GKo2rH9ABwByYbQiidrau8m2PL 9MZPNxxbFojw38hCGz3Jk0BkMZ/vvEVd8HL6lpVEepxil1opxq+ewrSsAV+aG6CjIZsw h1tNKh9lK5fJNasPBrXWWPvrvogf+F8+enK71YOIoRk5tYLD5RHB/Et+UDHYVJRyhI6J Cw8QZ0YLmHBpCb+lxliYDuhC5dfR1QC04WQZpRsoF2kCtveZHuYFLrv4dBsP9Dy1BaK7 x/uqdIGMj1f8Yl/ACb1zeFDya573plUy7oW8jKSZqGfhUTEZxJfCimmXBLBwg/rsEshY IbHQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id t10-v6si6980653pgn.667.2018.08.30.07.44.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:43 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910403" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:30 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 2/8] x86/cet/ibt: User-mode indirect branch tracking support Date: Thu, 30 Aug 2018 07:40:03 -0700 Message-Id: <20180830144009.3314-3-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add user-mode indirect branch tracking enabling/disabling and supporting routines. Signed-off-by: H.J. Lu Signed-off-by: Yu-cheng Yu --- arch/x86/include/asm/cet.h | 8 +++ arch/x86/include/asm/disabled-features.h | 8 ++- arch/x86/kernel/cet.c | 68 ++++++++++++++++++++++++ arch/x86/kernel/cpu/common.c | 20 ++++++- arch/x86/kernel/process.c | 1 + 5 files changed, 103 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/cet.h b/arch/x86/include/asm/cet.h index 212bd68e31d3..1fea93fd436a 100644 --- a/arch/x86/include/asm/cet.h +++ b/arch/x86/include/asm/cet.h @@ -12,8 +12,11 @@ struct task_struct; struct cet_status { unsigned long shstk_base; unsigned long shstk_size; + unsigned long ibt_bitmap_addr; + unsigned long ibt_bitmap_size; unsigned int locked:1; unsigned int shstk_enabled:1; + unsigned int ibt_enabled:1; }; #ifdef CONFIG_X86_INTEL_CET @@ -25,6 +28,9 @@ void cet_disable_shstk(void); void cet_disable_free_shstk(struct task_struct *p); int cet_restore_signal(unsigned long ssp); int cet_setup_signal(bool ia32, unsigned long rstor, unsigned long *new_ssp); +int cet_setup_ibt(void); +int cet_setup_ibt_bitmap(void); +void cet_disable_ibt(void); #else static inline int prctl_cet(int option, unsigned long arg2) { return 0; } static inline int cet_setup_shstk(void) { return 0; } @@ -35,6 +41,8 @@ static inline void cet_disable_free_shstk(struct task_struct *p) {} static inline int cet_restore_signal(unsigned long ssp) { return 0; } static inline int cet_setup_signal(bool ia32, unsigned long rstor, unsigned long *new_ssp) { return 0; } +static inline int cet_setup_ibt(void) { return 0; } +static inline void cet_disable_ibt(void) {} #endif #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h index 3624a11e5ba6..ce5bdaf0f1ff 100644 --- a/arch/x86/include/asm/disabled-features.h +++ b/arch/x86/include/asm/disabled-features.h @@ -62,6 +62,12 @@ #define DISABLE_SHSTK (1<<(X86_FEATURE_SHSTK & 31)) #endif +#ifdef CONFIG_X86_INTEL_BRANCH_TRACKING_USER +#define DISABLE_IBT 0 +#else +#define DISABLE_IBT (1<<(X86_FEATURE_IBT & 31)) +#endif + /* * Make sure to add features to the correct mask */ @@ -72,7 +78,7 @@ #define DISABLED_MASK4 (DISABLE_PCID) #define DISABLED_MASK5 0 #define DISABLED_MASK6 0 -#define DISABLED_MASK7 (DISABLE_PTI) +#define DISABLED_MASK7 (DISABLE_PTI|DISABLE_IBT) #define DISABLED_MASK8 0 #define DISABLED_MASK9 (DISABLE_MPX) #define DISABLED_MASK10 0 diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c index 1c2689738604..071b9dd5bc5c 100644 --- a/arch/x86/kernel/cet.c +++ b/arch/x86/kernel/cet.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include #include @@ -283,3 +285,69 @@ int cet_setup_signal(bool ia32, unsigned long rstor_addr, set_shstk_ptr(ssp); return 0; } + +int cet_setup_ibt(void) +{ + u64 r; + unsigned long bitmap; + unsigned long size; + + if (!cpu_feature_enabled(X86_FEATURE_IBT)) + return -EOPNOTSUPP; + + size = TASK_SIZE / PAGE_SIZE / BITS_PER_BYTE; + bitmap = do_mmap_locked(0, size, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, + VM_DONTDUMP); + + if (bitmap >= TASK_SIZE) + return -ENOMEM; + + rdmsrl(MSR_IA32_U_CET, r); + r |= (MSR_IA32_CET_ENDBR_EN | MSR_IA32_CET_NO_TRACK_EN); + wrmsrl(MSR_IA32_U_CET, r); + + current->thread.cet.ibt_bitmap_addr = bitmap; + current->thread.cet.ibt_bitmap_size = size; + current->thread.cet.ibt_enabled = 1; + return 0; +} + +int cet_setup_ibt_bitmap(void) +{ + u64 r; + unsigned long bitmap; + + if (!cpu_feature_enabled(X86_FEATURE_IBT)) + return -EOPNOTSUPP; + + /* + * Lower bits of MSR_IA32_CET_LEG_IW_EN are for IBT + * settings. Clear lower bits even bitmap is already + * page-aligned. + */ + bitmap = current->thread.cet.ibt_bitmap_addr; + bitmap &= PAGE_MASK; + + /* + * Turn on IBT legacy bitmap. + */ + rdmsrl(MSR_IA32_U_CET, r); + r |= (MSR_IA32_CET_LEG_IW_EN | bitmap); + wrmsrl(MSR_IA32_U_CET, r); + return 0; +} + +void cet_disable_ibt(void) +{ + u64 r; + + if (!cpu_feature_enabled(X86_FEATURE_IBT)) + return; + + rdmsrl(MSR_IA32_U_CET, r); + r &= ~(MSR_IA32_CET_ENDBR_EN | MSR_IA32_CET_LEG_IW_EN | + MSR_IA32_CET_NO_TRACK_EN); + wrmsrl(MSR_IA32_U_CET, r); + current->thread.cet.ibt_enabled = 0; +} diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index e7eb41830add..cd03c4db2270 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -413,7 +413,8 @@ __setup("nopku", setup_disable_pku); static __always_inline void setup_cet(struct cpuinfo_x86 *c) { - if (cpu_feature_enabled(X86_FEATURE_SHSTK)) + if (cpu_feature_enabled(X86_FEATURE_SHSTK) || + cpu_feature_enabled(X86_FEATURE_IBT)) cr4_set_bits(X86_CR4_CET); } @@ -434,6 +435,23 @@ static __init int setup_disable_shstk(char *s) __setup("no_cet_shstk", setup_disable_shstk); #endif +#ifdef CONFIG_X86_INTEL_BRANCH_TRACKING_USER +static __init int setup_disable_ibt(char *s) +{ + /* require an exact match without trailing characters */ + if (strlen(s)) + return 0; + + if (!boot_cpu_has(X86_FEATURE_IBT)) + return 1; + + setup_clear_cpu_cap(X86_FEATURE_IBT); + pr_info("x86: 'no_cet_ibt' specified, disabling Branch Tracking\n"); + return 1; +} +__setup("no_cet_ibt", setup_disable_ibt); +#endif + /* * Some CPU features depend on higher CPUID levels, which may not always * be available due to CPUID level capping or broken virtualization diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 251b8714f9a3..ac0ea9c7e89f 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -137,6 +137,7 @@ void flush_thread(void) memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); cet_disable_shstk(); + cet_disable_ibt(); fpu__clear(&tsk->thread.fpu); } From patchwork Thu Aug 30 14:40:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581881 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 610615A4 for ; Thu, 30 Aug 2018 14:45:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5015B2B560 for ; Thu, 30 Aug 2018 14:45:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4403F2BC83; Thu, 30 Aug 2018 14:45:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CFEF62B560 for ; Thu, 30 Aug 2018 14:45:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E4C46B5240; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 5DE166B5245; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3871D6B523E; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by kanga.kvack.org (Postfix) with ESMTP id D7B426B5242 for ; Thu, 30 Aug 2018 10:44:44 -0400 (EDT) Received: by mail-pl1-f198.google.com with SMTP id gn4so4066212plb.9 for ; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=5AncLO3+H4a3Qxt5aPYUuDM1C2fJ4G3DLVBYQUZy2Lw=; b=Fa/QQJ9xuf7saiKTWw5z5VwtI5hwW3jko882wZvrlNBhJNdhv5E2NS4uA1OOapmrda /4+mA0ViLkQdRT2cd8cbIp4rKY+DXFf1Mhm2P/PIXG6XhOUgyLCCRMBrFnWPfnRrVuUE SNxnfSKMGjLOt6cQh4WB0zxsDT7IhV+1Bh7zxSqH30IPxHZlaajz9wXdCxp1kfHKDnC+ J+HjzK8oMHG8WyNs8Ha90jkvs26xq13iHatYulmVMV5biEUKH2St4WqGAHqKisuEe88G MqbPDvAYgRDLLiGf2hE+LR/ysYDpot+Nu9vSMUYc9GKaQDe6Q2uvX8jmNOBisijK2O4A 7q8Q== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51AkKlGb5kgfuDiv9jkYqkPFQqqC2ddoOLg3L+N4XGbGSozKuzG5 pqIeY9OxKWe7aIHzGDb8i0DztkP8mClAG/Ak9vWUcKfC9WLKV6JU6yrTiEWD71AWHWKuE3I+OS3 p9eMWzSeHtHIYlin/PiASU/FMv7yKyG0KQ4ezD9uOjx6CeJsWYpUVJIzrpOZvM25ctQ== X-Received: by 2002:a62:5047:: with SMTP id e68-v6mr10644069pfb.157.1535640284587; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-Smtp-Source: ANB0Vda68pg5b2XpVoFrwppr/mvERI+igjdXL+SxD/eDeKS6cZqau/kUdzbqYHMk60zrHxd/88ZI X-Received: by 2002:a62:5047:: with SMTP id e68-v6mr10644032pfb.157.1535640283935; Thu, 30 Aug 2018 07:44:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640283; cv=none; d=google.com; s=arc-20160816; b=qi2nnT/dmC+04ccJA6f7km5YkRKlcZlI+H0Tt3KD+iIf48aw1GmoDQsRwor8/7T4Q9 RM+FgYzw64HWtP1cthP109FV8sZ6q8Obj9oVYQkXF7KiRcJs2hjDniW+YD4RQylTfGr0 BZ7PNXBdX6iL29xD7WeH1D0ZBdgtBzxtM3+EHx/aIZYRnTJSsmRL3GspgAxyHTpzEXe2 hjCVyidzeCqrOu7RC8TqEL1AjIMDo/M51SpTsMS3GE8sZT1K3ETkWWrvsm5j/pYwsT+4 oj6fZRHcUWQrBGodZ4Wa6FIIcWzilGi0lhKr1vy5Iz9HdQ1bE4c8p4QPaEZW8ipYUrHU 99mQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=5AncLO3+H4a3Qxt5aPYUuDM1C2fJ4G3DLVBYQUZy2Lw=; b=p/i2599VixnoAMtM9VVIoNs4ofbVuBWA/YeK1KGVFbp4uZ9rxErzXMyil1s5XjLwsl JRTYoyY0H6tMeTpX1VeSjJ9Dr2riyXG6gMeZkmA/3f1O0b2fNEYULW65zEGFbaxaMOCy Nztn0SQoynf51DUzPiDJOrvF2weeK5fIY7NRGsmAMVbRYgW9I3LbgYqdYZy0unNmkl1s bgkQeVIcGliqXIIDrx+UkHKbhR1g/yWwq2P2WRtEhKAe/qXPbsQ57Hb6Y67yEA5Y1Pio 9ZBeaj3TQtSLg8EvhwVcQ3SyilkTqmNHkQ+Mt7wGQBZcsTYyBl+Aw98KZCCBGLMrvFq5 631w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id t10-v6si6980653pgn.667.2018.08.30.07.44.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:43 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910405" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:31 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 3/8] x86/cet/ibt: ELF header parsing for IBT Date: Thu, 30 Aug 2018 07:40:04 -0700 Message-Id: <20180830144009.3314-4-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Look in .note.gnu.property of an ELF file and check if Indirect Branch Tracking needs to be enabled for the task. Signed-off-by: H.J. Lu Signed-off-by: Yu-cheng Yu --- arch/x86/include/uapi/asm/elf_property.h | 1 + arch/x86/kernel/elf.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/uapi/asm/elf_property.h b/arch/x86/include/uapi/asm/elf_property.h index af361207718c..343a871b8fc1 100644 --- a/arch/x86/include/uapi/asm/elf_property.h +++ b/arch/x86/include/uapi/asm/elf_property.h @@ -11,5 +11,6 @@ * Bits for GNU_PROPERTY_X86_FEATURE_1_AND */ #define GNU_PROPERTY_X86_FEATURE_1_SHSTK (0x00000002) +#define GNU_PROPERTY_X86_FEATURE_1_IBT (0x00000001) #endif /* _UAPI_ASM_X86_ELF_PROPERTY_H */ diff --git a/arch/x86/kernel/elf.c b/arch/x86/kernel/elf.c index a2c41bf39c58..41957f1bd9d0 100644 --- a/arch/x86/kernel/elf.c +++ b/arch/x86/kernel/elf.c @@ -298,7 +298,8 @@ int arch_setup_features(void *ehdr_p, void *phdr_p, struct elf64_hdr *ehdr64 = ehdr_p; - if (!cpu_feature_enabled(X86_FEATURE_SHSTK)) + if (!cpu_feature_enabled(X86_FEATURE_SHSTK) && + !cpu_feature_enabled(X86_FEATURE_IBT)) return 0; if (ehdr64->e_ident[EI_CLASS] == ELFCLASS64) { @@ -333,6 +334,11 @@ int arch_setup_features(void *ehdr_p, void *phdr_p, } } + if (cpu_feature_enabled(X86_FEATURE_IBT)) { + if (feature & GNU_PROPERTY_X86_FEATURE_1_IBT) + err = cet_setup_ibt(); + } + out: return err; } From patchwork Thu Aug 30 14:40:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581885 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A1845A4 for ; Thu, 30 Aug 2018 14:46:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 39E322B560 for ; Thu, 30 Aug 2018 14:46:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2DF432BC83; Thu, 30 Aug 2018 14:46:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9A2F32B560 for ; Thu, 30 Aug 2018 14:46:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E49476B5241; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id DA28F6B5245; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A6B736B5248; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by kanga.kvack.org (Postfix) with ESMTP id 48B466B5241 for ; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Received: by mail-pl1-f198.google.com with SMTP id e8-v6so4064219plt.4 for ; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=FBdvGM3Zrj9jLn+rPs7bJTTqCftJsm33/g+xI11unTw=; b=LT8ZgzmF1OlWZIVmg6QBzL/5t0zXfhb+S7Rt5Ti74HdiymiPNzU+h2trSwYxEJR/kk sMicrnKGxlgkYMsz7tiuglr/rnsiYR3JUP1o5trfEbsIhjmEjMHojFbLadtwO7pTtabD 3ZC1md65KKCWZqEq1fLb66Y3u33idibU5Kz/LJB14UWY92Gsgjji5KFQlWnhsJcSZ2QA DADP7psGqj1xN1+Epoz5+oV5/PIBQiJVvu69klP4gfU2QowItiXrNEo3w5UA2Zl0KQdy AUKyG2DvxD2DXGyhAg7tdhLMS7Uf1bsscL/F9uW/GWtTLZqdqtk4QTf0VXz0TmUCaiBM OGdw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51AhgyxwyJ24x25UjWa8YScaGp9GgKiDukkQaP3zuC/G2jgR2g4r idqz0lbii7xQwnluhSwJm245NSJEawiD2RmkZ/38vJjCww6JC10m4TCjOkxGOMYUzYRtAH6bMEj kVIVowQCrKC9SUJgGJrPfGi2P0wnQ7NZSR+EUeUyPzrWB8Tgsae0EufPrWqzh5YUAoQ== X-Received: by 2002:a62:49d5:: with SMTP id r82-v6mr10794772pfi.245.1535640284961; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYZrWHoXSa8oqB2/G3A/7PTi84zaI9h56krgR+kHXOSAyd1tEzttCrXJUrtnfX8p4SUGGI7 X-Received: by 2002:a62:49d5:: with SMTP id r82-v6mr10794732pfi.245.1535640284259; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640284; cv=none; d=google.com; s=arc-20160816; b=ckR3SlEtAcXu2LQBBT4RarUQzLLpT8TNWSp+v/CxKSnM6UYFnHeKIos+Hw9k92XFIi X1wJqJKQ7M0PdwJRgRMk3CeIF8rThNMPy7C42mDRDQ1fKZaylAOSnV1xdLZeXRCgAHpy vJOXgi21X5EM5syYmlSEBbA/14FltrWccsG1/yH0MICdorVyq6XNxX1aIGIwDXhyaMCZ zrGwAlACwQ7Au8uCGU+6Rm//cnU4tx3njGrGTJMcNLgspOkvD7hSs4NFAbCKrk0x3lkJ Z/kGqAQ9woFbLhKznaC7YQxRAWZMhuH+lPRnFwNAqkoNNZf/9MfbPfmYeUUaXtRxRUkJ TRtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=FBdvGM3Zrj9jLn+rPs7bJTTqCftJsm33/g+xI11unTw=; b=iJbK7Vs1SdmZ9805tQ4D9Uaav9WGzdK6pQ4ho4KJKI8tjO6crDaTOMbTkJGTUyboy0 XNKS3GQYO9oTwlcC66tTp2Vg2woHw2pRj4BatR7l6xD6+MMblchRKlpFrb3/f3L42Sfa ERqV63xoVs3QyipgDU4QV+V3w+AtrWG9+n47golSv3UuUqHZm4vzVSz9wddrPRQTK4jD XJQDZxyvdQ5Eb9YPNBzkMAmAUYKrjEd9OOoVpDgmL9chVRpRw0TxJrxbbHTNqe8awDDT I63ZNd62HyqxCs35prZ4y/m3DAJLLbxal52qLHL3+JqhdJ8qK240YgU3cHVv9mp84e+x PZtA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id v8-v6si7022512pgq.458.2018.08.30.07.44.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:44 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910411" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:31 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 4/8] x86/cet/ibt: Add arch_prctl functions for IBT Date: Thu, 30 Aug 2018 07:40:05 -0700 Message-Id: <20180830144009.3314-5-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Update ARCH_CET_STATUS and ARCH_CET_DISABLE to include Indirect Branch Tracking features. Introduce: arch_prctl(ARCH_CET_LEGACY_BITMAP, unsigned long *addr) Enable the Indirect Branch Tracking legacy code bitmap. The parameter 'addr' is a pointer to a user buffer. On returning to the caller, the kernel fills the following: *addr = IBT bitmap base address *(addr + 1) = IBT bitmap size Signed-off-by: H.J. Lu Signed-off-by: Yu-cheng Yu --- arch/x86/include/uapi/asm/prctl.h | 1 + arch/x86/kernel/cet_prctl.c | 38 ++++++++++++++++++++++++++++++- arch/x86/kernel/process.c | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/uapi/asm/prctl.h b/arch/x86/include/uapi/asm/prctl.h index 3aec1088e01d..31d2465f9caf 100644 --- a/arch/x86/include/uapi/asm/prctl.h +++ b/arch/x86/include/uapi/asm/prctl.h @@ -18,5 +18,6 @@ #define ARCH_CET_DISABLE 0x3002 #define ARCH_CET_LOCK 0x3003 #define ARCH_CET_ALLOC_SHSTK 0x3004 +#define ARCH_CET_LEGACY_BITMAP 0x3005 #endif /* _ASM_X86_PRCTL_H */ diff --git a/arch/x86/kernel/cet_prctl.c b/arch/x86/kernel/cet_prctl.c index c4b7c19f5040..df47b5ebc3f4 100644 --- a/arch/x86/kernel/cet_prctl.c +++ b/arch/x86/kernel/cet_prctl.c @@ -20,6 +20,8 @@ static int handle_get_status(unsigned long arg2) if (current->thread.cet.shstk_enabled) features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK; + if (current->thread.cet.ibt_enabled) + features |= GNU_PROPERTY_X86_FEATURE_1_IBT; shstk_base = current->thread.cet.shstk_base; shstk_size = current->thread.cet.shstk_size; @@ -49,9 +51,35 @@ static int handle_alloc_shstk(unsigned long arg2) return 0; } +static int handle_bitmap(unsigned long arg2) +{ + unsigned long addr, size; + + if (current->thread.cet.ibt_enabled) { + int err; + + err = cet_setup_ibt_bitmap(); + if (err) + return err; + + addr = current->thread.cet.ibt_bitmap_addr; + size = current->thread.cet.ibt_bitmap_size; + } else { + addr = 0; + size = 0; + } + + if (put_user(addr, (unsigned long __user *)arg2) || + put_user(size, (unsigned long __user *)arg2 + 1)) + return -EFAULT; + + return 0; +} + int prctl_cet(int option, unsigned long arg2) { - if (!cpu_feature_enabled(X86_FEATURE_SHSTK)) + if (!cpu_feature_enabled(X86_FEATURE_SHSTK) && + !cpu_feature_enabled(X86_FEATURE_IBT)) return -EINVAL; switch (option) { @@ -63,6 +91,8 @@ int prctl_cet(int option, unsigned long arg2) return -EPERM; if (arg2 & GNU_PROPERTY_X86_FEATURE_1_SHSTK) cet_disable_free_shstk(current); + if (arg2 & GNU_PROPERTY_X86_FEATURE_1_IBT) + cet_disable_ibt(); return 0; @@ -73,6 +103,12 @@ int prctl_cet(int option, unsigned long arg2) case ARCH_CET_ALLOC_SHSTK: return handle_alloc_shstk(arg2); + /* + * Allocate legacy bitmap and return address & size to user. + */ + case ARCH_CET_LEGACY_BITMAP: + return handle_bitmap(arg2); + default: return -EINVAL; } diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index ac0ea9c7e89f..aea15a9b6a3e 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -797,6 +797,7 @@ long do_arch_prctl_common(struct task_struct *task, int option, case ARCH_CET_DISABLE: case ARCH_CET_LOCK: case ARCH_CET_ALLOC_SHSTK: + case ARCH_CET_LEGACY_BITMAP: return prctl_cet(option, cpuid_enabled); } From patchwork Thu Aug 30 14:40:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581883 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2A1E1174A for ; Thu, 30 Aug 2018 14:46:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A6372B735 for ; Thu, 30 Aug 2018 14:46:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0DB1B2BC88; Thu, 30 Aug 2018 14:46:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 900222B735 for ; Thu, 30 Aug 2018 14:46:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C7C2F6B5242; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id BCB0E6B5241; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 81FEE6B5244; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by kanga.kvack.org (Postfix) with ESMTP id 3164D6B5243 for ; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Received: by mail-pl1-f199.google.com with SMTP id e8-v6so4064216plt.4 for ; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=TK8EDeMGPZ2hWiuLL/i5vI4+eG5g0kdJ6UAxh9hkMGQ=; b=eyg33SZQwn/lVdnG6uJIFl1CPGYVhPax+2baEg2Ma4RXpRgoJ+wKbEZDq2seAQn4Ir Ko1SDwU9eQfYFq5AdOfgZbgUQiV6L95OPL26SGDbmHTkMgNwj7jJpiGvtNciq+NxB38C h6kgUxM46HQ1weVKrr/qnt9KF0JPLl7KsbXfLzq7IcToFnucygXUvkAOFtXO3yW9WH9I vV7hFgy380sj3zPd0jzmr59yKsl1sl1p5tgvQ0PIV6LMgDpsT8BPRSGFsx7I4rcFUEz/ Vgo9RKZLbHLt75TbxVU/BZjgjlLMbf+2zeaDlN1Zqc0LL1BrFXdv/k6oVtE3xP+CoEjO +5PA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51AhZXs/5PlolIHxAvwNBB/RsldHyfU4x55IObrDr7kwpQh9GJHQ rz3iOheP3K0NHPwKKjHyjZxW51IHsGfh5aE4SpJ1X/Z3MG16B+x0Ehk5eS8LrxVurvBqgK3c1cK UGiHSaJjkG+rQnDjx8Z88HYq79/VAH437Wkg7075oF33xfyMupPdlwN0ClWzE2Fe33g== X-Received: by 2002:a17:902:27a8:: with SMTP id d37-v6mr10536023plb.290.1535640284879; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdat4QNppDOPnUwKhAhyr1Bx3LM1r1o+cKXzjiyoebrC3Hp3a+nJd+p1Ip2acWCeBJMlZDg3 X-Received: by 2002:a17:902:27a8:: with SMTP id d37-v6mr10535991plb.290.1535640284119; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640284; cv=none; d=google.com; s=arc-20160816; b=qjIOlJOtmJw0/pPJbnHN6zldvDBNXUmMLG/i30cyB5LHG2WOhKExMKpPFdhWsNenD8 zSYY7K0k6ls5WApk/xf8q//T8SbVjsWKiRl/ANG8jwy5uElrjEpfZVQUDV9aV/yDzmkD bfepgLgW1RnN5Je6fbOJ2JU6V2utxL92OTa7/LdKFWbdGhVxzFN+CPASLYxtMwqM9mhT oDXGttIrxXJa2cO1OcyFBUldawiqOKNxSWQKC2QY+3GFRw1oAnWxLVr1eN/cAi+TAX27 vdFrgdfDKqjGHzboFiNovFp06p+rZ1Lo7jdYPeJx1jDq8CtkS+E6E5Ke8jKNKF6y90Sk QmKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=TK8EDeMGPZ2hWiuLL/i5vI4+eG5g0kdJ6UAxh9hkMGQ=; b=H4NtHZgfQaA/fvFnzlMiS8ceKArJi1bqUPcyEG3ixiCrmczt3aqGsMQOJoyEwLzFOZ AE9CuufCtleqobcmhTnCC5dWMk1txl4cNyYzqOowRqtl4mDKPnBDr5sMaoV5nG5e+VjY qcE8F8YfCLKiWhJsuejpq6zBY6nmyhCrZyysntGvwOFa752fUjBP5Myei3KJ6eKcuSRO q5raYFZDMMsRdLwG8PRgX39jYy4J3Za+U2xngf0T3lgmGJjqAB3+JqNjPAFoP1L3YE3H DDxEWe0GWEFHHkEArNXSG/ddf+eiIcXmJRam1ONq5km84SRkw3VV94BBa8JcTvuEqIfM AO1w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id t10-v6si6980653pgn.667.2018.08.30.07.44.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:44 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910412" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:32 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 5/8] x86/cet/ibt: Add ENDBR to op-code-map Date: Thu, 30 Aug 2018 07:40:06 -0700 Message-Id: <20180830144009.3314-6-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add control transfer terminating instructions: ENDBR64/ENDBR32: Mark a valid 64/32-bit control transfer endpoint. Signed-off-by: Yu-cheng Yu --- arch/x86/lib/x86-opcode-map.txt | 13 +++++++++++-- tools/objtool/arch/x86/lib/x86-opcode-map.txt | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/arch/x86/lib/x86-opcode-map.txt b/arch/x86/lib/x86-opcode-map.txt index c5e825d44766..fbc53481bc59 100644 --- a/arch/x86/lib/x86-opcode-map.txt +++ b/arch/x86/lib/x86-opcode-map.txt @@ -620,7 +620,16 @@ ea: SAVEPREVSSP (f3) # Skip 0xeb-0xff EndTable -Table: 3-byte opcode 2 (0x0f 0x38) +Table: 3-byte opcode 2 (0x0f 0x1e) +Referrer: +AVXcode: +# Skip 0x00-0xf9 +fa: ENDBR64 (f3) +fb: ENDBR32 (f3) +#skip 0xfc-0xff +EndTable + +Table: 3-byte opcode 3 (0x0f 0x38) Referrer: 3-byte escape 1 AVXcode: 2 # 0x0f 0x38 0x00-0x0f @@ -804,7 +813,7 @@ f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSS Pq,Qq f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v) EndTable -Table: 3-byte opcode 3 (0x0f 0x3a) +Table: 3-byte opcode 4 (0x0f 0x3a) Referrer: 3-byte escape 2 AVXcode: 3 # 0x0f 0x3a 0x00-0xff diff --git a/tools/objtool/arch/x86/lib/x86-opcode-map.txt b/tools/objtool/arch/x86/lib/x86-opcode-map.txt index c5e825d44766..fbc53481bc59 100644 --- a/tools/objtool/arch/x86/lib/x86-opcode-map.txt +++ b/tools/objtool/arch/x86/lib/x86-opcode-map.txt @@ -620,7 +620,16 @@ ea: SAVEPREVSSP (f3) # Skip 0xeb-0xff EndTable -Table: 3-byte opcode 2 (0x0f 0x38) +Table: 3-byte opcode 2 (0x0f 0x1e) +Referrer: +AVXcode: +# Skip 0x00-0xf9 +fa: ENDBR64 (f3) +fb: ENDBR32 (f3) +#skip 0xfc-0xff +EndTable + +Table: 3-byte opcode 3 (0x0f 0x38) Referrer: 3-byte escape 1 AVXcode: 2 # 0x0f 0x38 0x00-0x0f @@ -804,7 +813,7 @@ f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSS Pq,Qq f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v) EndTable -Table: 3-byte opcode 3 (0x0f 0x3a) +Table: 3-byte opcode 4 (0x0f 0x3a) Referrer: 3-byte escape 2 AVXcode: 3 # 0x0f 0x3a 0x00-0xff From patchwork Thu Aug 30 14:40:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581897 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5F79817DE for ; Thu, 30 Aug 2018 14:46:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4F9812B735 for ; Thu, 30 Aug 2018 14:46:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 42B0C2B560; Thu, 30 Aug 2018 14:46:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93FF42B560 for ; Thu, 30 Aug 2018 14:46:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E4536B5244; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 892046B5248; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 514956B5244; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by kanga.kvack.org (Postfix) with ESMTP id 037CB6B5243 for ; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) Received: by mail-pl1-f197.google.com with SMTP id bg5-v6so4055383plb.20 for ; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=cgb5Nv+F0rFiwxwTEPTA3aPc4FbwZufmybBQcnphrr4=; b=asKPd0neCo08poK6EMxBFS4T7xUa9Tbf2wmV5W4qA5MeB8X/MIQksoKHAdae+DfxeN j+GzEW1/gU58K1CkkoNM9l4d281MQT2VETZhAen55rtcNRocjxQ4g8yJDLQqLQfFTEgI nlzehv7G65x2iMEc0PM7BLcWMj+7EFcXcrNRdpkQjVoroAtmMBlLNoDllh0JHHb0h1K8 avD8tMbhME2dlTQQR4wh8IU+Zfhx2a1DWEYoimmSduegF7nWUzvSgRfUhYc1bYTmbrwC 6KihJ0Nom7P3AeXKxW/yGev4FcPhMGrms+Q/+gPGVsNSmgyM0yfISRavMyE4Z/a0YRcT 0tGg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51AxYhw8D5OT0pCFMVVoq8wmT6RlQt9medmOTcbadKnRbBJkElfg j41gCtb/bInPSkNH3EmtmJ0aByPveYvWltMoIHDod2E35mNOIwF6VbwNLPMDtunTbFjMBZLFXwS fOJ3ZGQN6UwyaM2sVSBJTEpLOQ09j20+d0MLKXT/Z4sWRw837P4TRZka6rrSCwMPiZA== X-Received: by 2002:a17:902:76c5:: with SMTP id j5-v6mr10581390plt.140.1535640285707; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaevSa1q3ImRR0sd7sDfp9GC2uJNjQ36QlOWzGRZPlcsbrHJF49RxPY7A67NvRr9IS7xvHK X-Received: by 2002:a17:902:76c5:: with SMTP id j5-v6mr10581357plt.140.1535640285012; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640284; cv=none; d=google.com; s=arc-20160816; b=LECkkyd9pkKPEdh+A5aWcz9O5mCbuw9bJR0lQ9FeVIiR72zWyTOEP5KjpmuAJbwcru HWsACZLNpUssP0V41+2O6kicebZ0eCOqIFYQKNwDqwrmxDBtJp31r83BvsJbySRGN44f hhnoUrdXbQOhjCPl26iSwjHLb7THX4ijz7QGD23wgfHwsK9BOTHHiTQxII4sOk9Ki7mL BsD5rK7NoXKLhsDB+0o8jp5PiTHmo/8INyQ4d8I0F0/p7kS6xXMxlBx23L33zXYt5/p9 ZRSqAMVPgPIBJ3FBJpG+d9tzqcE5S3FS8uNDS/UVtCAKJWkqWR8tZjN8Aa+tpwK6YiSJ 5+Uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=cgb5Nv+F0rFiwxwTEPTA3aPc4FbwZufmybBQcnphrr4=; b=cXL1c66ysX5aAiRlSoKMT1BKFMg3abWdlas/ZwlGtRNv7d9NAKKa1apOGELPxMTEoR bsrbEW/j+LsQ3Z5W49OKWdlf2HA+I4bnbeFuvqrs6L8/y1zUdS1B6M0Qx7Honun0mOaI O70ZT7RiBSKOgiLQdQtdd/xcMryAbr627n+xZWUeunRSC7h+K2YCMk+iizjD7qgGsgGc +vCmdMVrSFZjYdR/9UlQ8ZbBpNeFY3G7/sjkvILMfhRP+EqnJqkqPk6km5X5u3eU/lOw ZfXvlg4epk3cw3UyahqhiRWZ5O+vtHc+SBuMn8NjS4B7xXysWz8798YUWti2Wl540EqO ABPg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id m13-v6si6713043pgk.251.2018.08.30.07.44.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:44 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910413" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:32 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 6/8] mm/mmap: Add IBT bitmap size to address space limit check Date: Thu, 30 Aug 2018 07:40:07 -0700 Message-Id: <20180830144009.3314-7-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The indirect branch tracking legacy bitmap takes a large address space. This causes may_expand_vm() failure on the address limit check. For a IBT-enabled task, add the bitmap size to the address limit. Signed-off-by: Yu-cheng Yu --- arch/x86/include/uapi/asm/resource.h | 5 +++++ arch/x86/kernel/cet.c | 10 ++++++++-- include/uapi/asm-generic/resource.h | 3 +++ mm/mmap.c | 12 +++++++++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/uapi/asm/resource.h b/arch/x86/include/uapi/asm/resource.h index 04bc4db8921b..0741b2a6101a 100644 --- a/arch/x86/include/uapi/asm/resource.h +++ b/arch/x86/include/uapi/asm/resource.h @@ -1 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ +#ifdef CONFIG_X86_INTEL_CET +#define rlimit_as_extra() current->thread.cet.ibt_bitmap_size +#endif + #include diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c index 071b9dd5bc5c..f700743f6f48 100644 --- a/arch/x86/kernel/cet.c +++ b/arch/x86/kernel/cet.c @@ -295,20 +295,26 @@ int cet_setup_ibt(void) if (!cpu_feature_enabled(X86_FEATURE_IBT)) return -EOPNOTSUPP; + /* + * Calculate size and put in thread header. + * may_expand_vm() needs this information. + */ size = TASK_SIZE / PAGE_SIZE / BITS_PER_BYTE; + current->thread.cet.ibt_bitmap_size = size; bitmap = do_mmap_locked(0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, VM_DONTDUMP); - if (bitmap >= TASK_SIZE) + if (bitmap >= TASK_SIZE) { + current->thread.cet.ibt_bitmap_size = 0; return -ENOMEM; + } rdmsrl(MSR_IA32_U_CET, r); r |= (MSR_IA32_CET_ENDBR_EN | MSR_IA32_CET_NO_TRACK_EN); wrmsrl(MSR_IA32_U_CET, r); current->thread.cet.ibt_bitmap_addr = bitmap; - current->thread.cet.ibt_bitmap_size = size; current->thread.cet.ibt_enabled = 1; return 0; } diff --git a/include/uapi/asm-generic/resource.h b/include/uapi/asm-generic/resource.h index f12db7a0da64..8a7608a09700 100644 --- a/include/uapi/asm-generic/resource.h +++ b/include/uapi/asm-generic/resource.h @@ -58,5 +58,8 @@ # define RLIM_INFINITY (~0UL) #endif +#ifndef rlimit_as_extra +#define rlimit_as_extra() 0 +#endif #endif /* _UAPI_ASM_GENERIC_RESOURCE_H */ diff --git a/mm/mmap.c b/mm/mmap.c index 5f2b2b184c60..6f6c722c1484 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -3228,7 +3228,17 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, */ bool may_expand_vm(struct mm_struct *mm, vm_flags_t flags, unsigned long npages) { - if (mm->total_vm + npages > rlimit(RLIMIT_AS) >> PAGE_SHIFT) + unsigned long as_limit = rlimit(RLIMIT_AS); + unsigned long as_limit_plus = as_limit + rlimit_as_extra(); + + /* as_limit_plus overflowed */ + if (as_limit_plus < as_limit) + as_limit_plus = RLIM_INFINITY; + + if (as_limit_plus > as_limit) + as_limit = as_limit_plus; + + if (mm->total_vm + npages > as_limit >> PAGE_SHIFT) return false; if (is_data_mapping(flags) && From patchwork Thu Aug 30 14:40:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581889 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5B31F5A4 for ; Thu, 30 Aug 2018 14:46:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4ABDC2B735 for ; Thu, 30 Aug 2018 14:46:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3E4CA2BC88; Thu, 30 Aug 2018 14:46:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BE34E2B735 for ; Thu, 30 Aug 2018 14:46:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 519036B5249; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3FC346B5245; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 22D8A6B5248; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by kanga.kvack.org (Postfix) with ESMTP id CC5766B5244 for ; Thu, 30 Aug 2018 10:44:45 -0400 (EDT) Received: by mail-pg1-f199.google.com with SMTP id v195-v6so5167925pgb.0 for ; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to :subject:date:message-id:in-reply-to:references; bh=DzxbjDY4h6ee9dgtV6hY0nHV4jolczbZKl0Vg0iYMGs=; b=TDe7Oduq6vB1sFXqi4nRsLCJg4hdMg1Un2u9a9z+Q8mUHQ/GXyz3NU26dfAwQ+uZcl Ye7sxxuIB2s0HfMHHBfIvNsJHPsqsyzIYamwQzWb5WHddJD3o47QR9WlrNJmcH8X65MC oh76krv+KSrEUpXtTmVjz9B3Tb1zWmh1kbqPJMWhjpjsB/B0Zy+KKsw5zigo0/bkJ0qB 3u46MNjdi1BBk1M7VXVAHxUvQnflZd62zE/Sr8PdOu2+uXMs7n52S4zj5TsyKMLTaueu 56IrfgTucuFQymQBWKl6U4Jz5OEJQ70ReVELGe1nKcf/EXKhPUqgX+SxbIXR7gbYmFuV I4Vg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51AmIZryaZNQq0zNdLI82KHYVm0k9nD5mu3P0wU5Rn3xxPS6iju+ YwbIR9lGSEo+woqHoHJ3xlVFvlNtuH1nhD0mdeRmwdA00vN6A8zAdrTCEpce4sP7bzouezmpQnX K8RVpFTG9gm/umWNm6cfqELwwwS1zpuugDeHtB4K7ASjpgeChGwI0fgGULYIenShQXQ== X-Received: by 2002:a62:2483:: with SMTP id k3-v6mr10961177pfk.195.1535640285516; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYdgbUYBrt3ZUKE7V5ZsywnBHzLdT7kwdZBUrhm//A3s3e3Z4VUg330OR4IhVjR5gB5G6Bz X-Received: by 2002:a62:2483:: with SMTP id k3-v6mr10961155pfk.195.1535640284826; Thu, 30 Aug 2018 07:44:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640284; cv=none; d=google.com; s=arc-20160816; b=IjkFTSBd0bA0ETNqCxbkJ5Y954+FTOnjMkBZwEGwMroZKeX/w9zC7YuAMAHzU+0vYk WnrHS6zNTBvfr+eMy5r/ZuHp0GLn7erzsAFXanFSksHDXa9MjOdUDPIE47T5CfzzYqie WZJrX8nvHIR5IQNXJ/JMhsFQ3Bk77bKgc70hWUC/lHw7dcoklgQAaZfPPiS3MWhcbTig Drnw1JPxRjg3R1gkwy4X6FyMqFbfDqllW168oAGaV9KOqdNgfs+E8asTNlsVRhWOY0Fv bUK6z09ScwhfazHFx0evQtj+dnW35NLsuBCNASi4axKXoyXllCHTrJPZokR5V7bZLY7P 2EzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:to:from :arc-authentication-results; bh=DzxbjDY4h6ee9dgtV6hY0nHV4jolczbZKl0Vg0iYMGs=; b=Y6FAuOpy/jMR6tsxBa9ToojmFMkULuEkzClbQgsZEgY2egiviJ/srvOKz3wlq02rbs P11ndsu138Tid8eL4j76rnTtlmCEAt4cdE1ymrl0KiUvaAzeP5T9RzL1V//Ekv7Ibg2J zpyqgQRz+G15fLP156Z3IFK01QNy+aPTlJfy+hXUlfebU68TST7OTXnNWphWhkAFo8FR I1Xnw65wouKyTlOOsurJprznyHFoYeXX2amLgh6f2f9WwaEEKQMewVqXsrjKzQklAMwA hBCEfUPpmtqBpMVl+2vgzasQvrVaMEAbCdIi3oMZzMMUtnyIRyMROYUurXD+0rnBOnB+ i8dA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id m13-v6si6713043pgk.251.2018.08.30.07.44.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:44 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910414" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:33 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Subject: [RFC PATCH v3 7/8] x86: Insert endbr32/endbr64 to vDSO Date: Thu, 30 Aug 2018 07:40:08 -0700 Message-Id: <20180830144009.3314-8-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: "H.J. Lu" When Intel indirect branch tracking is enabled, functions in vDSO which may be called indirectly must have endbr32 or endbr64 as the first instruction. Compiler must support -fcf-protection=branch so that it can be used to compile vDSO. Signed-off-by: H.J. Lu --- arch/x86/entry/vdso/.gitignore | 4 ++++ arch/x86/entry/vdso/Makefile | 12 +++++++++++- arch/x86/entry/vdso/vdso-layout.lds.S | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/x86/entry/vdso/.gitignore b/arch/x86/entry/vdso/.gitignore index aae8ffdd5880..552941fdfae0 100644 --- a/arch/x86/entry/vdso/.gitignore +++ b/arch/x86/entry/vdso/.gitignore @@ -5,3 +5,7 @@ vdso32-sysenter-syms.lds vdso32-int80-syms.lds vdso-image-*.c vdso2c +vclock_gettime.S +vgetcpu.S +vclock_gettime.asm +vgetcpu.asm diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile index fa3f439f0a92..8694f70c08e6 100644 --- a/arch/x86/entry/vdso/Makefile +++ b/arch/x86/entry/vdso/Makefile @@ -102,13 +102,17 @@ vobjx32s := $(foreach F,$(vobjx32s-y),$(obj)/$F) # Convert 64bit object file to x32 for x32 vDSO. quiet_cmd_x32 = X32 $@ - cmd_x32 = $(OBJCOPY) -O elf32-x86-64 $< $@ + cmd_x32 = $(OBJCOPY) -R .note.gnu.property -O elf32-x86-64 $< $@ $(obj)/%-x32.o: $(obj)/%.o FORCE $(call if_changed,x32) targets += vdsox32.lds $(vobjx32s-y) +ifdef CONFIG_X86_INTEL_BRANCH_TRACKING_USER + $(obj)/vclock_gettime.o $(obj)/vgetcpu.o $(obj)/vdso32/vclock_gettime.o: KBUILD_CFLAGS += -fcf-protection=branch +endif + $(obj)/%.so: OBJCOPYFLAGS := -S $(obj)/%.so: $(obj)/%.so.dbg $(call if_changed,objcopy) @@ -160,6 +164,12 @@ quiet_cmd_vdso = VDSO $@ VDSO_LDFLAGS = -shared $(call ld-option, --hash-style=both) \ $(call ld-option, --build-id) -Bsymbolic +ifdef CONFIG_X86_INTEL_BRANCH_TRACKING_USER + VDSO_LDFLAGS += $(call ldoption, -z$(comma)ibt) +endif +ifdef CONFIG_X86_INTEL_SHADOW_STACK_USER + VDSO_LDFLAGS += $(call ldoption, -z$(comma)shstk) +endif GCOV_PROFILE := n # diff --git a/arch/x86/entry/vdso/vdso-layout.lds.S b/arch/x86/entry/vdso/vdso-layout.lds.S index acfd5ba7d943..cabaeedfed78 100644 --- a/arch/x86/entry/vdso/vdso-layout.lds.S +++ b/arch/x86/entry/vdso/vdso-layout.lds.S @@ -74,6 +74,7 @@ SECTIONS .fake_shstrtab : { *(.fake_shstrtab) } :text + .note.gnu.property : { *(.note.gnu.property) } :text :note .note : { *(.note.*) } :text :note .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr From patchwork Thu Aug 30 14:40:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu-cheng Yu X-Patchwork-Id: 10581895 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E59B45A4 for ; Thu, 30 Aug 2018 14:46:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D62552B735 for ; Thu, 30 Aug 2018 14:46:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C97342BEFF; Thu, 30 Aug 2018 14:46:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36EA52B735 for ; Thu, 30 Aug 2018 14:46:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3B53C6B5243; Thu, 30 Aug 2018 10:44:47 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 33BB76B5245; Thu, 30 Aug 2018 10:44:47 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1DB846B5248; Thu, 30 Aug 2018 10:44:47 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by kanga.kvack.org (Postfix) with ESMTP id C35E26B5243 for ; Thu, 30 Aug 2018 10:44:46 -0400 (EDT) Received: by mail-pl1-f199.google.com with SMTP id b93-v6so4057162plb.10 for ; Thu, 30 Aug 2018 07:44:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=E8OuBBuYqzTnoDRh7sIExW9D2eaT+4irfvEVkuj+fhE=; b=O0MYFLjpoaTjyI00s4RgjOUsfeKjA4cEIXInL/ZTmVYlRHkpvf7C1C//66hfdqp4Ei t8EdITy2MiCUuIfNaFQ3KYiD3oBpxtEI+QqlDT2x9CQEGSb9S33yMgKwrftqSVR4OVv/ oW1reJcbYmxPiJbvXecpGkBGUC2duat9X93E7umwT0uygQwF71SCV5Ev7fu4lXjiBUGo Cqlia7wqy0ayBlgASFL0KzOqiAdL590mvh5D5UiCvJF4bNPDqdjLB/whlLyNeyiQtQWX if8OR5g07nulfdGBHqt1lBTJwSaWmc4cSIuNKry88A9QxpKRM2pLjMieSk2JlfsVlbQz z2pg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APzg51CCECqOSwWdN+W/EoPz4lG84sAbLb6ltodxCDpj+rPoCPJ4h8lj mB4Xc0rYbZTZfU0dXJtnOoD4xkqvJVJ6WuDzpPIpvVjvsbzU/GMyM/gbcLydOqN+YG3U/ttUgAZ as8ihPlMiix6f4V8SxD4S3SNd0bpthdkF9wJkXCatuP8BGiJ3MBzU8CJe3aQJEFKBNg== X-Received: by 2002:a63:9a42:: with SMTP id e2-v6mr10347224pgo.263.1535640286466; Thu, 30 Aug 2018 07:44:46 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZkbmlmlC77cbzQ7Iv+L7jNY0Tld8cATffmOYe6ds2apE0kfKTxbj1NU94n5PLlixJ4ho66 X-Received: by 2002:a63:9a42:: with SMTP id e2-v6mr10347166pgo.263.1535640285200; Thu, 30 Aug 2018 07:44:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535640285; cv=none; d=google.com; s=arc-20160816; b=APl8TbsEznj2G9Ykm8B1M0Q2Xz0IZkTvH/1XBfxfClesHe6Grv8Pkn51zmOWZCFFNZ fVv/g+oSDZCk2b5ge0bdAfp+0CRtaSt6Be3CjnMZ3RphWcyvttBB5f/d4XQAWlJOgtfi Tw6OPtAZNLxc2/GZthnN3U7XTF53WHerE8gZm6neTCs0+fCm8n+vv8t5QWvOA1vV999p Ia+yVsZ3CncHjLYgDGQCtJRxDE+15M/0TqAaX09vrqea4fH6qZYom/VgLVWhjzqY5Dln 7k/heBlkPsp5MGfEG/NptNp/vjHLZJGGmHtDFaYGVATJRwux3oHLA520cTuOXg7O8nlr /RdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=E8OuBBuYqzTnoDRh7sIExW9D2eaT+4irfvEVkuj+fhE=; b=eqG0cBTJ+aEfteHhuIC93w8R04kXD+a0xQe+QylaeCJowRAbWH8d19a6cYrRZNIgl6 UkvxOsaSlvYGN6rYKVPpT+9PP68T81IIGaH6vJCNl0dFEFCWikGULBveO6Q8P7jRQ9aU 9NPB7mGxDAA498FyeNpAbYglSbBPVFrIyTKxh8fJeXTsUWJDuNF0ljyeUP+cF6teE9Qd jmd9XE3gcyIdOGKZU1Dn+JoLJfvdOD6lHbxRDY6nPvPOt5hR/xGQZHIg46E8MUnb8otc IFnWbpvHdDTsGVk4Z4iGVRfjlOBL7yg/XCRXMMwW7ua3MLo+hO6MuzH4nPZG6Ruhuo3L Aaiw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id m13-v6si6713043pgk.251.2018.08.30.07.44.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 07:44:45 -0700 (PDT) Received-SPF: pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of yu-cheng.yu@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=yu-cheng.yu@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Aug 2018 07:44:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,307,1531810800"; d="scan'208";a="228910416" Received: from 2b52.sc.intel.com ([143.183.136.52]) by orsmga004.jf.intel.com with ESMTP; 30 Aug 2018 07:44:33 -0700 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Cyrill Gorcunov , Dave Hansen , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , "Ravi V. Shankar" , Vedvyas Shanbhogue Cc: Yu-cheng Yu Subject: [RFC PATCH v3 8/8] x86/cet: Add PTRACE interface for CET Date: Thu, 30 Aug 2018 07:40:09 -0700 Message-Id: <20180830144009.3314-9-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180830144009.3314-1-yu-cheng.yu@intel.com> References: <20180830144009.3314-1-yu-cheng.yu@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Add REGSET_CET64/REGSET_CET32 to get/set CET MSRs: IA32_U_CET (user-mode CET settings), IA32_PL3_SSP (user-mode shadow stack), IA32_PL0_SSP (kernel-mode shadow stack), IA32_PL1_SSP (ring-1 shadow stack), IA32_PL2_SSP (ring-2 shadow stack). Signed-off-by: Yu-cheng Yu --- arch/x86/include/asm/fpu/regset.h | 7 +++--- arch/x86/kernel/fpu/regset.c | 41 +++++++++++++++++++++++++++++++ arch/x86/kernel/ptrace.c | 16 ++++++++++++ include/uapi/linux/elf.h | 1 + 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/fpu/regset.h b/arch/x86/include/asm/fpu/regset.h index d5bdffb9d27f..edad0d889084 100644 --- a/arch/x86/include/asm/fpu/regset.h +++ b/arch/x86/include/asm/fpu/regset.h @@ -7,11 +7,12 @@ #include -extern user_regset_active_fn regset_fpregs_active, regset_xregset_fpregs_active; +extern user_regset_active_fn regset_fpregs_active, regset_xregset_fpregs_active, + cetregs_active; extern user_regset_get_fn fpregs_get, xfpregs_get, fpregs_soft_get, - xstateregs_get; + xstateregs_get, cetregs_get; extern user_regset_set_fn fpregs_set, xfpregs_set, fpregs_soft_set, - xstateregs_set; + xstateregs_set, cetregs_set; /* * xstateregs_active == regset_fpregs_active. Please refer to the comment diff --git a/arch/x86/kernel/fpu/regset.c b/arch/x86/kernel/fpu/regset.c index bc02f5144b95..7008eb084d36 100644 --- a/arch/x86/kernel/fpu/regset.c +++ b/arch/x86/kernel/fpu/regset.c @@ -160,6 +160,47 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset, return ret; } +int cetregs_active(struct task_struct *target, const struct user_regset *regset) +{ +#ifdef CONFIG_X86_INTEL_CET + if (target->thread.cet.shstk_enabled || target->thread.cet.ibt_enabled) + return regset->n; +#endif + return 0; +} + +int cetregs_get(struct task_struct *target, const struct user_regset *regset, + unsigned int pos, unsigned int count, + void *kbuf, void __user *ubuf) +{ + struct fpu *fpu = &target->thread.fpu; + struct cet_user_state *cetregs; + + if (!boot_cpu_has(X86_FEATURE_SHSTK)) + return -ENODEV; + + cetregs = get_xsave_addr(&fpu->state.xsave, XFEATURE_MASK_SHSTK_USER); + + fpu__prepare_read(fpu); + return user_regset_copyout(&pos, &count, &kbuf, &ubuf, cetregs, 0, -1); +} + +int cetregs_set(struct task_struct *target, const struct user_regset *regset, + unsigned int pos, unsigned int count, + const void *kbuf, const void __user *ubuf) +{ + struct fpu *fpu = &target->thread.fpu; + struct cet_user_state *cetregs; + + if (!boot_cpu_has(X86_FEATURE_SHSTK)) + return -ENODEV; + + cetregs = get_xsave_addr(&fpu->state.xsave, XFEATURE_MASK_SHSTK_USER); + + fpu__prepare_write(fpu); + return user_regset_copyin(&pos, &count, &kbuf, &ubuf, cetregs, 0, -1); +} + #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION /* diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index e2ee403865eb..ac2bc3a18427 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -49,7 +49,9 @@ enum x86_regset { REGSET_IOPERM64 = REGSET_XFP, REGSET_XSTATE, REGSET_TLS, + REGSET_CET64 = REGSET_TLS, REGSET_IOPERM32, + REGSET_CET32, }; struct pt_regs_offset { @@ -1276,6 +1278,13 @@ static struct user_regset x86_64_regsets[] __ro_after_init = { .size = sizeof(long), .align = sizeof(long), .active = ioperm_active, .get = ioperm_get }, + [REGSET_CET64] = { + .core_note_type = NT_X86_CET, + .n = sizeof(struct cet_user_state) / sizeof(u64), + .size = sizeof(u64), .align = sizeof(u64), + .active = cetregs_active, .get = cetregs_get, + .set = cetregs_set + }, }; static const struct user_regset_view user_x86_64_view = { @@ -1331,6 +1340,13 @@ static struct user_regset x86_32_regsets[] __ro_after_init = { .size = sizeof(u32), .align = sizeof(u32), .active = ioperm_active, .get = ioperm_get }, + [REGSET_CET32] = { + .core_note_type = NT_X86_CET, + .n = sizeof(struct cet_user_state) / sizeof(u64), + .size = sizeof(u64), .align = sizeof(u64), + .active = cetregs_active, .get = cetregs_get, + .set = cetregs_set + }, }; static const struct user_regset_view user_x86_32_view = { diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h index 5ef25a565e88..f4cdfdc59c0a 100644 --- a/include/uapi/linux/elf.h +++ b/include/uapi/linux/elf.h @@ -401,6 +401,7 @@ typedef struct elf64_shdr { #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ +#define NT_X86_CET 0x203 /* x86 cet state */ #define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ #define NT_S390_TIMER 0x301 /* s390 timer register */ #define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */