浏览代码

netfilter: Add the missed return value check of nft_register_chain_type

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

Signed-off-by: Gao Feng <fgao@ikuai8.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Gao Feng 9 年之前
父节点
当前提交
23d07508d2

+ 13 - 5
net/bridge/netfilter/nf_tables_bridge.c

@@ -139,12 +139,20 @@ static int __init nf_tables_bridge_init(void)
 	int ret;
 	int ret;
 
 
 	nf_register_afinfo(&nf_br_afinfo);
 	nf_register_afinfo(&nf_br_afinfo);
-	nft_register_chain_type(&filter_bridge);
+	ret = nft_register_chain_type(&filter_bridge);
+	if (ret < 0)
+		goto err1;
+
 	ret = register_pernet_subsys(&nf_tables_bridge_net_ops);
 	ret = register_pernet_subsys(&nf_tables_bridge_net_ops);
-	if (ret < 0) {
-		nft_unregister_chain_type(&filter_bridge);
-		nf_unregister_afinfo(&nf_br_afinfo);
-	}
+	if (ret < 0)
+		goto err2;
+
+	return ret;
+
+err2:
+	nft_unregister_chain_type(&filter_bridge);
+err1:
+	nf_unregister_afinfo(&nf_br_afinfo);
 	return ret;
 	return ret;
 }
 }
 
 

+ 4 - 1
net/ipv4/netfilter/nf_tables_arp.c

@@ -80,7 +80,10 @@ static int __init nf_tables_arp_init(void)
 {
 {
 	int ret;
 	int ret;
 
 
-	nft_register_chain_type(&filter_arp);
+	ret = nft_register_chain_type(&filter_arp);
+	if (ret < 0)
+		return ret;
+
 	ret = register_pernet_subsys(&nf_tables_arp_net_ops);
 	ret = register_pernet_subsys(&nf_tables_arp_net_ops);
 	if (ret < 0)
 	if (ret < 0)
 		nft_unregister_chain_type(&filter_arp);
 		nft_unregister_chain_type(&filter_arp);

+ 4 - 1
net/ipv4/netfilter/nf_tables_ipv4.c

@@ -103,7 +103,10 @@ static int __init nf_tables_ipv4_init(void)
 {
 {
 	int ret;
 	int ret;
 
 
-	nft_register_chain_type(&filter_ipv4);
+	ret = nft_register_chain_type(&filter_ipv4);
+	if (ret < 0)
+		return ret;
+
 	ret = register_pernet_subsys(&nf_tables_ipv4_net_ops);
 	ret = register_pernet_subsys(&nf_tables_ipv4_net_ops);
 	if (ret < 0)
 	if (ret < 0)
 		nft_unregister_chain_type(&filter_ipv4);
 		nft_unregister_chain_type(&filter_ipv4);

+ 4 - 1
net/ipv6/netfilter/nf_tables_ipv6.c

@@ -100,7 +100,10 @@ static int __init nf_tables_ipv6_init(void)
 {
 {
 	int ret;
 	int ret;
 
 
-	nft_register_chain_type(&filter_ipv6);
+	ret = nft_register_chain_type(&filter_ipv6);
+	if (ret < 0)
+		return ret;
+
 	ret = register_pernet_subsys(&nf_tables_ipv6_net_ops);
 	ret = register_pernet_subsys(&nf_tables_ipv6_net_ops);
 	if (ret < 0)
 	if (ret < 0)
 		nft_unregister_chain_type(&filter_ipv6);
 		nft_unregister_chain_type(&filter_ipv6);

+ 4 - 1
net/netfilter/nf_tables_inet.c

@@ -82,7 +82,10 @@ static int __init nf_tables_inet_init(void)
 {
 {
 	int ret;
 	int ret;
 
 
-	nft_register_chain_type(&filter_inet);
+	ret = nft_register_chain_type(&filter_inet);
+	if (ret < 0)
+		return ret;
+
 	ret = register_pernet_subsys(&nf_tables_inet_net_ops);
 	ret = register_pernet_subsys(&nf_tables_inet_net_ops);
 	if (ret < 0)
 	if (ret < 0)
 		nft_unregister_chain_type(&filter_inet);
 		nft_unregister_chain_type(&filter_inet);

+ 4 - 1
net/netfilter/nf_tables_netdev.c

@@ -149,7 +149,10 @@ static int __init nf_tables_netdev_init(void)
 {
 {
 	int ret;
 	int ret;
 
 
-	nft_register_chain_type(&nft_filter_chain_netdev);
+	ret = nft_register_chain_type(&nft_filter_chain_netdev);
+	if (ret)
+		return ret;
+
 	ret = register_pernet_subsys(&nf_tables_netdev_net_ops);
 	ret = register_pernet_subsys(&nf_tables_netdev_net_ops);
 	if (ret)
 	if (ret)
 		goto err1;
 		goto err1;