Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dccp: call inet_add_protocol after register_pernet_subsys in dccp_v6_init

Patch "call inet_add_protocol after register_pernet_subsys in dccp_v4_init"
fixed a null pointer dereference issue for dccp_ipv4 module.

The same fix is needed for dccp_ipv6 module.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Xin Long and committed by
David S. Miller
a0f9a4c2 d5494acb

+11 -11
+11 -11
net/dccp/ipv6.c
··· 1098 1098 { 1099 1099 int err = proto_register(&dccp_v6_prot, 1); 1100 1100 1101 - if (err != 0) 1101 + if (err) 1102 1102 goto out; 1103 - 1104 - err = inet6_add_protocol(&dccp_v6_protocol, IPPROTO_DCCP); 1105 - if (err != 0) 1106 - goto out_unregister_proto; 1107 1103 1108 1104 inet6_register_protosw(&dccp_v6_protosw); 1109 1105 1110 1106 err = register_pernet_subsys(&dccp_v6_ops); 1111 - if (err != 0) 1107 + if (err) 1112 1108 goto out_destroy_ctl_sock; 1109 + 1110 + err = inet6_add_protocol(&dccp_v6_protocol, IPPROTO_DCCP); 1111 + if (err) 1112 + goto out_unregister_proto; 1113 + 1113 1114 out: 1114 1115 return err; 1115 - 1116 - out_destroy_ctl_sock: 1117 - inet6_del_protocol(&dccp_v6_protocol, IPPROTO_DCCP); 1118 - inet6_unregister_protosw(&dccp_v6_protosw); 1119 1116 out_unregister_proto: 1117 + unregister_pernet_subsys(&dccp_v6_ops); 1118 + out_destroy_ctl_sock: 1119 + inet6_unregister_protosw(&dccp_v6_protosw); 1120 1120 proto_unregister(&dccp_v6_prot); 1121 1121 goto out; 1122 1122 } 1123 1123 1124 1124 static void __exit dccp_v6_exit(void) 1125 1125 { 1126 - unregister_pernet_subsys(&dccp_v6_ops); 1127 1126 inet6_del_protocol(&dccp_v6_protocol, IPPROTO_DCCP); 1127 + unregister_pernet_subsys(&dccp_v6_ops); 1128 1128 inet6_unregister_protosw(&dccp_v6_protosw); 1129 1129 proto_unregister(&dccp_v6_prot); 1130 1130 }