Skip to content

Commit

Permalink
wwan: core: Avoid returning NULL from wwan_create_dev()
Browse files Browse the repository at this point in the history
Make wwan_create_dev() to return either valid or error pointer,
In some cases it may return NULL. Prevent this by converting
it to the respective error pointer.

Fixes: 9a44c1c ("net: Add a WWAN subsystem")
Signed-off-by: Andy Shevchenko <[email protected]>
Acked-by: Sergey Ryazanov <[email protected]>
Reviewed-by: Loic Poulain <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
andy-shev authored and kuba-moo committed Aug 12, 2021
1 parent 700fa08 commit d9d5b89
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/net/wwan/wwan_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,14 @@ static struct wwan_device *wwan_create_dev(struct device *parent)
goto done_unlock;

id = ida_alloc(&wwan_dev_ids, GFP_KERNEL);
if (id < 0)
if (id < 0) {
wwandev = ERR_PTR(id);
goto done_unlock;
}

wwandev = kzalloc(sizeof(*wwandev), GFP_KERNEL);
if (!wwandev) {
wwandev = ERR_PTR(-ENOMEM);
ida_free(&wwan_dev_ids, id);
goto done_unlock;
}
Expand All @@ -182,7 +185,8 @@ static struct wwan_device *wwan_create_dev(struct device *parent)
err = device_register(&wwandev->dev);
if (err) {
put_device(&wwandev->dev);
wwandev = NULL;
wwandev = ERR_PTR(err);
goto done_unlock;
}

done_unlock:
Expand Down Expand Up @@ -1014,8 +1018,8 @@ int wwan_register_ops(struct device *parent, const struct wwan_ops *ops,
return -EINVAL;

wwandev = wwan_create_dev(parent);
if (!wwandev)
return -ENOMEM;
if (IS_ERR(wwandev))
return PTR_ERR(wwandev);

if (WARN_ON(wwandev->ops)) {
wwan_remove_dev(wwandev);
Expand Down

0 comments on commit d9d5b89

Please sign in to comment.