aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/netfilter/nf_conntrack_proto_icmp.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c
index b8b79992797e..f96573304f5b 100644
--- a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c
+++ b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c
@@ -165,25 +165,13 @@ icmp_error_message(struct sk_buff *skb,
165 165
166 h = nf_conntrack_find_get(&innertuple); 166 h = nf_conntrack_find_get(&innertuple);
167 if (!h) { 167 if (!h) {
168 /* Locally generated ICMPs will match inverted if they 168 pr_debug("icmp_error_message: no match\n");
169 haven't been SNAT'ed yet */ 169 return -NF_ACCEPT;
170 /* FIXME: NAT code has to handle half-done double NAT --RR */
171 if (hooknum == NF_IP_LOCAL_OUT)
172 h = nf_conntrack_find_get(&origtuple);
173
174 if (!h) {
175 pr_debug("icmp_error_message: no match\n");
176 return -NF_ACCEPT;
177 }
178
179 /* Reverse direction from that found */
180 if (NF_CT_DIRECTION(h) == IP_CT_DIR_REPLY)
181 *ctinfo += IP_CT_IS_REPLY;
182 } else {
183 if (NF_CT_DIRECTION(h) == IP_CT_DIR_REPLY)
184 *ctinfo += IP_CT_IS_REPLY;
185 } 170 }
186 171
172 if (NF_CT_DIRECTION(h) == IP_CT_DIR_REPLY)
173 *ctinfo += IP_CT_IS_REPLY;
174
187 /* Update skb to refer to this connection */ 175 /* Update skb to refer to this connection */
188 skb->nfct = &nf_ct_tuplehash_to_ctrack(h)->ct_general; 176 skb->nfct = &nf_ct_tuplehash_to_ctrack(h)->ct_general;
189 skb->nfctinfo = *ctinfo; 177 skb->nfctinfo = *ctinfo;