Commit f04ed7d2 authored by MichelleJin's avatar MichelleJin Committed by David S. Miller
Browse files

net: ipv6: check return value of rhashtable_init



When rhashtable_init() fails, it returns -EINVAL.
However, since error return value of rhashtable_init is not checked,
it can cause use of uninitialized pointers.
So, fix unhandled errors of rhashtable_init.

Signed-off-by: default avatarMichelleJin <shjy180909@gmail.com>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d7cade51
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -610,7 +610,11 @@ int ila_xlat_init_net(struct net *net)
	if (err)
		return err;

	rhashtable_init(&ilan->xlat.rhash_table, &rht_params);
	err = rhashtable_init(&ilan->xlat.rhash_table, &rht_params);
	if (err) {
		free_bucket_spinlocks(ilan->xlat.locks);
		return err;
	}

	return 0;
}
+6 −2
Original line number Diff line number Diff line
@@ -374,7 +374,11 @@ static int __net_init seg6_net_init(struct net *net)
	net->ipv6.seg6_data = sdata;

#ifdef CONFIG_IPV6_SEG6_HMAC
	seg6_hmac_net_init(net);
	if (seg6_hmac_net_init(net)) {
		kfree(sdata);
		kfree(rcu_dereference_raw(sdata->tun_src));
		return -ENOMEM;
	};
#endif

	return 0;
@@ -388,7 +392,7 @@ static void __net_exit seg6_net_exit(struct net *net)
	seg6_hmac_net_exit(net);
#endif

	kfree(sdata->tun_src);
	kfree(rcu_dereference_raw(sdata->tun_src));
	kfree(sdata);
}

+1 −3
Original line number Diff line number Diff line
@@ -405,9 +405,7 @@ int __net_init seg6_hmac_net_init(struct net *net)
{
	struct seg6_pernet_data *sdata = seg6_pernet(net);

	rhashtable_init(&sdata->hmac_infos, &rht_params);

	return 0;
	return rhashtable_init(&sdata->hmac_infos, &rht_params);
}
EXPORT_SYMBOL(seg6_hmac_net_init);