diff options
| -rw-r--r-- | drivers/net/atl1/atl1_main.c | 10 | ||||
| -rw-r--r-- | drivers/net/cassini.c | 6 | ||||
| -rw-r--r-- | drivers/net/cxgb3/sge.c | 7 | ||||
| -rw-r--r-- | drivers/net/e1000/e1000_main.c | 10 | ||||
| -rw-r--r-- | drivers/net/ixgb/ixgb_main.c | 8 | ||||
| -rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 5 | ||||
| -rw-r--r-- | drivers/net/netxen/netxen_nic_hw.c | 2 | ||||
| -rw-r--r-- | drivers/net/sk98lin/skge.c | 4 | ||||
| -rw-r--r-- | drivers/net/skge.c | 2 | ||||
| -rw-r--r-- | drivers/net/sky2.c | 2 | ||||
| -rw-r--r-- | drivers/net/sungem.c | 6 | ||||
| -rw-r--r-- | drivers/net/sunhme.c | 6 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 5 | ||||
| -rw-r--r-- | include/net/udplite.h | 6 | ||||
| -rw-r--r-- | net/core/dev.c | 2 | ||||
| -rw-r--r-- | net/core/skbuff.c | 2 | ||||
| -rw-r--r-- | net/ipv4/esp4.c | 2 | ||||
| -rw-r--r-- | net/ipv4/udp.c | 2 | ||||
| -rw-r--r-- | net/ipv6/esp6.c | 9 | ||||
| -rw-r--r-- | net/ipv6/exthdrs.c | 12 | ||||
| -rw-r--r-- | net/ipv6/ip6_input.c | 2 | ||||
| -rw-r--r-- | net/ipv6/ipcomp6.c | 4 | ||||
| -rw-r--r-- | net/ipv6/mip6.c | 5 | ||||
| -rw-r--r-- | net/ipv6/raw.c | 4 | ||||
| -rw-r--r-- | net/ipv6/reassembly.c | 3 | ||||
| -rw-r--r-- | net/sctp/input.c | 2 | 
26 files changed, 64 insertions, 64 deletions
diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c index d2be79a30f8..c26f8ce320e 100644 --- a/drivers/net/atl1/atl1_main.c +++ b/drivers/net/atl1/atl1_main.c @@ -1326,8 +1326,8 @@ static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb,  	u8 css, cso;  	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { -		cso = skb->h.raw - skb->data; -		css = (skb->h.raw + skb->csum_offset) - skb->data; +		cso = skb_transport_offset(skb); +		css = cso + skb->csum;  		if (unlikely(cso & 0x1)) {  			printk(KERN_DEBUG "%s: payload offset != even number\n",  				atl1_driver_name); @@ -1369,8 +1369,8 @@ static void atl1_tx_map(struct atl1_adapter *adapter,  	if (tcp_seg) {  		/* TSO/GSO */ -		proto_hdr_len = -		    ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); +		proto_hdr_len = (skb_transport_offset(skb) + +				 (skb->h.th->doff << 2));  		buffer_info->length = proto_hdr_len;  		page = virt_to_page(skb->data);  		offset = (unsigned long)skb->data & ~PAGE_MASK; @@ -1562,7 +1562,7 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  	mss = skb_shinfo(skb)->gso_size;  	if (mss) {  		if (skb->protocol == htons(ETH_P_IP)) { -			proto_hdr_len = ((skb->h.raw - skb->data) + +			proto_hdr_len = (skb_transport_offset(skb) +  					 (skb->h.th->doff << 2));  			if (unlikely(proto_hdr_len > len)) {  				dev_kfree_skb_any(skb); diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index 68e37a655fe..bd3ab6493e3 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c @@ -2821,10 +2821,8 @@ static inline int cas_xmit_tx_ringN(struct cas *cp, int ring,  	ctrl = 0;  	if (skb->ip_summed == CHECKSUM_PARTIAL) { -		u64 csum_start_off, csum_stuff_off; - -		csum_start_off = (u64) (skb->h.raw - skb->data); -		csum_stuff_off = csum_start_off + skb->csum_offset; +		const u64 csum_start_off = skb_transport_offset(skb); +		const u64 csum_stuff_off = csum_start_off + skb->csum_offset;  		ctrl =  TX_DESC_CSUM_EN |  			CAS_BASE(TX_DESC_CSUM_START, csum_start_off) | diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c index a891f6f8152..d38b1bcd138 100644 --- a/drivers/net/cxgb3/sge.c +++ b/drivers/net/cxgb3/sge.c @@ -1319,9 +1319,10 @@ static void write_ofld_wr(struct adapter *adap, struct sk_buff *skb,  	/* Only TX_DATA builds SGLs */  	from = (struct work_request_hdr *)skb->data; -	memcpy(&d->flit[1], &from[1], skb->h.raw - skb->data - sizeof(*from)); +	memcpy(&d->flit[1], &from[1], +	       skb_transport_offset(skb) - sizeof(*from)); -	flits = (skb->h.raw - skb->data) / 8; +	flits = skb_transport_offset(skb) / 8;  	sgp = ndesc == 1 ? (struct sg_ent *)&d->flit[flits] : sgl;  	sgl_flits = make_sgl(skb, sgp, skb->h.raw, skb->tail - skb->h.raw,  			     adap->pdev); @@ -1349,7 +1350,7 @@ static inline unsigned int calc_tx_descs_ofld(const struct sk_buff *skb)  	if (skb->len <= WR_LEN && cnt == 0)  		return 1;	/* packet fits as immediate data */ -	flits = (skb->h.raw - skb->data) / 8;	/* headers */ +	flits = skb_transport_offset(skb) / 8;	/* headers */  	if (skb->tail != skb->h.raw)  		cnt++;  	return flits_to_desc(flits + sgl_len(cnt)); diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index a3d9986b417..78cf417cf23 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -2887,7 +2887,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,  				return err;  		} -		hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); +		hdr_len = (skb_transport_offset(skb) + (skb->h.th->doff << 2));  		mss = skb_shinfo(skb)->gso_size;  		if (skb->protocol == htons(ETH_P_IP)) {  			struct iphdr *iph = ip_hdr(skb); @@ -2897,7 +2897,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,  							      iph->daddr, 0,  							      IPPROTO_TCP, 0);  			cmd_length = E1000_TXD_CMD_IP; -			ipcse = skb->h.raw - skb->data - 1; +			ipcse = skb_transport_offset(skb) - 1;  		} else if (skb->protocol == htons(ETH_P_IPV6)) {  			ipv6_hdr(skb)->payload_len = 0;  			skb->h.th->check = @@ -2908,7 +2908,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,  		}  		ipcss = skb_network_offset(skb);  		ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; -		tucss = skb->h.raw - skb->data; +		tucss = skb_transport_offset(skb);  		tucso = (void *)&(skb->h.th->check) - (void *)skb->data;  		tucse = 0; @@ -2950,7 +2950,7 @@ e1000_tx_csum(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,  	uint8_t css;  	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { -		css = skb->h.raw - skb->data; +		css = skb_transport_offset(skb);  		i = tx_ring->next_to_use;  		buffer_info = &tx_ring->buffer_info[i]; @@ -3292,7 +3292,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  		/* TSO Workaround for 82571/2/3 Controllers -- if skb->data  		* points to just header, pull a few bytes of payload from  		* frags into skb->data */ -		hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); +		hdr_len = (skb_transport_offset(skb) + (skb->h.th->doff << 2));  		if (skb->data_len && (hdr_len == (skb->len - skb->data_len))) {  			switch (adapter->hw.mac_type) {  				unsigned int pull_size; diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index bba4dcaf92e..ceea6e45792 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -1190,7 +1190,7 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)  				return err;  		} -		hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); +		hdr_len = (skb_transport_offset(skb) + (skb->h.th->doff << 2));  		mss = skb_shinfo(skb)->gso_size;  		iph = ip_hdr(skb);  		iph->tot_len = 0; @@ -1199,8 +1199,8 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)  						      0, IPPROTO_TCP, 0);  		ipcss = skb_network_offset(skb);  		ipcso = (void *)&(iph->check) - (void *)skb->data; -		ipcse = skb->h.raw - skb->data - 1; -		tucss = skb->h.raw - skb->data; +		ipcse = skb_transport_offset(skb) - 1; +		tucss = skb_transport_offset(skb);  		tucso = (void *)&(skb->h.th->check) - (void *)skb->data;  		tucse = 0; @@ -1245,7 +1245,7 @@ ixgb_tx_csum(struct ixgb_adapter *adapter, struct sk_buff *skb)  	if(likely(skb->ip_summed == CHECKSUM_PARTIAL)) {  		struct ixgb_buffer *buffer_info; -		css = skb->h.raw - skb->data; +		css = skb_transport_offset(skb);  		cso = css + skb->csum_offset;  		i = adapter->tx_ring.next_to_use; diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 7c04179c7b1..e04228c7b14 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c @@ -2029,7 +2029,7 @@ again:  	odd_flag = 0;  	flags = (MXGEFW_FLAGS_NO_TSO | MXGEFW_FLAGS_FIRST);  	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { -		cksum_offset = (skb->h.raw - skb->data); +		cksum_offset = skb_transport_offset(skb);  		pseudo_hdr_offset = cksum_offset + skb->csum_offset;  		/* If the headers are excessively large, then we must  		 * fall back to a software checksum */ @@ -2054,7 +2054,8 @@ again:  		 * send loop that we are still in the  		 * header portion of the TSO packet.  		 * TSO header must be at most 134 bytes long */ -		cum_len = -((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); +		cum_len = -(skb_transport_offset(skb) + +			    (skb->h.th->doff << 2));  		/* for TSO, pseudo_hdr_offset holds mss.  		 * The firmware figures out where to put diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c index 28d68c3550e..09ca2192cbf 100644 --- a/drivers/net/netxen/netxen_nic_hw.c +++ b/drivers/net/netxen/netxen_nic_hw.c @@ -387,7 +387,7 @@ void netxen_tso_check(struct netxen_adapter *adapter,  		}  	}  	adapter->stats.xmitcsummed++; -	desc->tcp_hdr_offset = skb->h.raw - skb->data; +	desc->tcp_hdr_offset = skb_transport_offset(skb);  	desc->ip_hdr_offset = skb_network_offset(skb);  } diff --git a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c index 9ac1fe659dc..e4ab7a8acc1 100644 --- a/drivers/net/sk98lin/skge.c +++ b/drivers/net/sk98lin/skge.c @@ -1562,7 +1562,7 @@ struct sk_buff	*pMessage)	/* pointer to send-message              */  	pTxd->pMBuf     = pMessage;  	if (pMessage->ip_summed == CHECKSUM_PARTIAL) { -		u16 hdrlen = pMessage->h.raw - pMessage->data; +		u16 hdrlen = skb_transport_offset(pMessage);  		u16 offset = hdrlen + pMessage->csum_offset;  		if ((pMessage->h.ipiph->protocol == IPPROTO_UDP ) && @@ -1681,7 +1681,7 @@ struct sk_buff	*pMessage)	/* pointer to send-message              */  	** Does the HW need to evaluate checksum for TCP or UDP packets?   	*/  	if (pMessage->ip_summed == CHECKSUM_PARTIAL) { -		u16 hdrlen = pMessage->h.raw - pMessage->data; +		u16 hdrlen = skb_transport_offset(pMessage);  		u16 offset = hdrlen + pMessage->csum_offset;  		Control = BMU_STFWD; diff --git a/drivers/net/skge.c b/drivers/net/skge.c index d476a3cc2e9..ca7a0e03984 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c @@ -2654,7 +2654,7 @@ static int skge_xmit_frame(struct sk_buff *skb, struct net_device *dev)  	td->dma_hi = map >> 32;  	if (skb->ip_summed == CHECKSUM_PARTIAL) { -		int offset = skb->h.raw - skb->data; +		const int offset = skb_transport_offset(skb);  		/* This seems backwards, but it is what the sk98lin  		 * does.  Looks like hardware is wrong? diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index a37bb205f3d..a35f2f2784a 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -1421,7 +1421,7 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)  	/* Handle TCP checksum offload */  	if (skb->ip_summed == CHECKSUM_PARTIAL) { -		unsigned offset = skb->h.raw - skb->data; +		const unsigned offset = skb_transport_offset(skb);  		u32 tcpsum;  		tcpsum = offset << 16;		/* sum start */ diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index db2e1a6b723..4bb89dec565 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -1028,10 +1028,8 @@ static int gem_start_xmit(struct sk_buff *skb, struct net_device *dev)  	ctrl = 0;  	if (skb->ip_summed == CHECKSUM_PARTIAL) { -		u64 csum_start_off, csum_stuff_off; - -		csum_start_off = (u64) (skb->h.raw - skb->data); -		csum_stuff_off = csum_start_off + skb->csum_offset; +		const u64 csum_start_off = skb_transport_offset(skb); +		const u64 csum_stuff_off = csum_start_off + skb->csum_offset;  		ctrl = (TXDCTRL_CENAB |  			(csum_start_off << 15) | diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index aca592bc032..4b69c1deb9f 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c @@ -2269,10 +2269,8 @@ static int happy_meal_start_xmit(struct sk_buff *skb, struct net_device *dev)  	tx_flags = TXFLAG_OWN;  	if (skb->ip_summed == CHECKSUM_PARTIAL) { -		u32 csum_start_off, csum_stuff_off; - -		csum_start_off = (u32) (skb->h.raw - skb->data); -		csum_stuff_off = csum_start_off + skb->csum_offset; +		const u32 csum_start_off = skb_transport_offset(skb); +		const u32 csum_stuff_off = csum_start_off + skb->csum_offset;  		tx_flags = (TXFLAG_OWN | TXFLAG_CSENABLE |  			    ((csum_start_off << 14) & TXFLAG_CSBUFBEGIN) | diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7c1f1756e48..64c3c1687e4 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -962,6 +962,11 @@ static inline void skb_reset_transport_header(struct sk_buff *skb)  	skb->h.raw = skb->data;  } +static inline int skb_transport_offset(const struct sk_buff *skb) +{ +	return skb->h.raw - skb->data; +} +  static inline unsigned char *skb_network_header(const struct sk_buff *skb)  {  	return skb->nh.raw; diff --git a/include/net/udplite.h b/include/net/udplite.h index d99df75fe54..76503203665 100644 --- a/include/net/udplite.h +++ b/include/net/udplite.h @@ -101,14 +101,14 @@ static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)  static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)  { -	int off, len, cscov = udplite_sender_cscov(udp_sk(sk), skb->h.uh); +	int cscov = udplite_sender_cscov(udp_sk(sk), skb->h.uh);  	__wsum csum = 0;  	skb->ip_summed = CHECKSUM_NONE;     /* no HW support for checksumming */  	skb_queue_walk(&sk->sk_write_queue, skb) { -		off = skb->h.raw - skb->data; -		len = skb->len - off; +		const int off = skb_transport_offset(skb); +		const int len = skb->len - off;  		csum = skb_checksum(skb, off, (cscov > len)? len : cscov, csum); diff --git a/net/core/dev.c b/net/core/dev.c index 99f15728d9c..f7f7e5687e4 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1156,7 +1156,7 @@ EXPORT_SYMBOL(netif_device_attach);  int skb_checksum_help(struct sk_buff *skb)  {  	__wsum csum; -	int ret = 0, offset = skb->h.raw - skb->data; +	int ret = 0, offset = skb_transport_offset(skb);  	if (skb->ip_summed == CHECKSUM_COMPLETE)  		goto out_set_summed; diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 1493c95f633..b242020c02f 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -1348,7 +1348,7 @@ void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to)  	long csstart;  	if (skb->ip_summed == CHECKSUM_PARTIAL) -		csstart = skb->h.raw - skb->data; +		csstart = skb_transport_offset(skb);  	else  		csstart = skb_headlen(skb); diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index ed3deed6644..95767456280 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c @@ -27,7 +27,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)  	int nfrags;  	/* Strip IP+ESP header. */ -	__skb_pull(skb, skb->h.raw - skb->data); +	__skb_pull(skb, skb_transport_offset(skb));  	/* Now skb is pure payload to encrypt */  	err = -ENOMEM; diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 13739cd8206..13875e8419a 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -435,7 +435,7 @@ static void udp4_hwcsum_outgoing(struct sock *sk, struct sk_buff *skb,  		 * fragments on the socket so that all csums of sk_buffs  		 * should be together  		 */ -		offset = skb->h.raw - skb->data; +		offset = skb_transport_offset(skb);  		skb->csum = skb_checksum(skb, offset, skb->len - offset, 0);  		skb->ip_summed = CHECKSUM_NONE; diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c index 7aff380e74e..35905867ded 100644 --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c @@ -42,21 +42,18 @@  static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)  {  	int err; -	int hdr_len;  	struct ipv6hdr *top_iph;  	struct ipv6_esp_hdr *esph;  	struct crypto_blkcipher *tfm;  	struct blkcipher_desc desc; -	struct esp_data *esp;  	struct sk_buff *trailer;  	int blksize;  	int clen;  	int alen;  	int nfrags; - -	esp = x->data; -	hdr_len = skb->h.raw - skb->data + -		  sizeof(*esph) + esp->conf.ivlen; +	struct esp_data *esp = x->data; +	int hdr_len = (skb_transport_offset(skb) + +		       sizeof(*esph) + esp->conf.ivlen);  	/* Strip IP+ESP header. */  	__skb_pull(skb, hdr_len); diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index dab069b0b3f..1bda0299890 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c @@ -146,7 +146,7 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp)  	int off = skb->h.raw - skb->nh.raw;  	int len = ((skb->h.raw[1]+1)<<3); -	if ((skb->h.raw + len) - skb->data > skb_headlen(skb)) +	if (skb_transport_offset(skb) + len > skb_headlen(skb))  		goto bad;  	off += 2; @@ -288,8 +288,9 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)  #endif  	struct dst_entry *dst; -	if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || -	    !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { +	if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || +	    !pskb_may_pull(skb, (skb_transport_offset(skb) + +				 ((skb->h.raw[1] + 1) << 3)))) {  		IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),  				 IPSTATS_MIB_INHDRERRORS);  		kfree_skb(skb); @@ -387,8 +388,9 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp)  	in6_dev_put(idev); -	if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || -	    !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { +	if (!pskb_may_pull(skb, skb_transport_offset(skb) + 8) || +	    !pskb_may_pull(skb, (skb_transport_offset(skb) + +				 ((skb->h.raw[1] + 1) << 3)))) {  		IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),  				 IPSTATS_MIB_INHDRERRORS);  		kfree_skb(skb); diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index 2dd32a2ca05..44275411d1a 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c @@ -160,7 +160,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)  	rcu_read_lock();  resubmit:  	idev = ip6_dst_idev(skb->dst); -	if (!pskb_pull(skb, skb->h.raw - skb->data)) +	if (!pskb_pull(skb, skb_transport_offset(skb)))  		goto discard;  	nhoff = IP6CB(skb)->nhoff;  	nexthdr = skb_network_header(skb)[nhoff]; diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c index e2404a62968..4a6501695e9 100644 --- a/net/ipv6/ipcomp6.c +++ b/net/ipv6/ipcomp6.c @@ -124,15 +124,13 @@ static int ipcomp6_output(struct xfrm_state *x, struct sk_buff *skb)  {  	int err;  	struct ipv6hdr *top_iph; -	int hdr_len;  	struct ipv6_comp_hdr *ipch;  	struct ipcomp_data *ipcd = x->data;  	int plen, dlen;  	u8 *start, *scratch;  	struct crypto_comp *tfm;  	int cpu; - -	hdr_len = skb->h.raw - skb->data; +	int hdr_len = skb_transport_offset(skb);  	/* check whether datagram len is larger than threshold */  	if ((skb->len - hdr_len) < ipcd->threshold) { diff --git a/net/ipv6/mip6.c b/net/ipv6/mip6.c index 7b5f9d82e80..85202891644 100644 --- a/net/ipv6/mip6.c +++ b/net/ipv6/mip6.c @@ -90,8 +90,9 @@ int mip6_mh_filter(struct sock *sk, struct sk_buff *skb)  {  	struct ip6_mh *mh; -	if (!pskb_may_pull(skb, (skb->h.raw - skb->data) + 8) || -	    !pskb_may_pull(skb, (skb->h.raw - skb->data) + ((skb->h.raw[1] + 1) << 3))) +	if (!pskb_may_pull(skb, (skb_transport_offset(skb)) + 8) || +	    !pskb_may_pull(skb, (skb_transport_offset(skb) + +				 ((skb->h.raw[1] + 1) << 3))))  		return -1;  	mh = (struct ip6_mh *)skb->h.raw; diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 0e2b56ce0a5..bb049f1c267 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -513,7 +513,7 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl,  			if (csum_skb)  				continue; -			len = skb->len - (skb->h.raw - skb->data); +			len = skb->len - skb_transport_offset(skb);  			if (offset >= len) {  				offset -= len;  				continue; @@ -525,7 +525,7 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl,  		skb = csum_skb;  	} -	offset += skb->h.raw - skb->data; +	offset += skb_transport_offset(skb);  	if (skb_copy_bits(skb, offset, &csum, 2))  		BUG(); diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index 2594f0fb290..ef29a7bb97c 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c @@ -718,7 +718,8 @@ static int ipv6_frag_rcv(struct sk_buff **skbp)  		icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw);  		return -1;  	} -	if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+sizeof(struct frag_hdr))) { +	if (!pskb_may_pull(skb, (skb_transport_offset(skb) + +				 sizeof(struct frag_hdr)))) {  		IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);  		icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw);  		return -1; diff --git a/net/sctp/input.c b/net/sctp/input.c index 595fe32b3d4..9311b5ddf5c 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -141,7 +141,7 @@ int sctp_rcv(struct sk_buff *skb)  	sh = (struct sctphdr *) skb->h.raw;  	/* Pull up the IP and SCTP headers. */ -	__skb_pull(skb, skb->h.raw - skb->data); +	__skb_pull(skb, skb_transport_offset(skb));  	if (skb->len < sizeof(struct sctphdr))  		goto discard_it;  	if ((skb->ip_summed != CHECKSUM_UNNECESSARY) &&  |