From patchwork Tue Dec 26 07:26:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: gaurav jindal X-Patchwork-Id: 122722 Delivered-To: patch@linaro.org Received: by 10.140.22.227 with SMTP id 90csp627639qgn; Mon, 25 Dec 2017 23:26:33 -0800 (PST) X-Google-Smtp-Source: ACJfBotuHoL8l2+/asCRWCFQAgnDH82/VZbvv0/aTcvbsokQgVgOLKo4heVGz9OxlWckcVkt+B08 X-Received: by 10.84.160.195 with SMTP id v3mr25208870plg.218.1514273193534; Mon, 25 Dec 2017 23:26:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514273193; cv=none; d=google.com; s=arc-20160816; b=WSO/K+l3dGEAGjcobZl/BFt3B/90VxeQ5TjZS7DNCjvFd4GdzW6QQme7E/u6xDWAAV szVjkf3sORnfN7lav2XPPAI0THIn5kNKe4fQwAoIZDzlYF4kgqqzYyUsyLnFcvIubz1g ne+zveeFLnhhyU794t7V6LKOyax1Uc1U6gwkcCnZHJGakQJysgRzZ7JJvNov1nD8A9k0 FwR6i723sdmseDPAZTxBvCLpkMEmqA5xIXVTvO7IcasCMMWyofFGRSQ0AFVeiT+bgCq8 8YOPjwZRASpdslsuUAGl9XszfliZH08RZPaQkMFNFkafKtkk0xockPDMiSDWINLJCSxo HlbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=4qx2Na9q9UFxB0jBi8emuDCDK8I7TvGwJPHX6SuZCMA=; b=P4jWhLvX70YWrh3bBvZD9atoD2TiHZXqVMMnrG7x/g6JbK05arD5Zy3rtuHDMtKg8W K7XxxYRjtct7zpo+Ue7QJflKramtUyLsbSuaReqCRV6ogkcjYif5DJG8FOQ9uDWgaapF 5QeGgSkqpj6cUclJBRHN1Jjfe04t0dmkXnT+T9An4M/O3sE+57354vPWeG5Ai3cg2TYu rqJFhLulAX4Ptn89JNLkn1gI72/ZE+51u9jREhRIB+o2hAYF2lsNiEs90nxAjSGvMUb0 vrkQX1mVJl+tSHX93cTPEnbkjy3JsFJ0OfyZj2m/zrsEjOch1n1ya2o6z6tSMcZa3LHv Oq2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Etxde7Y0; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u85si22637288pfi.278.2017.12.25.23.26.32; Mon, 25 Dec 2017 23:26:33 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-pm-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=@gmail.com header.s=20161025 header.b=Etxde7Y0; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750708AbdLZH0b (ORCPT + 11 others); Tue, 26 Dec 2017 02:26:31 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:46148 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750705AbdLZH0a (ORCPT ); Tue, 26 Dec 2017 02:26:30 -0500 Received: by mail-pf0-f194.google.com with SMTP id c204so18457814pfc.13; Mon, 25 Dec 2017 23:26:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=4qx2Na9q9UFxB0jBi8emuDCDK8I7TvGwJPHX6SuZCMA=; b=Etxde7Y01MN9pKFeHomrDm1KJgQWEANylzN/znph9OlSm2+DzKo5hmKPwWOwrNQFEj ernZEhTuoqdDMxHtMn/5VCUYMTnSWDLn2FePk3cUjSXGkYYF3wyrxxJgTnNj/LXFKcH4 BVpZBj5roe0zoK4mabpxCtUfx7aiUHb2TxBxR7oHiwBOxzYneiH9EFDII0im3ykvGLhd GfaCwQDs+d4h9Fx5Ml2BYDOm2Gy8MawkxmzOFwScVnUwX3EtkAPP1/POsWhLE8w5yaBA rpJYxykQXEnk7Z3o91l1A6xDwDXxOADvawRhbgtgzxST34pjjnQ5oE0JplQrevRubNai nPSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=4qx2Na9q9UFxB0jBi8emuDCDK8I7TvGwJPHX6SuZCMA=; b=GXtYpK5qigIkfDlBwFK2HV6gczL6PP+Yq4URBc3DfCYIQwoOA0OMzRTOnUMt8j8JCS ty5ifoVwvRpRNtitKsKyo9DJr4bl6xXXFopIQVhV5aGCsISITVyQPjPFOMyZz9Z5fmO5 pR1jHwItfiUYtoerTH6tw1rAxHZypBVYu6+D+ha75VVvkhcPr8tEL0X2L/5am1p/xcK0 tdFDhoZ6cAeTx5DaKMuVgd2Ao165N5cCVPYvgOhPEDaxZAQupCDGO6/PDfP4yno4KwzD MKrd9iiOAQSg+8xu37BUsWsFML3fKCgcqk/O0e4qvg84uMthVbPiHlqIu5sg6gz4eW3J 0vRQ== X-Gm-Message-State: AKGB3mLvjGuvCp29T/TlN+OWyS0G6v8Hp0HspM4OVS+RO5IvRn1pVaxw 1HQuw2N/QCXgWjtu+dKUNP0Fpg== X-Received: by 10.101.72.206 with SMTP id o14mr2799160pgs.324.1514273190446; Mon, 25 Dec 2017 23:26:30 -0800 (PST) Received: from localhost ([182.73.133.58]) by smtp.gmail.com with ESMTPSA id k197sm47249792pga.42.2017.12.25.23.26.29 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 25 Dec 2017 23:26:29 -0800 (PST) Date: Tue, 26 Dec 2017 12:56:26 +0530 From: gaurav jindal To: rjw@rjwysocki.net, daniel.lezcano@linaro.org Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH]cpuidle: preventive check in cpuidle_select against crash Message-ID: <20171226072626.GA4153@gaurav.jindal> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org When selecting the idle state using cpuidle_select, there is no check on cpuidle_curr_governor. In cpuidle_switch_governor, cpuidle_currr_governor can be set to NULL to specify "disabled". Since cpuidle_select cannot return negative value, it has to return 0 in case of error. Printing logs and returning can help in debugging and preventing possible kernel crash scenarios. Signed-off-by: Gaurav Jindal Signed-off-by: gaurav jindal diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 68a1682..bf08e3a 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -268,6 +268,19 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv, */ int cpuidle_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) { + + /* Since negative return is not allowed + * we have to return 0 even if the + * framework cannot select the idle state + */ + if (!cpuidle_curr_governor) { + pr_err("idle governor is disabled\n"); + return 0; + } + if (!cpuidle_curr_governor->select) { + pr_err("idle governor select is NULL\n"); + return 0; + } return cpuidle_curr_governor->select(drv, dev); }