• Gao Feng's avatar
    netfilter: SYNPROXY: Return NF_STOLEN instead of NF_DROP during handshaking · 495dcb56
    Gao Feng authored
    Current SYNPROXY codes return NF_DROP during normal TCP handshaking,
    it is not friendly to caller. Because the nf_hook_slow would treat
    the NF_DROP as an error, and return -EPERM.
    As a result, it may cause the top caller think it meets one error.
    
    For example, the following codes are from cfv_rx_poll()
    	err = netif_receive_skb(skb);
    	if (unlikely(err)) {
    		++cfv->ndev->stats.rx_dropped;
    	} else {
    		++cfv->ndev->stats.rx_packets;
    		cfv->ndev->stats.rx_bytes += skb_len;
    	}
    When SYNPROXY returns NF_DROP, then netif_receive_skb returns -EPERM.
    As a result, the cfv driver would treat it as an error, and increase
    the rx_dropped counter.
    
    So use NF_STOLEN instead of NF_DROP now because there is no error
    happened indeed, and free the skb directly.
    Signed-off-by: default avatarGao Feng <fgao@ikuai8.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    495dcb56
ipt_SYNPROXY.c 12.8 KB