Skip to content

Commit 4e6577d

Browse files
gfreewindummakynes
authored andcommitted
netfilter: Add the missed return value check of register_netdevice_notifier
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 <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent cf71c03 commit 4e6577d

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

net/netfilter/nf_tables_netdev.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,20 @@ static int __init nf_tables_netdev_init(void)
151151

152152
nft_register_chain_type(&nft_filter_chain_netdev);
153153
ret = register_pernet_subsys(&nf_tables_netdev_net_ops);
154-
if (ret < 0) {
155-
nft_unregister_chain_type(&nft_filter_chain_netdev);
156-
return ret;
157-
}
158-
register_netdevice_notifier(&nf_tables_netdev_notifier);
154+
if (ret)
155+
goto err1;
156+
157+
ret = register_netdevice_notifier(&nf_tables_netdev_notifier);
158+
if (ret)
159+
goto err2;
160+
159161
return 0;
162+
163+
err2:
164+
unregister_pernet_subsys(&nf_tables_netdev_net_ops);
165+
err1:
166+
nft_unregister_chain_type(&nft_filter_chain_netdev);
167+
return ret;
160168
}
161169

162170
static void __exit nf_tables_netdev_exit(void)

net/netfilter/nfnetlink_queue.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,9 +1522,16 @@ static int __init nfnetlink_queue_init(void)
15221522
goto cleanup_netlink_notifier;
15231523
}
15241524

1525-
register_netdevice_notifier(&nfqnl_dev_notifier);
1525+
status = register_netdevice_notifier(&nfqnl_dev_notifier);
1526+
if (status < 0) {
1527+
pr_err("nf_queue: failed to register netdevice notifier\n");
1528+
goto cleanup_netlink_subsys;
1529+
}
1530+
15261531
return status;
15271532

1533+
cleanup_netlink_subsys:
1534+
nfnetlink_subsys_unregister(&nfqnl_subsys);
15281535
cleanup_netlink_notifier:
15291536
netlink_unregister_notifier(&nfqnl_rtnl_notifier);
15301537
unregister_pernet_subsys(&nfnl_queue_net_ops);

net/netfilter/xt_TEE.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ static int tee_tg_check(const struct xt_tgchk_param *par)
8989
return -EINVAL;
9090

9191
if (info->oif[0]) {
92+
int ret;
93+
9294
if (info->oif[sizeof(info->oif)-1] != '\0')
9395
return -EINVAL;
9496

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

104-
register_netdevice_notifier(&priv->notifier);
106+
ret = register_netdevice_notifier(&priv->notifier);
107+
if (ret) {
108+
kfree(priv);
109+
return ret;
110+
}
105111
} else
106112
info->priv = NULL;
107113

0 commit comments

Comments
 (0)