if (unlikely(skb->ip_summed == CHECKSUM_HW)) netdev_rx_csum_fault(skb->dev); 
int skb_copy_and_csum_datagram_iovec(const struct sk_buff *skb,				     int hlen, struct iovec *iov){	unsigned int csum;	int chunk = skb->len - hlen;	/* Skip filled elements.	 * Pretty silly, look at memcpy_toiovec, though 8)	 */	while (!iov->iov_len)		iov++;	if (iov->iov_len < chunk) {		if ((unsigned short)csum_fold(skb_checksum(skb, 0, chunk + hlen,							   skb->csum)))			goto csum_error;		if (skb_copy_datagram_iovec(skb, hlen, iov, chunk))			goto fault;	} else {		csum = csum_partial(skb->data, hlen, skb->csum);		if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,					       chunk, &csum))			goto fault;		if ((unsigned short)csum_fold(csum))			goto csum_error;		iov->iov_len -= chunk;		iov->iov_base += chunk;	}	return 0;csum_error:	return -EINVAL;fault:	return -EFAULT;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fb286bb2990a107009dbf25f6ffebeb7df77f9be/datagram.c/buggy/net/core/datagram.c