Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1058417ybl; Wed, 11 Dec 2019 11:47:32 -0800 (PST) X-Google-Smtp-Source: APXvYqyYJdf2n9eTfjVzIXgE+E0JixkTFQfUXdNw7mObdlDAiDypeGtqAN04YxxkFBNJW8FxhgoM X-Received: by 2002:a05:6830:130d:: with SMTP id p13mr3721459otq.161.1576093652301; Wed, 11 Dec 2019 11:47:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576093652; cv=none; d=google.com; s=arc-20160816; b=GSMDLEDaoJ1Ot6bC74o2Yzp/Ad1o1GDC/IwgAgCCoWKcntk1ravMJtY97FNSPHw1jr GG0JMqxjaMGqNqcxF8EvfCH0hsdIKiwl/AsFsVOZo1IyFHVY3r7t2OvrM5k+g9G4vJih HWJVrJ54DZ//YdoWCnDJCdGXho74+fP1r8pQFL13XCerpSHcyiwsJEjC3Y3NZayH2IH/ 6010e0Qfo+FPQO8N2OXZUisIXF+puWuM4LSCqXV7fdWHL6wIts47F82ouqQQZIrm1JUn I5dEyO7vMSpio+9obfnlM8LVi8imIVl+GRjKTpSA675pklDMnmg17epADT67zB2YBEZi lmPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=eThurwhGsm2B6q3iIMHM88H1qXnCFgfSyZ1R5IN3D8Q=; b=oOtjSQBWu58WqFfvl5EqJkL1yUmqmDu6K59L8UNU9zLMCirfhnwH9hLCQV6cAp04+8 ZPvkli9LnUZOD/vvijwcwzvZo/kozDvuIpCzErv4bk3+UY4R8zm5yxE8yRWMqVjficL8 ot4zDSZvJEzSohFqPY+XQQnvUIPg8Q1hLMgi0NwbU2Q4KI5PhHYPwzkL8FT1q2DLGsv0 udYwIpVGVL+C69Z33cFp21Gznv1jLeUvC5FJo8q6V/ZSpC+yv4zV3jWv+aq7bTsHORRQ YRhEQaJY1TcrjwOxOkZrULwyPRtFU2STY/67iOBMHl1JhvJnA2uafTBlh+d8V4U3RLz/ nBhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Umx9+Upz; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v4si1697003oth.3.2019.12.11.11.47.20; Wed, 11 Dec 2019 11:47:32 -0800 (PST) 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; dkim=pass header.i=@google.com header.s=20161025 header.b=Umx9+Upz; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727016AbfLKTqw (ORCPT + 99 others); Wed, 11 Dec 2019 14:46:52 -0500 Received: from mail-ua1-f74.google.com ([209.85.222.74]:54554 "EHLO mail-ua1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729231AbfLKTqv (ORCPT ); Wed, 11 Dec 2019 14:46:51 -0500 Received: by mail-ua1-f74.google.com with SMTP id x2so6485818uaj.21 for ; Wed, 11 Dec 2019 11:46:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=eThurwhGsm2B6q3iIMHM88H1qXnCFgfSyZ1R5IN3D8Q=; b=Umx9+Upz6YY6XIihuoQd5zSRR25JpUE9443iw0slpTRt9rNrW/QtJnrqTveFBBtjJu 2JH4MKsLoac9Cd2LcAoXkBqLPsZlRurSsea3TqpFF1YcgKgM46PKOFk15t4RttfJzw7Z 3WRf8UtSA8Cah1PzwrHkcXbW3XZuz32fyOKGdfbg7u+y00MScxn6dR9QwQTCKTbfPfDw 7PZBlKQxhxQxVe5kgqyq6eGry8rcdQPjRGEdXzIUzwxr54P9t/0U4NXLP6nViYUJoh61 Xt9Gj3hlTbCPYMCcmN21UifbHrNWP0kWauzhxKpIAla7DlfZwJxBIAisTHiAbjaf0SSB ubyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=eThurwhGsm2B6q3iIMHM88H1qXnCFgfSyZ1R5IN3D8Q=; b=dfXQFM3rJXVhTckozJK4GdqyWiJ76G022biRAqM6gVALqd+ZRFTkMtHQZwgaRM/yx2 XMFXSXHTm3h21WZwMp97S/Qj7B1riZI+8p0AaVRgHP7DcynAiyBAezlOhDZ/wbNRxP2R m4iR0g9Fkjjo4IJ4jYVxe3mzs5ejYHnqK9fEPZlKFr099pSbagpVKgdRO4t2QD6zgm1O m3EEwUILEoG7rjSV1HcJHtqAhEHBCM/TvqvRV8pOZfNaY7SJIXlhu1OO0SEI+CEmt4x8 LX0szLEYTGqUDoheJzgHxp2lgVSPMSiGFO2jg0L2jYSYdDUlj9gpHcHAMldAF//Cfw05 JQ2w== X-Gm-Message-State: APjAAAUz8mypNtjHbO+YUffn+Y5iEBcFxJBwzCFpcI6ksE/mWWtPbK4a Tk7tU+2ERLeT+VBBwnILiRLh/FAr X-Received: by 2002:ac5:c99c:: with SMTP id e28mr5314125vkm.52.1576093609782; Wed, 11 Dec 2019 11:46:49 -0800 (PST) Date: Wed, 11 Dec 2019 14:46:06 -0500 In-Reply-To: <20191211194606.87940-1-brho@google.com> Message-Id: <20191211194606.87940-4-brho@google.com> Mime-Version: 1.0 References: <20191211194606.87940-1-brho@google.com> X-Mailer: git-send-email 2.24.0.525.g8f36a354ae-goog Subject: [PATCH 3/3] iommu/vt-d: skip invalid RMRR entries From: Barret Rhoden To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , David Woodhouse , Joerg Roedel , Yian Chen , Sohil Mehta Cc: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The VT-d docs specify requirements for the RMRR entries base and end (called 'Limit' in the docs) addresses. This commit will cause the DMAR processing to skip any RMRR entries that do not meet these requirements with the expectation that firmware is giving us junk. Signed-off-by: Barret Rhoden --- drivers/iommu/intel-iommu.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index f7e09244c9e4..11322fefb883 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -4307,6 +4307,18 @@ static void __init init_iommu_pm_ops(void) static inline void init_iommu_pm_ops(void) {} #endif /* CONFIG_PM */ +static int rmrr_validity_check(struct acpi_dmar_reserved_memory *rmrr) +{ + if ((rmrr->base_address & PAGE_MASK) || + (rmrr->end_address <= rmrr->base_address) || + ((rmrr->end_address - rmrr->base_address + 1) & PAGE_MASK)) { + pr_err(FW_BUG "Broken RMRR base: %#018Lx end: %#018Lx\n", + rmrr->base_address, rmrr->end_address); + return -EINVAL; + } + return 0; +} + int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg) { struct acpi_dmar_reserved_memory *rmrr; @@ -4314,7 +4326,7 @@ int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg) int ret; rmrr = (struct acpi_dmar_reserved_memory *)header; - ret = arch_rmrr_sanity_check(rmrr); + ret = rmrr_validity_check(rmrr) || arch_rmrr_sanity_check(rmrr); if (ret) return 0; -- 2.24.0.525.g8f36a354ae-goog