diff options
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/atmel.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_dma.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_80211_rx.c | 13 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_80211_tx.c | 23 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_ap.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_hw.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2100.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2200.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/prism54/islpci_eth.c | 13 | ||||
| -rw-r--r-- | drivers/net/wireless/ray_cs.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/wavelan.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/zd1201.c | 4 | 
12 files changed, 49 insertions, 32 deletions
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index 1c17cbe007b..51a7db53afa 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c @@ -827,14 +827,14 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)  	if (priv->wep_is_on)  		frame_ctl |= IEEE80211_FCTL_PROTECTED;  	if (priv->operating_mode == IW_MODE_ADHOC) { -		memcpy(&header.addr1, skb->data, 6); +		skb_copy_from_linear_data(skb, &header.addr1, 6);  		memcpy(&header.addr2, dev->dev_addr, 6);  		memcpy(&header.addr3, priv->BSSID, 6);  	} else {  		frame_ctl |= IEEE80211_FCTL_TODS;  		memcpy(&header.addr1, priv->CurrentBSSID, 6);  		memcpy(&header.addr2, dev->dev_addr, 6); -		memcpy(&header.addr3, skb->data, 6); +		skb_copy_from_linear_data(skb, &header.addr3, 6);  	}  	if (priv->use_wpa) diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c index 6e0dc76400e..e3d2e61a31e 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_dma.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_dma.c @@ -998,7 +998,8 @@ static void dma_tx_fragment(struct bcm43xx_dmaring *ring,  			assert(0);  			return;  		} -		memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len); +		skb_copy_from_linear_data(skb, skb_put(bounce_skb, skb->len), +					  skb->len);  		dev_kfree_skb_any(skb);  		skb = bounce_skb;  	} diff --git a/drivers/net/wireless/hostap/hostap_80211_rx.c b/drivers/net/wireless/hostap/hostap_80211_rx.c index 35a3a50724f..cbedc9ee740 100644 --- a/drivers/net/wireless/hostap/hostap_80211_rx.c +++ b/drivers/net/wireless/hostap/hostap_80211_rx.c @@ -933,12 +933,14 @@ void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb,  		if (frag == 0) {  			/* copy first fragment (including full headers) into  			 * beginning of the fragment cache skb */ -			memcpy(skb_put(frag_skb, flen), skb->data, flen); +			skb_copy_from_linear_data(skb, skb_put(frag_skb, flen), +						  flen);  		} else {  			/* append frame payload to the end of the fragment  			 * cache skb */ -			memcpy(skb_put(frag_skb, flen), skb->data + hdrlen, -			       flen); +			skb_copy_from_linear_data_offset(skb, hdrlen, +							 skb_put(frag_skb, +								 flen), flen);  		}  		dev_kfree_skb(skb);  		skb = NULL; @@ -1044,8 +1046,9 @@ void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb,  	    skb->len >= ETH_HLEN + ETH_ALEN) {  		/* Non-standard frame: get addr4 from its bogus location after  		 * the payload */ -		memcpy(skb->data + ETH_ALEN, -		       skb->data + skb->len - ETH_ALEN, ETH_ALEN); +		skb_copy_from_linear_data_offset(skb, skb->len - ETH_ALEN, +						 skb->data + ETH_ALEN, +						 ETH_ALEN);  		skb_trim(skb, skb->len - ETH_ALEN);  	} diff --git a/drivers/net/wireless/hostap/hostap_80211_tx.c b/drivers/net/wireless/hostap/hostap_80211_tx.c index 159baef18e4..246fac0e800 100644 --- a/drivers/net/wireless/hostap/hostap_80211_tx.c +++ b/drivers/net/wireless/hostap/hostap_80211_tx.c @@ -146,7 +146,8 @@ int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev)  			fc |= IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS;  			/* From&To DS: Addr1 = RA, Addr2 = TA, Addr3 = DA,  			 * Addr4 = SA */ -			memcpy(&hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); +			skb_copy_from_linear_data_offset(skb, ETH_ALEN, +							 &hdr.addr4, ETH_ALEN);  			hdr_len += ETH_ALEN;  		} else {  			/* bogus 4-addr format to workaround Prism2 station @@ -159,7 +160,8 @@ int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev)  			/* SA from skb->data + ETH_ALEN will be added after  			 * frame payload; use hdr.addr4 as a temporary buffer  			 */ -			memcpy(&hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN); +			skb_copy_from_linear_data_offset(skb, ETH_ALEN, +							 &hdr.addr4, ETH_ALEN);  			need_tailroom += ETH_ALEN;  		} @@ -174,24 +176,27 @@ int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev)  		else  			memcpy(&hdr.addr1, local->bssid, ETH_ALEN);  		memcpy(&hdr.addr2, dev->dev_addr, ETH_ALEN); -		memcpy(&hdr.addr3, skb->data, ETH_ALEN); +		skb_copy_from_linear_data(skb, &hdr.addr3, ETH_ALEN);  	} else if (local->iw_mode == IW_MODE_MASTER && !to_assoc_ap) {  		fc |= IEEE80211_FCTL_FROMDS;  		/* From DS: Addr1 = DA, Addr2 = BSSID, Addr3 = SA */ -		memcpy(&hdr.addr1, skb->data, ETH_ALEN); +		skb_copy_from_linear_data(skb, &hdr.addr1, ETH_ALEN);  		memcpy(&hdr.addr2, dev->dev_addr, ETH_ALEN); -		memcpy(&hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN); +		skb_copy_from_linear_data_offset(skb, ETH_ALEN, &hdr.addr3, +						 ETH_ALEN);  	} else if (local->iw_mode == IW_MODE_INFRA || to_assoc_ap) {  		fc |= IEEE80211_FCTL_TODS;  		/* To DS: Addr1 = BSSID, Addr2 = SA, Addr3 = DA */  		memcpy(&hdr.addr1, to_assoc_ap ?  		       local->assoc_ap_addr : local->bssid, ETH_ALEN); -		memcpy(&hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); -		memcpy(&hdr.addr3, skb->data, ETH_ALEN); +		skb_copy_from_linear_data_offset(skb, ETH_ALEN, &hdr.addr2, +						 ETH_ALEN); +		skb_copy_from_linear_data(skb, &hdr.addr3, ETH_ALEN);  	} else if (local->iw_mode == IW_MODE_ADHOC) {  		/* not From/To DS: Addr1 = DA, Addr2 = SA, Addr3 = BSSID */ -		memcpy(&hdr.addr1, skb->data, ETH_ALEN); -		memcpy(&hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN); +		skb_copy_from_linear_data(skb, &hdr.addr1, ETH_ALEN); +		skb_copy_from_linear_data_offset(skb, ETH_ALEN, &hdr.addr2, +						 ETH_ALEN);  		memcpy(&hdr.addr3, local->bssid, ETH_ALEN);  	} diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c index 797d950d5d6..4ca8a27b8c5 100644 --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c @@ -1277,8 +1277,8 @@ static char * ap_auth_make_challenge(struct ap_data *ap)  		return NULL;  	} -	memcpy(tmpbuf, skb->data + ap->crypt->extra_mpdu_prefix_len, -	       WLAN_AUTH_CHALLENGE_LEN); +	skb_copy_from_linear_data_offset(skb, ap->crypt->extra_mpdu_prefix_len, +					 tmpbuf, WLAN_AUTH_CHALLENGE_LEN);  	dev_kfree_skb(skb);  	return tmpbuf; diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index 9003ff7d151..fb01fb95a9f 100644 --- a/drivers/net/wireless/hostap/hostap_hw.c +++ b/drivers/net/wireless/hostap/hostap_hw.c @@ -1838,13 +1838,14 @@ static int prism2_tx_80211(struct sk_buff *skb, struct net_device *dev)  	/* skb->data starts with txdesc->frame_control */  	hdr_len = 24; -	memcpy(&txdesc.frame_control, skb->data, hdr_len); +	skb_copy_from_linear_data(skb, &txdesc.frame_control, hdr_len);   	fc = le16_to_cpu(txdesc.frame_control);  	if (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_DATA &&  	    (fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS) &&  	    skb->len >= 30) {  		/* Addr4 */ -		memcpy(txdesc.addr4, skb->data + hdr_len, ETH_ALEN); +		skb_copy_from_linear_data_offset(skb, hdr_len, txdesc.addr4, +						 ETH_ALEN);  		hdr_len += ETH_ALEN;  	} diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index ad6e4a42835..9137a4dd02e 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c @@ -2416,8 +2416,9 @@ static void isr_rx(struct ipw2100_priv *priv, int i,  #ifdef IPW2100_RX_DEBUG  	/* Make a copy of the frame so we can dump it to the logs if  	 * ieee80211_rx fails */ -	memcpy(packet_data, packet->skb->data, -	       min_t(u32, status->frame_size, IPW_RX_NIC_BUFFER_LENGTH)); +	skb_copy_from_linear_data(packet->skb, packet_data, +				  min_t(u32, status->frame_size, +					     IPW_RX_NIC_BUFFER_LENGTH));  #endif  	if (!ieee80211_rx(priv->ieee, packet->skb, stats)) { diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index b04c56a25cc..4839a45098c 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c @@ -10355,7 +10355,7 @@ static void ipw_handle_promiscuous_tx(struct ipw_priv *priv,  		rt_hdr->it_len = dst->len; -		memcpy(skb_put(dst, len), src->data, len); +		skb_copy_from_linear_data(src, skb_put(dst, len), len);  		if (!ieee80211_rx(priv->prom_priv->ieee, dst, &dummystats))  			dev_kfree_skb_any(dst); diff --git a/drivers/net/wireless/prism54/islpci_eth.c b/drivers/net/wireless/prism54/islpci_eth.c index 6ebfff03424..7d8bff1dbc4 100644 --- a/drivers/net/wireless/prism54/islpci_eth.c +++ b/drivers/net/wireless/prism54/islpci_eth.c @@ -162,13 +162,16 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)  			skb_put(newskb, init_wds ? skb->len + 6 : skb->len);  			if (init_wds) { -				memcpy(newskb->data + 6, skb->data, skb->len); +				skb_copy_from_linear_data(skb, +							  newskb->data + 6, +							  skb->len);  				memcpy(newskb->data, wds_mac, 6);  #ifdef ISLPCI_ETH_DEBUG  				printk("islpci_eth_transmit:wds_mac\n");  #endif  			} else -				memcpy(newskb->data, skb->data, skb->len); +				skb_copy_from_linear_data(skb, newskb->data, +							  skb->len);  #if VERBOSE > SHOW_ERROR_MESSAGES  			DEBUG(SHOW_TRACING, "memcpy %p %p %i wds %i\n", @@ -394,8 +397,10 @@ islpci_eth_receive(islpci_private *priv)  			/* Update spy records */  			wireless_spy_update(ndev, annex->addr2, &wstats); -			memcpy(skb->data + sizeof (struct rfmon_header), -			       skb->data, 2 * ETH_ALEN); +			skb_copy_from_linear_data(skb, +						  (skb->data + +						   sizeof(struct rfmon_header)), +						  2 * ETH_ALEN);  			skb_pull(skb, sizeof (struct rfmon_header));  		}  		skb->protocol = eth_type_trans(skb, ndev); diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c index 9633b0457f8..3be624295a1 100644 --- a/drivers/net/wireless/ray_cs.c +++ b/drivers/net/wireless/ray_cs.c @@ -2242,7 +2242,8 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs, unsigned i      rx_ptr += copy_from_rx_buff(local, rx_ptr, pkt_addr & RX_BUFF_END, rx_len);      /* Get source address */  #ifdef WIRELESS_SPY -    memcpy(linksrcaddr, ((struct mac_header *)skb->data)->addr_2, ETH_ALEN); +    skb_copy_from_linear_data_offset(skb, offsetof(struct mac_header, addr_2), +				     linksrcaddr, ETH_ALEN);  #endif      /* Now, deal with encapsulation/translation/sniffer */      if (!sniffer) { diff --git a/drivers/net/wireless/wavelan.c b/drivers/net/wireless/wavelan.c index 2bf77b1ee53..1cf090d60ed 100644 --- a/drivers/net/wireless/wavelan.c +++ b/drivers/net/wireless/wavelan.c @@ -2938,7 +2938,7 @@ static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)  	 * need to pad. Jean II */  	if (skb->len < ETH_ZLEN) {  		memset(data, 0, ETH_ZLEN); -		memcpy(data, skb->data, skb->len); +		skb_copy_from_linear_data(skb, data, skb->len);  		/* Write packet on the card */  		if(wv_packet_write(dev, data, ETH_ZLEN))  			return 1;	/* We failed */ diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c index 1fe013a7297..935b144d9b5 100644 --- a/drivers/net/wireless/zd1201.c +++ b/drivers/net/wireless/zd1201.c @@ -807,10 +807,10 @@ static int zd1201_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)  	txbuf[4] = 0x00;  	txbuf[5] = 0x00; -	memcpy(txbuf+6, skb->data+12, skb->len-12); +	skb_copy_from_linear_data_offset(skb, 12, txbuf + 6, skb->len - 12);  	if (pad)  		txbuf[skb->len-12+6]=0; -	memcpy(txbuf+skb->len-12+6+pad, skb->data, 12); +	skb_copy_from_linear_data(skb, txbuf + skb->len - 12 + 6 + pad, 12);  	*(__be16*)&txbuf[skb->len+6+pad] = htons(skb->len-12+6);  	txbuf[txbuflen-1] = 0;  |