From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753319AbbHDFvp (ORCPT ); Tue, 4 Aug 2015 01:51:45 -0400 Received: from m50-112.126.com ([123.125.50.112]:40529 "EHLO m50-112.126.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753108AbbHDFvm (ORCPT ); Tue, 4 Aug 2015 01:51:42 -0400 From: Xunlei Pang To: linux-kernel@vger.kernel.org, Daniel Lezcano Cc: "Rafael J. Wysocki" , linux-pm@vger.kernel.org, Xunlei Pang Subject: [PATCH v2 3/3] cpuidle/coupled: Add sanity check for safe_state_index Date: Tue, 4 Aug 2015 13:48:57 +0800 Message-Id: <1438667337-16903-3-git-send-email-xlpang@126.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1438667337-16903-1-git-send-email-xlpang@126.com> References: <1438667337-16903-1-git-send-email-xlpang@126.com> X-CM-TRANSID: j9KowAAXLUKAUsBVumIjAQ--.6195S5 X-Coremail-Antispam: 1Uf129KBjvdXoW7Xw1rur1UXry5CryUCw18Grg_yoWkCFb_uw 10qr97Jr1j9F1kKa9Fvwn3Z34I9F45WrWkWr1IvFy5Aw1kZrZ7t3yDZ343Xa1Uuw4akF98 tw4UJ340krykAjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IU5jAp5UUUUU== X-Originating-IP: [210.21.223.3] X-CM-SenderInfo: p0ost0bj6rjloofrz/1tbiWwtMv1PM+Dgp4wAAs2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Xunlei Pang Since we're using cpuidle_driver::safe_state_index directly as the target state index, it's better to add the sanity check at the point of registering the driver. Signed-off-by: Xunlei Pang --- drivers/cpuidle/driver.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c index 5db1478..def299e 100644 --- a/drivers/cpuidle/driver.c +++ b/drivers/cpuidle/driver.c @@ -223,10 +223,23 @@ static void poll_idle_init(struct cpuidle_driver *drv) {} static int __cpuidle_register_driver(struct cpuidle_driver *drv) { int ret; +#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED + int i; +#endif if (!drv || !drv->state_count) return -EINVAL; +#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED + for (i = drv->state_count - 1; i >= 0; i--) { + if (cpuidle_state_is_coupled(drv, i) && + (drv->safe_state_index == i || + drv->safe_state_index < 0 || + drv->safe_state_index >= drv->state_count)) + return -EINVAL; + } +#endif + if (cpuidle_disabled()) return -ENODEV; -- 1.9.1