cpuidle: Add checks to avoid NULL pointer dereference
PATCH RESEND v2 1/1 cpuidle: Add checks to avoid NULL pointer dereference
From: Srivatsa S. Bhat <[email protected]>
The existing check for dev == NULL in __cpuidle_register_device() is rendered useless because dev is dereferenced before the check itself. Moreover, correctly speaking, it is the job of the callers of this function, i.e., cpuidle_register_device() & cpuidle_enable_device() (which also happen to be exported functions) to ensure that __cpuidle_register_device() is called with a non-NULL dev.
So add the necessary dev == NULL checks in the two callers and remove the (useless) check from __cpuidle_register_device().
Signed-off-by Srivatsa S. Bhat <[email protected]>
Acked-by Daniel Lezcano <[email protected]>
---
drivers/cpuidle/cpuidle.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
drivers/cpuidle/cpuidle.c +6 -2
@@ -291,6 +291,9 @@ int cpuidle_enable_device(struct cpuidle_device *dev)int ret, i;struct cpuidle_driver *drv =cpuidle_get_driver (); +if (!dev) +return -EINVAL ; +if (dev->enabled)return 0 ;if (!drv || !cpuidle_curr_governor)
@@ -375,8 +378,6 @@ static int __cpuidle_register_device(struct cpuidle_device *dev)struct device *cpu_dev =get_cpu_device ((unsigned long )dev->cpu);struct cpuidle_driver *cpuidle_driver =cpuidle_get_driver (); -if (!dev) -return -EINVAL ;if (!try_module_get (cpuidle_driver->owner))return -EINVAL ;
@@ -401,6 +402,9 @@ int cpuidle_register_device(struct cpuidle_device *dev) {int ret; +if (!dev) +return -EINVAL ; +mutex_lock (&cpuidle_lock);if ((ret =__cpuidle_register_device (dev))) {