Skip to content

Commit

Permalink
netfilter: Add the missed return value check of register_netdevice_no…
Browse files Browse the repository at this point in the history
…tifier

There are some codes of netfilter module which did not check the return
value of register_netdevice_notifier. Add the checks now.

Signed-off-by: Gao Feng <fgao@ikuai8.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  • Loading branch information
Gao Feng authored and Pablo Neira Ayuso committed Sep 12, 2016
1 parent cf71c03 commit 4e6577d
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
18 changes: 13 additions & 5 deletions net/netfilter/nf_tables_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,20 @@ static int __init nf_tables_netdev_init(void)

nft_register_chain_type(&nft_filter_chain_netdev);
ret = register_pernet_subsys(&nf_tables_netdev_net_ops);
if (ret < 0) {
nft_unregister_chain_type(&nft_filter_chain_netdev);
return ret;
}
register_netdevice_notifier(&nf_tables_netdev_notifier);
if (ret)
goto err1;

ret = register_netdevice_notifier(&nf_tables_netdev_notifier);
if (ret)
goto err2;

return 0;

err2:
unregister_pernet_subsys(&nf_tables_netdev_net_ops);
err1:
nft_unregister_chain_type(&nft_filter_chain_netdev);
return ret;
}

static void __exit nf_tables_netdev_exit(void)
Expand Down
9 changes: 8 additions & 1 deletion net/netfilter/nfnetlink_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -1522,9 +1522,16 @@ static int __init nfnetlink_queue_init(void)
goto cleanup_netlink_notifier;
}

register_netdevice_notifier(&nfqnl_dev_notifier);
status = register_netdevice_notifier(&nfqnl_dev_notifier);
if (status < 0) {
pr_err("nf_queue: failed to register netdevice notifier\n");
goto cleanup_netlink_subsys;
}

return status;

cleanup_netlink_subsys:
nfnetlink_subsys_unregister(&nfqnl_subsys);
cleanup_netlink_notifier:
netlink_unregister_notifier(&nfqnl_rtnl_notifier);
unregister_pernet_subsys(&nfnl_queue_net_ops);
Expand Down
8 changes: 7 additions & 1 deletion net/netfilter/xt_TEE.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ static int tee_tg_check(const struct xt_tgchk_param *par)
return -EINVAL;

if (info->oif[0]) {
int ret;

if (info->oif[sizeof(info->oif)-1] != '\0')
return -EINVAL;

Expand All @@ -101,7 +103,11 @@ static int tee_tg_check(const struct xt_tgchk_param *par)
priv->notifier.notifier_call = tee_netdev_event;
info->priv = priv;

register_netdevice_notifier(&priv->notifier);
ret = register_netdevice_notifier(&priv->notifier);
if (ret) {
kfree(priv);
return ret;
}
} else
info->priv = NULL;

Expand Down

0 comments on commit 4e6577d

Please sign in to comment.