Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp1240039ybi; Fri, 31 May 2019 16:36:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqxYxY4B7Q3CUV6riPfYee07KmBiQ5lztWuWLi8wZghu6AhrcwsLfOwZfzHyvx1DOHZzOQZk X-Received: by 2002:a65:5304:: with SMTP id m4mr12132810pgq.126.1559345787174; Fri, 31 May 2019 16:36:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559345787; cv=none; d=google.com; s=arc-20160816; b=dcSoV377K5RvRxwkG5PRIAqAGEorQhd/Ct0HiPy+PxXCtB8U2+DmlZLE40hU5Mgr1T LBFu9s3MFrZRCfx//r1dArfKEFhEyRrM2Ui3C1lZ9/khI7JgWWwtJiAmwEwMUotaxuMZ bdu7buq+pyLeS82i+n06akF0g1ZYkSmucbcfUpv8WKpI4WOjk2H6KADhfCB7QjJRjWzT N3/EknHfRAtauUOZ/ExCbs08cCvSWkdDPKL4mpw/k8SbXr6Np9uWuCg944JFxnyg5dEO Kl+1Y5PzutAAGk9COpOGhnrE/wB6Wlv00aiMagOMESq89PcwEhGDBNNtj4Zmn2euRVDs QwHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=PQPBF5T1QW/1EU3gsI0Cy5qnIDfLptduMfDS9Md76tc=; b=H74j4dvhKA1vV0B4pSxfbt9pv8ruboHlFC9gVAPozDpmLGXrdHzsfyhnc1301K5yet XtWBp/Ba1572vJ1YyGEc1IhCijGwRWo19TPj/KmCCCcmOXNRrl1zVo4l9JVoalzLQrSM P4mrVnV4TQRvIthNczcMs0DCIyPRBy3OG8TyLQG8Uckr0FLQNzsjWmf8yMxAHJrR23sr u+ekz6xkrvvRRnXV5RFdp2yiSeSFxWjIvi8N7aQ/OPpDbJ0rUTa7y0RylItAVCNLc5kI 17s6jbKSyc8ZoZ5ogv7xjFhsDXxOSU6sY2LwjzHqSWu3RX7P276wFWjTfi8kDG45nLk0 du1w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d15si8079870plr.410.2019.05.31.16.36.12; Fri, 31 May 2019 16:36:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726894AbfEaXd0 (ORCPT + 99 others); Fri, 31 May 2019 19:33:26 -0400 Received: from mga07.intel.com ([134.134.136.100]:59345 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726635AbfEaXcb (ORCPT ); Fri, 31 May 2019 19:32:31 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 May 2019 16:32:30 -0700 X-ExtLoop1: 1 Received: from sjchrist-coffee.jf.intel.com ([10.54.74.36]) by orsmga008.jf.intel.com with ESMTP; 31 May 2019 16:32:30 -0700 From: Sean Christopherson To: Jarkko Sakkinen Cc: Andy Lutomirski , Cedric Xing , Stephen Smalley , James Morris , "Serge E . Hallyn" , LSM List , Paul Moore , Eric Paris , selinux@vger.kernel.org, Jethro Beekman , Dave Hansen , Thomas Gleixner , Linus Torvalds , LKML , X86 ML , linux-sgx@vger.kernel.org, Andrew Morton , nhorman@redhat.com, npmccallum@redhat.com, Serge Ayoun , Shay Katz-zamir , Haitao Huang , Andy Shevchenko , Kai Svahn , Borislav Petkov , Josh Triplett , Kai Huang , David Rientjes , William Roberts , Philip Tricca Subject: [RFC PATCH 2/9] x86/sgx: Do not naturally align MAP_FIXED address Date: Fri, 31 May 2019 16:31:52 -0700 Message-Id: <20190531233159.30992-3-sean.j.christopherson@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190531233159.30992-1-sean.j.christopherson@intel.com> References: <20190531233159.30992-1-sean.j.christopherson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGX enclaves have an associated Enclave Linear Range (ELRANGE) that is tracked and enforced by the CPU using a base+mask approach, similar to how hardware range registers such as the variable MTRRs. As a result, the ELRANGE must be naturally sized and aligned. To reduce boilerplate code that would be needed in every userspace enclave loader, the SGX driver naturally aligns the mmap() address and also requires the range to be naturally sized. Unfortunately, SGX fails to grant a waiver to the MAP_FIXED case, e.g. incorrectly rejects mmap() if userspace is attempting to map a small slice of an existing enclave. Signed-off-by: Sean Christopherson --- arch/x86/kernel/cpu/sgx/driver/main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/sgx/driver/main.c b/arch/x86/kernel/cpu/sgx/driver/main.c index afe844aa81d6..129d356aff30 100644 --- a/arch/x86/kernel/cpu/sgx/driver/main.c +++ b/arch/x86/kernel/cpu/sgx/driver/main.c @@ -79,7 +79,13 @@ static unsigned long sgx_get_unmapped_area(struct file *file, unsigned long pgoff, unsigned long flags) { - if (len < 2 * PAGE_SIZE || len & (len - 1) || flags & MAP_PRIVATE) + if (flags & MAP_PRIVATE) + return -EINVAL; + + if (flags & MAP_FIXED) + return addr; + + if (len < 2 * PAGE_SIZE || len & (len - 1)) return -EINVAL; addr = current->mm->get_unmapped_area(file, addr, 2 * len, pgoff, -- 2.21.0