--- net/ipv4/tcp_ipv4.c 2010-03-07 12:23:36.169632867 -0500 +++ net/ipv4/tcp_ipv4.c 2010-03-10 17:24:00.887011575 -0500 @@ -1585,9 +1585,6 @@ int tcp_v4_do_rcv(struct sock *sk, struc return 0; reset: -#ifdef CONFIG_GRKERNSEC_BLACKHOLE - if (!skb->dev || (skb->dev->flags & IFF_LOOPBACK)) -#endif tcp_v4_send_reset(rsk, skb); discard: kfree_skb(skb); @@ -1649,12 +1646,20 @@ int tcp_v4_rcv(struct sk_buff *skb) TCP_SKB_CB(skb)->sacked = 0; sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest); - if (!sk) + if (!sk) { +#ifdef CONFIG_GRKERNSEC_BLACKHOLE + ret = 1; +#endif goto no_tcp_socket; + } process: - if (sk->sk_state == TCP_TIME_WAIT) + if (sk->sk_state == TCP_TIME_WAIT) { +#ifdef CONFIG_GRKERNSEC_BLACKHOLE + ret = 2; +#endif goto do_time_wait; + } if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) goto discard_and_relse; @@ -1697,7 +1702,7 @@ bad_packet: TCP_INC_STATS_BH(net, TCP_MIB_INERRS); } else { #ifdef CONFIG_GRKERNSEC_BLACKHOLE - if (skb->dev->flags & IFF_LOOPBACK) + if (ret == 2 || skb->dev->flags & IFF_LOOPBACK) #endif tcp_v4_send_reset(NULL, skb); }