aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>2007-03-23 14:17:07 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:27:44 -0400
commit5f79e0f916a3bdeccc910fdf466bca582a9b2cca (patch)
treeef6cb09587609597e611ad38c313df88d8ff2e8b
parente6f689db51a789807edede411b32eb7c9e457948 (diff)
[NETFILTER]: nf_conntrack: don't use nfct in skb if conntrack is disabled
Signed-off-by: Yasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp> Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/netfilter.h11
-rw-r--r--include/linux/skbuff.h24
-rw-r--r--net/core/skbuff.c4
-rw-r--r--net/netfilter/core.c2
4 files changed, 17 insertions, 24 deletions
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 70d3b4f1e48d..4777f1b619ce 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -281,9 +281,6 @@ extern void nf_reinject(struct sk_buff *skb,
281 struct nf_info *info, 281 struct nf_info *info,
282 unsigned int verdict); 282 unsigned int verdict);
283 283
284extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *);
285extern void nf_ct_attach(struct sk_buff *, struct sk_buff *);
286
287/* FIXME: Before cache is ever used, this must be implemented for real. */ 284/* FIXME: Before cache is ever used, this must be implemented for real. */
288extern void nf_invalidate_cache(int pf); 285extern void nf_invalidate_cache(int pf);
289 286
@@ -388,11 +385,17 @@ static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb,
388{ 385{
389 return 1; 386 return 1;
390} 387}
391static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
392struct flowi; 388struct flowi;
393static inline void 389static inline void
394nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, int family) {} 390nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, int family) {}
395#endif /*CONFIG_NETFILTER*/ 391#endif /*CONFIG_NETFILTER*/
396 392
393#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
394extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *);
395extern void nf_ct_attach(struct sk_buff *, struct sk_buff *);
396#else
397static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
398#endif
399
397#endif /*__KERNEL__*/ 400#endif /*__KERNEL__*/
398#endif /*__LINUX_NETFILTER_H*/ 401#endif /*__LINUX_NETFILTER_H*/
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 81ac934d5964..0bedf5384850 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -87,11 +87,12 @@
87 87
88struct net_device; 88struct net_device;
89 89
90#ifdef CONFIG_NETFILTER 90#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
91struct nf_conntrack { 91struct nf_conntrack {
92 atomic_t use; 92 atomic_t use;
93 void (*destroy)(struct nf_conntrack *); 93 void (*destroy)(struct nf_conntrack *);
94}; 94};
95#endif
95 96
96#ifdef CONFIG_BRIDGE_NETFILTER 97#ifdef CONFIG_BRIDGE_NETFILTER
97struct nf_bridge_info { 98struct nf_bridge_info {
@@ -106,8 +107,6 @@ struct nf_bridge_info {
106}; 107};
107#endif 108#endif
108 109
109#endif
110
111struct sk_buff_head { 110struct sk_buff_head {
112 /* These two members must be first. */ 111 /* These two members must be first. */
113 struct sk_buff *next; 112 struct sk_buff *next;
@@ -276,15 +275,13 @@ struct sk_buff {
276 __be16 protocol; 275 __be16 protocol;
277 276
278 void (*destructor)(struct sk_buff *skb); 277 void (*destructor)(struct sk_buff *skb);
279#ifdef CONFIG_NETFILTER
280 struct nf_conntrack *nfct;
281#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 278#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
279 struct nf_conntrack *nfct;
282 struct sk_buff *nfct_reasm; 280 struct sk_buff *nfct_reasm;
283#endif 281#endif
284#ifdef CONFIG_BRIDGE_NETFILTER 282#ifdef CONFIG_BRIDGE_NETFILTER
285 struct nf_bridge_info *nf_bridge; 283 struct nf_bridge_info *nf_bridge;
286#endif 284#endif
287#endif /* CONFIG_NETFILTER */
288#ifdef CONFIG_NET_SCHED 285#ifdef CONFIG_NET_SCHED
289 __u16 tc_index; /* traffic control index */ 286 __u16 tc_index; /* traffic control index */
290#ifdef CONFIG_NET_CLS_ACT 287#ifdef CONFIG_NET_CLS_ACT
@@ -1558,7 +1555,7 @@ static inline unsigned int skb_checksum_complete(struct sk_buff *skb)
1558 __skb_checksum_complete(skb); 1555 __skb_checksum_complete(skb);
1559} 1556}
1560 1557
1561#ifdef CONFIG_NETFILTER 1558#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1562static inline void nf_conntrack_put(struct nf_conntrack *nfct) 1559static inline void nf_conntrack_put(struct nf_conntrack *nfct)
1563{ 1560{
1564 if (nfct && atomic_dec_and_test(&nfct->use)) 1561 if (nfct && atomic_dec_and_test(&nfct->use))
@@ -1569,7 +1566,6 @@ static inline void nf_conntrack_get(struct nf_conntrack *nfct)
1569 if (nfct) 1566 if (nfct)
1570 atomic_inc(&nfct->use); 1567 atomic_inc(&nfct->use);
1571} 1568}
1572#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1573static inline void nf_conntrack_get_reasm(struct sk_buff *skb) 1569static inline void nf_conntrack_get_reasm(struct sk_buff *skb)
1574{ 1570{
1575 if (skb) 1571 if (skb)
@@ -1595,9 +1591,9 @@ static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge)
1595#endif /* CONFIG_BRIDGE_NETFILTER */ 1591#endif /* CONFIG_BRIDGE_NETFILTER */
1596static inline void nf_reset(struct sk_buff *skb) 1592static inline void nf_reset(struct sk_buff *skb)
1597{ 1593{
1594#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1598 nf_conntrack_put(skb->nfct); 1595 nf_conntrack_put(skb->nfct);
1599 skb->nfct = NULL; 1596 skb->nfct = NULL;
1600#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1601 nf_conntrack_put_reasm(skb->nfct_reasm); 1597 nf_conntrack_put_reasm(skb->nfct_reasm);
1602 skb->nfct_reasm = NULL; 1598 skb->nfct_reasm = NULL;
1603#endif 1599#endif
@@ -1610,10 +1606,10 @@ static inline void nf_reset(struct sk_buff *skb)
1610/* Note: This doesn't put any conntrack and bridge info in dst. */ 1606/* Note: This doesn't put any conntrack and bridge info in dst. */
1611static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src) 1607static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1612{ 1608{
1609#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1613 dst->nfct = src->nfct; 1610 dst->nfct = src->nfct;
1614 nf_conntrack_get(src->nfct); 1611 nf_conntrack_get(src->nfct);
1615 dst->nfctinfo = src->nfctinfo; 1612 dst->nfctinfo = src->nfctinfo;
1616#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1617 dst->nfct_reasm = src->nfct_reasm; 1613 dst->nfct_reasm = src->nfct_reasm;
1618 nf_conntrack_get_reasm(src->nfct_reasm); 1614 nf_conntrack_get_reasm(src->nfct_reasm);
1619#endif 1615#endif
@@ -1625,8 +1621,8 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1625 1621
1626static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src) 1622static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1627{ 1623{
1628 nf_conntrack_put(dst->nfct);
1629#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 1624#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1625 nf_conntrack_put(dst->nfct);
1630 nf_conntrack_put_reasm(dst->nfct_reasm); 1626 nf_conntrack_put_reasm(dst->nfct_reasm);
1631#endif 1627#endif
1632#ifdef CONFIG_BRIDGE_NETFILTER 1628#ifdef CONFIG_BRIDGE_NETFILTER
@@ -1635,12 +1631,6 @@ static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1635 __nf_copy(dst, src); 1631 __nf_copy(dst, src);
1636} 1632}
1637 1633
1638#else /* CONFIG_NETFILTER */
1639static inline void nf_reset(struct sk_buff *skb) {}
1640static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src) {}
1641static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src) {}
1642#endif /* CONFIG_NETFILTER */
1643
1644#ifdef CONFIG_NETWORK_SECMARK 1634#ifdef CONFIG_NETWORK_SECMARK
1645static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from) 1635static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from)
1646{ 1636{
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index e28f119156f7..f16c72204cf6 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -325,15 +325,13 @@ void __kfree_skb(struct sk_buff *skb)
325 WARN_ON(in_irq()); 325 WARN_ON(in_irq());
326 skb->destructor(skb); 326 skb->destructor(skb);
327 } 327 }
328#ifdef CONFIG_NETFILTER
329 nf_conntrack_put(skb->nfct);
330#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 328#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
329 nf_conntrack_put(skb->nfct);
331 nf_conntrack_put_reasm(skb->nfct_reasm); 330 nf_conntrack_put_reasm(skb->nfct_reasm);
332#endif 331#endif
333#ifdef CONFIG_BRIDGE_NETFILTER 332#ifdef CONFIG_BRIDGE_NETFILTER
334 nf_bridge_put(skb->nf_bridge); 333 nf_bridge_put(skb->nf_bridge);
335#endif 334#endif
336#endif
337/* XXX: IS this still necessary? - JHS */ 335/* XXX: IS this still necessary? - JHS */
338#ifdef CONFIG_NET_SCHED 336#ifdef CONFIG_NET_SCHED
339 skb->tc_index = 0; 337 skb->tc_index = 0;
diff --git a/net/netfilter/core.c b/net/netfilter/core.c
index d802b342c615..fe5f22df620c 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
@@ -240,6 +240,7 @@ void nf_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
240} 240}
241EXPORT_SYMBOL(nf_proto_csum_replace4); 241EXPORT_SYMBOL(nf_proto_csum_replace4);
242 242
243#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
243/* This does not belong here, but locally generated errors need it if connection 244/* This does not belong here, but locally generated errors need it if connection
244 tracking in use: without this, connection may not be in hash table, and hence 245 tracking in use: without this, connection may not be in hash table, and hence
245 manufactured ICMP or RST packets will not be associated with it. */ 246 manufactured ICMP or RST packets will not be associated with it. */
@@ -259,6 +260,7 @@ void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb)
259 } 260 }
260} 261}
261EXPORT_SYMBOL(nf_ct_attach); 262EXPORT_SYMBOL(nf_ct_attach);
263#endif
262 264
263#ifdef CONFIG_PROC_FS 265#ifdef CONFIG_PROC_FS
264struct proc_dir_entry *proc_net_netfilter; 266struct proc_dir_entry *proc_net_netfilter;