Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp1519522pxb; Wed, 12 Jan 2022 17:11:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJzJc3xTlMv59JP3yx+wTilhc/12Mn4CBrgijsbaKZ/NWC73D0ykvJL9Owz1CizVE7cyd47N X-Received: by 2002:a17:906:74db:: with SMTP id z27mr1741828ejl.110.1642036313339; Wed, 12 Jan 2022 17:11:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642036313; cv=none; d=google.com; s=arc-20160816; b=en1bwktAWVmVszANXsmaktRw0SfNNJFo6psj0BHzZLVXFui543a5Ao6q4+rk/iMfhk E60vkDIqAxR5OqVgUks36DQbYeeT7S8GM0KcEird8GT+UKh/ChS/qK/vquEcneH9gviK m9k8brdBsegv2SxA9AI1Tw+hK9EYSRnnrTH+GJXRoQyYylimctUiyo+GBZAVVyQ+YMzQ 6dmwZvBS/7IVupBQL51Z3LCLvhqu/343laJby/lWkKM1i+FUnbEi2mHrC4aWoTVgvDSp Z/weZRZI9Rw0DhllB454CeBNfrB0empyEwI7D+hrEABfwJ9+uLpHx8E2gV/wlaD9LCdG YKEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature; bh=CfspR98dUesvKgFLLCBWrPp7RK/0iMOyztoqAUVi8pg=; b=In1hp+d9A7yvmMzEcXIsxa7TVipUcNa2TcK6I0aVPzvYhptAa6XvA8diK0A5sAkqEX QqumJwL//RmHePks+p4CgSnjsqP1ZBfR5IUuwPQKRpABokeV2FFCjdf6pytMzjNHEkt4 OXEwrF+wBm+EyVdrN7WdhbJxMvNJjrN6k2xCjlq7RinJ281rUfWNywy6ApEjU2cbB0bA K/gEzC0Gfu6xu8OnRqpQSjYtfYzsHCInHIFslLWBm/mfRQR1zzZrAVV4GjpFCKLe/NSl s0NvPeFJFC9hqxwnVmDTODLNwHDyYZskJPDNP+v7wAe7eFCv0mdW3ciYjUWDjiMMjosj 46NA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fkohOsOD; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sc11si742445ejc.65.2022.01.12.17.11.22; Wed, 12 Jan 2022 17:11:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=fkohOsOD; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230376AbiALVUj (ORCPT + 99 others); Wed, 12 Jan 2022 16:20:39 -0500 Received: from mga03.intel.com ([134.134.136.65]:1419 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230079AbiALVUi (ORCPT ); Wed, 12 Jan 2022 16:20:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642022438; x=1673558438; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=Z3pTsdcyEg0Cysyg0rQo7WWdsgj62MRS390COBMyxXg=; b=fkohOsODes00MtZzl37c159Bnh6KavbyVJ7KM61a61zSfXtGRfifJHs7 FRlQr10HMUaH9NVDhjrRNBoZNhW8wE4J2kCmn0YAUkQWUbWs7kSo4mMYm uIIYvM9JwvEt+lQUUsMuCBHpY57yKwscTgzg1sMpc46vl7lmJE9fHxGLn d0uv+2RsLNqQmSCeURnuZ+8TUek4AyOmuPK81H09ZqY+71za3JtVzzNCr oKTVaEjaHcQ7KDTc9Fbs//pKfNNljPoHTckHK2dx1cJpOjVtkqMBkhVYM uj6hWiSZJ3MLjwXubFtb2EpA4TgReUdMaKDueAhPFpo6xUKgzY6NcVFR6 g==; X-IronPort-AV: E=McAfee;i="6200,9189,10225"; a="243810785" X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="243810785" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 13:20:38 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="529378229" Received: from chang-linux-3.sc.intel.com ([172.25.66.175]) by orsmga008.jf.intel.com with ESMTP; 12 Jan 2022 13:20:38 -0800 From: "Chang S. Bae" To: linux-crypto@vger.kernel.org, dm-devel@redhat.com, herbert@gondor.apana.org.au, ebiggers@kernel.org, ardb@kernel.org, x86@kernel.org, luto@kernel.org, tglx@linutronix.de, bp@suse.de, dave.hansen@linux.intel.com, mingo@kernel.org Cc: linux-kernel@vger.kernel.org, dan.j.williams@intel.com, charishma1.gairuboyina@intel.com, kumar.n.dwarakanath@intel.com, ravi.v.shankar@intel.com, chang.seok.bae@intel.com Subject: [PATCH v5 02/12] x86/cpufeature: Enumerate Key Locker feature Date: Wed, 12 Jan 2022 13:12:48 -0800 Message-Id: <20220112211258.21115-3-chang.seok.bae@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220112211258.21115-1-chang.seok.bae@intel.com> References: <20220112211258.21115-1-chang.seok.bae@intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Key Locker is a CPU feature to minimize exposure of clear-text key material. An encoded form, called 'key handle', is referenced for data encryption or decryption instead of accessing the clear text key. A wrapping key loaded in the CPU's software-inaccessible state is used to transform a user key into a key handle. It supports Advanced Encryption Standard (AES) cipher algorithm with new SIMD instruction set like its predecessor (AES-NI). So a new AES implementation will follow in the kernel's crypto library. Here add it to enumerate the hardware capability, but it will not be shown in /proc/cpuinfo as userspace usage is not supported. Make the feature depend on XMM2 as it comes with AES SIMD instructions. Add X86_FEATURE_KEYLOCKER to the disabled features mask. It will be enabled under a new config option. Signed-off-by: Chang S. Bae Reviewed-by: Dan Williams Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org --- Changes from RFC v2: * Do not publish the feature flag to userspace. * Update the changelog. Changes from RFC v1: * Updated the changelog. --- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/disabled-features.h | 8 +++++++- arch/x86/include/uapi/asm/processor-flags.h | 2 ++ arch/x86/kernel/cpu/cpuid-deps.c | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index d5b5f2ab87a0..e1964446bbe5 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -361,6 +361,7 @@ #define X86_FEATURE_AVX512_VPOPCNTDQ (16*32+14) /* POPCNT for vectors of DW/QW */ #define X86_FEATURE_LA57 (16*32+16) /* 5-level page tables */ #define X86_FEATURE_RDPID (16*32+22) /* RDPID instruction */ +#define X86_FEATURE_KEYLOCKER (16*32+23) /* "" Key Locker */ #define X86_FEATURE_BUS_LOCK_DETECT (16*32+24) /* Bus Lock detect */ #define X86_FEATURE_CLDEMOTE (16*32+25) /* CLDEMOTE instruction */ #define X86_FEATURE_MOVDIRI (16*32+27) /* MOVDIRI instruction */ diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h index 8f28fafa98b3..75e1e87640d4 100644 --- a/arch/x86/include/asm/disabled-features.h +++ b/arch/x86/include/asm/disabled-features.h @@ -44,6 +44,12 @@ # define DISABLE_OSPKE (1<<(X86_FEATURE_OSPKE & 31)) #endif /* CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS */ +#ifdef CONFIG_X86_KEYLOCKER +# define DISABLE_KEYLOCKER 0 +#else +# define DISABLE_KEYLOCKER (1<<(X86_FEATURE_KEYLOCKER & 31)) +#endif /* CONFIG_X86_KEYLOCKER */ + #ifdef CONFIG_X86_5LEVEL # define DISABLE_LA57 0 #else @@ -85,7 +91,7 @@ #define DISABLED_MASK14 0 #define DISABLED_MASK15 0 #define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP| \ - DISABLE_ENQCMD) + DISABLE_ENQCMD|DISABLE_KEYLOCKER) #define DISABLED_MASK17 0 #define DISABLED_MASK18 0 #define DISABLED_MASK19 0 diff --git a/arch/x86/include/uapi/asm/processor-flags.h b/arch/x86/include/uapi/asm/processor-flags.h index bcba3c643e63..b958a95a0908 100644 --- a/arch/x86/include/uapi/asm/processor-flags.h +++ b/arch/x86/include/uapi/asm/processor-flags.h @@ -124,6 +124,8 @@ #define X86_CR4_PCIDE _BITUL(X86_CR4_PCIDE_BIT) #define X86_CR4_OSXSAVE_BIT 18 /* enable xsave and xrestore */ #define X86_CR4_OSXSAVE _BITUL(X86_CR4_OSXSAVE_BIT) +#define X86_CR4_KEYLOCKER_BIT 19 /* enable Key Locker */ +#define X86_CR4_KEYLOCKER _BITUL(X86_CR4_KEYLOCKER_BIT) #define X86_CR4_SMEP_BIT 20 /* enable SMEP support */ #define X86_CR4_SMEP _BITUL(X86_CR4_SMEP_BIT) #define X86_CR4_SMAP_BIT 21 /* enable SMAP support */ diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c index c881bcafba7d..abe7e04b27d9 100644 --- a/arch/x86/kernel/cpu/cpuid-deps.c +++ b/arch/x86/kernel/cpu/cpuid-deps.c @@ -78,6 +78,7 @@ static const struct cpuid_dep cpuid_deps[] = { { X86_FEATURE_XFD, X86_FEATURE_XSAVES }, { X86_FEATURE_XFD, X86_FEATURE_XGETBV1 }, { X86_FEATURE_AMX_TILE, X86_FEATURE_XFD }, + { X86_FEATURE_KEYLOCKER, X86_FEATURE_XMM2 }, {} }; -- 2.17.1