]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - net/netfilter/core.c
[NET]: Make /proc/net per network namespace
[mirror_ubuntu-hirsute-kernel.git] / net / netfilter / core.c
index a84478ee2ded4c4b4a6888794ff05b70a3204cdc..a523fa4136ed53a7f13e227c0ee6bb8a38ae95f4 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/inetdevice.h>
 #include <linux/proc_fs.h>
 #include <linux/mutex.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 
 #include "nf_internals.h"
@@ -203,7 +204,9 @@ int skb_make_writable(struct sk_buff **pskb, unsigned int writable_len)
                return 0;
 
        /* Not exclusive use of packet?  Must copy. */
-       if (skb_shared(*pskb) || skb_cloned(*pskb))
+       if (skb_cloned(*pskb) && !skb_clone_writable(*pskb, writable_len))
+               goto copy_skb;
+       if (skb_shared(*pskb))
                goto copy_skb;
 
        return pskb_may_pull(*pskb, writable_len);
@@ -229,13 +232,13 @@ void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
 {
        __be32 diff[] = { ~from, to };
        if (skb->ip_summed != CHECKSUM_PARTIAL) {
-               *sum = csum_fold(csum_partial((char *)diff, sizeof(diff),
+               *sum = csum_fold(csum_partial(diff, sizeof(diff),
                                ~csum_unfold(*sum)));
                if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
-                       skb->csum = ~csum_partial((char *)diff, sizeof(diff),
+                       skb->csum = ~csum_partial(diff, sizeof(diff),
                                                ~skb->csum);
        } else if (pseudohdr)
-               *sum = ~csum_fold(csum_partial((char *)diff, sizeof(diff),
+               *sum = ~csum_fold(csum_partial(diff, sizeof(diff),
                                csum_unfold(*sum)));
 }
 EXPORT_SYMBOL(nf_proto_csum_replace4);
@@ -291,7 +294,7 @@ void __init netfilter_init(void)
        }
 
 #ifdef CONFIG_PROC_FS
-       proc_net_netfilter = proc_mkdir("netfilter", proc_net);
+       proc_net_netfilter = proc_mkdir("netfilter", init_net.proc_net);
        if (!proc_net_netfilter)
                panic("cannot create netfilter proc entry");
 #endif