extcon: Check for incorrect connection type in notifier register
authorStephen Boyd <stephen.boyd@linaro.org>
Thu, 23 Jun 2016 10:34:30 +0000 (19:34 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Thu, 23 Jun 2016 10:35:10 +0000 (19:35 +0900)
If we call extcon_register_notifier() with the wrong cable type,
it blows up with an oops instead of returning an error code.
Let's be nice and fail gracefully given that the consumer might
not know if the cable is supported by the extcon provider.

Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/extcon/extcon.c

index 4fef9ab4b148a50b93158be3e02119c2ba34c34f..b6408f0156371e98ba7bd723a5342bac2b64487a 100644 (file)
@@ -415,6 +415,8 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
 
        if (edev) {
                idx = find_cable_index_by_id(edev, id);
+               if (idx < 0)
+                       return idx;
 
                spin_lock_irqsave(&edev->lock, flags);
                ret = raw_notifier_chain_register(&edev->nh[idx], nb);
@@ -458,6 +460,8 @@ int extcon_unregister_notifier(struct extcon_dev *edev, unsigned int id,
                return -EINVAL;
 
        idx = find_cable_index_by_id(edev, id);
+       if (idx < 0)
+               return idx;
 
        spin_lock_irqsave(&edev->lock, flags);
        ret = raw_notifier_chain_unregister(&edev->nh[idx], nb);