From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932945AbbI2IQI (ORCPT ); Tue, 29 Sep 2015 04:16:08 -0400 Received: from terminus.zytor.com ([198.137.202.10]:37256 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932763AbbI2IP7 (ORCPT ); Tue, 29 Sep 2015 04:15:59 -0400 Date: Tue, 29 Sep 2015 01:15:41 -0700 From: tip-bot for Robert Richter Message-ID: Cc: tchalamarla@cavium.com, jason@lakedaemon.net, linux-kernel@vger.kernel.org, hpa@zytor.com, marc.zyngier@arm.com, tglx@linutronix.de, mingo@kernel.org, catalin.marinas@arm.com, rrichter@cavium.com Reply-To: mingo@kernel.org, catalin.marinas@arm.com, tglx@linutronix.de, rrichter@cavium.com, marc.zyngier@arm.com, hpa@zytor.com, linux-kernel@vger.kernel.org, jason@lakedaemon.net, tchalamarla@cavium.com In-Reply-To: <1442869119-1814-2-git-send-email-rric@kernel.org> References: <1442869119-1814-2-git-send-email-rric@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:irq/core] irqchip/gicv3-its: Add range check for number of allocated pages Git-Commit-ID: 30f2136346cab91e1ffd9ee6370d76809f20487a X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 30f2136346cab91e1ffd9ee6370d76809f20487a Gitweb: http://git.kernel.org/tip/30f2136346cab91e1ffd9ee6370d76809f20487a Author: Robert Richter AuthorDate: Mon, 21 Sep 2015 22:58:34 +0200 Committer: Thomas Gleixner CommitDate: Tue, 29 Sep 2015 10:10:53 +0200 irqchip/gicv3-its: Add range check for number of allocated pages The number of pages for the its table may exceed the maximum of 256. Adding a range check and limitting the number to its maximum. Based on a patch from Tirumalesh Chalamarla . Signed-off-by: Tirumalesh Chalamarla Signed-off-by: Robert Richter Reviewed-by: Marc Zyngier Acked-by: Catalin Marinas Cc: linux-arm-kernel@lists.infradead.org Cc: Jason Cooper Link: http://lkml.kernel.org/r/1442869119-1814-2-git-send-email-rric@kernel.org Signed-off-by: Thomas Gleixner --- drivers/irqchip/irq-gic-v3-its.c | 11 ++++++++++- include/linux/irqchip/arm-gic-v3.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index ac7ae2b..d9052fd 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -822,6 +822,7 @@ static int its_alloc_tables(const char *node_name, struct its_node *its) u64 entry_size = GITS_BASER_ENTRY_SIZE(val); int order = get_order(psz); int alloc_size; + int alloc_pages; u64 tmp; void *base; @@ -856,6 +857,14 @@ static int its_alloc_tables(const char *node_name, struct its_node *its) } alloc_size = (1 << order) * PAGE_SIZE; + alloc_pages = (alloc_size / psz); + if (alloc_pages > GITS_BASER_PAGES_MAX) { + alloc_pages = GITS_BASER_PAGES_MAX; + order = get_order(GITS_BASER_PAGES_MAX * psz); + pr_warn("%s: Device Table too large, reduce its page order to %u (%u pages)\n", + node_name, order, alloc_pages); + } + base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order); if (!base) { err = -ENOMEM; @@ -884,7 +893,7 @@ retry_baser: break; } - val |= (alloc_size / psz) - 1; + val |= alloc_pages - 1; writeq_relaxed(val, its->base + GITS_BASER + i * 8); tmp = readq_relaxed(its->base + GITS_BASER + i * 8); diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h index 9eeeb95..c0c8a2e 100644 --- a/include/linux/irqchip/arm-gic-v3.h +++ b/include/linux/irqchip/arm-gic-v3.h @@ -231,6 +231,7 @@ #define GITS_BASER_PAGE_SIZE_16K (1UL << GITS_BASER_PAGE_SIZE_SHIFT) #define GITS_BASER_PAGE_SIZE_64K (2UL << GITS_BASER_PAGE_SIZE_SHIFT) #define GITS_BASER_PAGE_SIZE_MASK (3UL << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGES_MAX 256 #define GITS_BASER_TYPE_NONE 0 #define GITS_BASER_TYPE_DEVICE 1