]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/netfilter/nf_conntrack_helper.c
netfilter: rework user-space expectation helper support
[mv-sheeva.git] / net / netfilter / nf_conntrack_helper.c
index 93c4bdbfc1ae52da32a1e466ca9ca881665041bb..c9e0de08aa872bcbd61a4bf0b8171669a632a914 100644 (file)
@@ -121,6 +121,18 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
        int ret = 0;
 
        if (tmpl != NULL) {
+               /* we've got a userspace helper. */
+               if (tmpl->status & IPS_USERSPACE_HELPER) {
+                       help = nf_ct_helper_ext_add(ct, flags);
+                       if (help == NULL) {
+                               ret = -ENOMEM;
+                               goto out;
+                       }
+                       rcu_assign_pointer(help->helper, NULL);
+                       __set_bit(IPS_USERSPACE_HELPER_BIT, &ct->status);
+                       ret = 0;
+                       goto out;
+               }
                help = nfct_help(tmpl);
                if (help != NULL)
                        helper = help->helper;