This patch check whether argument is NULL to prevent NULL pointer access.

Signed-off-by: Chanwoo Choi <[email protected]>
---
 drivers/extcon/extcon.c | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 6f03ccf..dda1e62 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -252,6 +252,9 @@ int extcon_update_state(struct extcon_dev *edev, u32 mask, 
u32 state)
        unsigned long flags;
        bool attached;
 
+       if (!edev)
+               return -EINVAL;
+
        spin_lock_irqsave(&edev->lock, flags);
 
        if (edev->state != ((edev->state & ~mask) | (state & mask))) {
@@ -320,6 +323,9 @@ EXPORT_SYMBOL_GPL(extcon_update_state);
  */
 int extcon_set_state(struct extcon_dev *edev, u32 state)
 {
+       if (!edev)
+               return -EINVAL;
+
        return extcon_update_state(edev, 0xffffffff, state);
 }
 EXPORT_SYMBOL_GPL(extcon_set_state);
@@ -333,6 +339,9 @@ int extcon_get_cable_state_(struct extcon_dev *edev, const 
unsigned int id)
 {
        int index;
 
+       if (!edev)
+               return -EINVAL;
+
        index = find_cable_index_by_id(edev, id);
        if (index < 0)
                return index;
@@ -372,6 +381,9 @@ int extcon_set_cable_state_(struct extcon_dev *edev, 
unsigned int id,
        u32 state;
        int index;
 
+       if (!edev)
+               return -EINVAL;
+
        index = find_cable_index_by_id(edev, id);
        if (index < 0)
                return index;
@@ -409,6 +421,9 @@ struct extcon_dev *extcon_get_extcon_dev(const char 
*extcon_name)
 {
        struct extcon_dev *sd;
 
+       if (!extcon_name)
+               return ERR_PTR(-EINVAL);
+
        mutex_lock(&extcon_dev_list_lock);
        list_for_each_entry(sd, &extcon_dev_list, entry) {
                if (!strcmp(sd->name, extcon_name))
@@ -537,6 +552,9 @@ int extcon_register_notifier(struct extcon_dev *edev, 
unsigned int id,
        unsigned long flags;
        int ret, idx;
 
+       if (!edev || !nb)
+               return -EINVAL;
+
        idx = find_cable_index_by_id(edev, id);
 
        spin_lock_irqsave(&edev->lock, flags);
@@ -559,6 +577,9 @@ int extcon_unregister_notifier(struct extcon_dev *edev, 
unsigned int id,
        unsigned long flags;
        int ret, idx;
 
+       if (!edev || !nb)
+               return -EINVAL;
+
        idx = find_cable_index_by_id(edev, id);
 
        spin_lock_irqsave(&edev->lock, flags);
@@ -619,6 +640,9 @@ struct extcon_dev *extcon_dev_allocate(const unsigned int 
*supported_cable)
 {
        struct extcon_dev *edev;
 
+       if (!supported_cable)
+               return ERR_PTR(-EINVAL);
+
        edev = kzalloc(sizeof(*edev), GFP_KERNEL);
        if (!edev)
                return ERR_PTR(-ENOMEM);
@@ -719,7 +743,7 @@ int extcon_dev_register(struct extcon_dev *edev)
                        return ret;
        }
 
-       if (!edev->supported_cable)
+       if (!edev || !edev->supported_cable)
                return -EINVAL;
 
        for (; edev->supported_cable[index] != EXTCON_NONE; index++);
@@ -925,6 +949,9 @@ void extcon_dev_unregister(struct extcon_dev *edev)
 {
        int index;
 
+       if (!edev)
+               return;
+
        mutex_lock(&extcon_dev_list_lock);
        list_del(&edev->entry);
        mutex_unlock(&extcon_dev_list_lock);
@@ -1031,6 +1058,9 @@ struct extcon_dev *extcon_get_edev_by_phandle(struct 
device *dev, int index)
        struct device_node *node;
        struct extcon_dev *edev;
 
+       if (!dev)
+               return ERR_PTR(-EINVAL);
+
        if (!dev->of_node) {
                dev_err(dev, "device does not have a device node entry\n");
                return ERR_PTR(-EINVAL);
-- 
2.2.0.GIT

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to