LIMIT_NETDEBUG(KERN_DEBUG "icmp v4 hw csum failure\n"); 
/* fall through */ 
int icmp_rcv(struct sk_buff *skb){	struct icmphdr *icmph;	struct rtable *rt = (struct rtable *)skb->dst;	ICMP_INC_STATS_BH(ICMP_MIB_INMSGS);	switch (skb->ip_summed) {	case CHECKSUM_HW:		if (!(u16)csum_fold(skb->csum))			break;		LIMIT_NETDEBUG(KERN_DEBUG "icmp v4 hw csum failure\n");	case CHECKSUM_NONE:		if ((u16)csum_fold(skb_checksum(skb, 0, skb->len, 0)))			goto error;	default:;	}	if (!pskb_pull(skb, sizeof(struct icmphdr)))		goto error;	icmph = skb->h.icmph;	/*	 *	18 is the highest 'known' ICMP type. Anything else is a mystery	 *	 *	RFC 1122: 3.2.2  Unknown ICMP messages types MUST be silently	 *		  discarded.	 */	if (icmph->type > NR_ICMP_TYPES)		goto error;	/*	 *	Parse the ICMP message	 */ 	if (rt->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {		/*		 *	RFC 1122: 3.2.2.6 An ICMP_ECHO to broadcast MAY be		 *	  silently ignored (we let user decide with a sysctl).		 *	RFC 1122: 3.2.2.8 An ICMP_TIMESTAMP MAY be silently		 *	  discarded if to broadcast/multicast.		 */		if ((icmph->type == ICMP_ECHO ||		     icmph->type == ICMP_TIMESTAMP) &&		    sysctl_icmp_echo_ignore_broadcasts) {			goto error;		}		if (icmph->type != ICMP_ECHO &&		    icmph->type != ICMP_TIMESTAMP &&		    icmph->type != ICMP_ADDRESS &&		    icmph->type != ICMP_ADDRESSREPLY) {			goto error;  		}	}	ICMP_INC_STATS_BH(icmp_pointers[icmph->type].input_entry);	icmp_pointers[icmph->type].handler(skb);drop:	kfree_skb(skb);	return 0;error:	ICMP_INC_STATS_BH(ICMP_MIB_INERRORS);	goto drop;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fb286bb2990a107009dbf25f6ffebeb7df77f9be/icmp.c/buggy/net/ipv4/icmp.c