802 goto free;
803
804 err = netlink_unicast(ctnl, skb2, NETLINK_CB(skb).pid, MSG_DONTWAIT);
805 if (err < 0)
806 goto out;
807
808 return 0;
809
810free:
811 kfree_skb(skb2);
812out:
813 return err;
814}
815
816#ifdef CONFIG_NF_NAT_NEEDED
817static int
818ctnetlink_parse_nat_setup(struct nf_conn *ct,
819 enum nf_nat_manip_type manip,
820 struct nlattr *attr)
821{
822 typeof(nfnetlink_parse_nat_setup_hook) parse_nat_setup;
823
824 parse_nat_setup = rcu_dereference(nfnetlink_parse_nat_setup_hook);
825 if (!parse_nat_setup) {
826#ifdef CONFIG_MODULES
827 rcu_read_unlock();
828 nfnl_unlock();
829 if (request_module("nf-nat-ipv4") < 0) {
830 nfnl_lock();
831 rcu_read_lock();
832 return -EOPNOTSUPP;
833 }
834 nfnl_lock();
835 rcu_read_lock();
836 if (nfnetlink_parse_nat_setup_hook)
837 return -EAGAIN;
838#endif
839 return -EOPNOTSUPP;
840 }
841
842 return parse_nat_setup(ct, manip, attr);