Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] libertas: fix sparse-reported problems

A few fields being converted to the wrong sized type, and a few missed
endian conversions.

Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Dan Williams and committed by
David S. Miller
8362cd41 c7fdf269

+23 -27
+1 -1
drivers/net/wireless/libertas/11d.c
··· 543 543 nr_subband * sizeof(struct ieeetypes_subbandset)); 544 544 545 545 cmd->size = cpu_to_le16(sizeof(pdomaininfo->action) + 546 - domain->header.len + 546 + le16_to_cpu(domain->header.len) + 547 547 sizeof(struct mrvlietypesheader) + 548 548 S_DS_GEN); 549 549 } else {
+2 -2
drivers/net/wireless/libertas/cmdresp.c
··· 812 812 813 813 if (adapter->cur_cmd->cmdflags & CMD_F_HOSTCMD) { 814 814 /* Copy the response back to response buffer */ 815 - memcpy(adapter->cur_cmd->pdata_buf, resp, resp->size); 816 - 815 + memcpy(adapter->cur_cmd->pdata_buf, resp, 816 + le16_to_cpu(resp->size)); 817 817 adapter->cur_cmd->cmdflags &= ~CMD_F_HOSTCMD; 818 818 } 819 819
+1 -1
drivers/net/wireless/libertas/debugfs.c
··· 510 510 return 0; 511 511 } 512 512 513 - if (pcmdptr->command != CMD_RET(CMD_802_11_SUBSCRIBE_EVENT)) { 513 + if (le16_to_cpu(pcmdptr->command) != CMD_RET(CMD_802_11_SUBSCRIBE_EVENT)) { 514 514 lbs_pr_err("command response incorrect!\n"); 515 515 kfree(response_buf); 516 516 return 0;
+13 -17
drivers/net/wireless/libertas/if_usb.c
··· 639 639 640 640 int recvlength = urb->actual_length; 641 641 u8 *recvbuff = NULL; 642 - u32 recvtype; 642 + u32 recvtype = 0; 643 643 644 644 lbs_deb_enter(LBS_DEB_USB); 645 645 646 646 if (recvlength) { 647 + __le32 tmp; 648 + 647 649 if (urb->status) { 648 650 lbs_deb_usbd(&cardp->udev->dev, 649 651 "URB status is failed\n"); ··· 654 652 } 655 653 656 654 recvbuff = skb->data + IPFIELD_ALIGN_OFFSET; 657 - memcpy(&recvtype, recvbuff, sizeof(u32)); 655 + memcpy(&tmp, recvbuff, sizeof(u32)); 656 + recvtype = le32_to_cpu(tmp); 658 657 lbs_deb_usbd(&cardp->udev->dev, 659 - "Recv length = 0x%x\n", recvlength); 660 - lbs_deb_usbd(&cardp->udev->dev, 661 - "Receive type = 0x%X\n", recvtype); 662 - recvtype = le32_to_cpu(recvtype); 663 - lbs_deb_usbd(&cardp->udev->dev, 664 - "Receive type after = 0x%X\n", recvtype); 658 + "Recv length = 0x%x, Recv type = 0x%X\n", 659 + recvlength, recvtype); 665 660 } else if (urb->status) 666 661 goto rx_exit; 667 - 668 662 669 663 switch (recvtype) { 670 664 case CMD_TYPE_DATA: ··· 689 691 spin_unlock(&priv->adapter->driver_lock); 690 692 goto rx_exit; 691 693 default: 694 + lbs_deb_usbd(&cardp->udev->dev, "Unknown command type 0x%X\n", 695 + recvtype); 692 696 kfree_skb(skb); 693 697 break; 694 698 } ··· 711 711 */ 712 712 static int if_usb_host_to_card(wlan_private * priv, u8 type, u8 * payload, u16 nb) 713 713 { 714 - int ret = -1; 715 - u32 tmp; 716 714 struct usb_card_rec *cardp = (struct usb_card_rec *)priv->card; 717 715 718 716 lbs_deb_usbd(&cardp->udev->dev,"*** type = %u\n", type); 719 717 lbs_deb_usbd(&cardp->udev->dev,"size after = %d\n", nb); 720 718 721 719 if (type == MVMS_CMD) { 722 - tmp = cpu_to_le32(CMD_TYPE_REQUEST); 720 + __le32 tmp = cpu_to_le32(CMD_TYPE_REQUEST); 723 721 priv->dnld_sent = DNLD_CMD_SENT; 724 722 memcpy(cardp->bulk_out_buffer, (u8 *) & tmp, 725 723 MESSAGE_HEADER_LEN); 726 724 727 725 } else { 728 - tmp = cpu_to_le32(CMD_TYPE_DATA); 726 + __le32 tmp = cpu_to_le32(CMD_TYPE_DATA); 729 727 priv->dnld_sent = DNLD_DATA_SENT; 730 728 memcpy(cardp->bulk_out_buffer, (u8 *) & tmp, 731 729 MESSAGE_HEADER_LEN); ··· 731 733 732 734 memcpy((cardp->bulk_out_buffer + MESSAGE_HEADER_LEN), payload, nb); 733 735 734 - ret = 735 - usb_tx_block(priv, cardp->bulk_out_buffer, nb + MESSAGE_HEADER_LEN); 736 - 737 - return ret; 736 + return usb_tx_block(priv, cardp->bulk_out_buffer, 737 + nb + MESSAGE_HEADER_LEN); 738 738 } 739 739 740 740 /* called with adapter->driver_lock held */
+2 -2
drivers/net/wireless/libertas/rx.c
··· 370 370 radiotap_hdr.hdr.it_version = 0; 371 371 /* XXX must check this value for pad */ 372 372 radiotap_hdr.hdr.it_pad = 0; 373 - radiotap_hdr.hdr.it_len = sizeof(struct rx_radiotap_hdr); 374 - radiotap_hdr.hdr.it_present = RX_RADIOTAP_PRESENT; 373 + radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr)); 374 + radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT); 375 375 /* unknown values */ 376 376 radiotap_hdr.flags = 0; 377 377 radiotap_hdr.chan_freq = 0;
+4 -4
drivers/net/wireless/libertas/wext.c
··· 872 872 /* Quality by TX errors */ 873 873 priv->wstats.discard.retries = priv->stats.tx_errors; 874 874 875 - tx_retries = le16_to_cpu(adapter->logmsg.retry); 875 + tx_retries = le32_to_cpu(adapter->logmsg.retry); 876 876 877 877 if (tx_retries > 75) 878 878 tx_qual = (90 - tx_retries) * POOR / 15; ··· 888 888 (PERFECT - VERY_GOOD) / 50 + VERY_GOOD; 889 889 quality = min(quality, tx_qual); 890 890 891 - priv->wstats.discard.code = le16_to_cpu(adapter->logmsg.wepundecryptable); 892 - priv->wstats.discard.fragment = le16_to_cpu(adapter->logmsg.rxfrag); 891 + priv->wstats.discard.code = le32_to_cpu(adapter->logmsg.wepundecryptable); 892 + priv->wstats.discard.fragment = le32_to_cpu(adapter->logmsg.rxfrag); 893 893 priv->wstats.discard.retries = tx_retries; 894 - priv->wstats.discard.misc = le16_to_cpu(adapter->logmsg.ackfailure); 894 + priv->wstats.discard.misc = le32_to_cpu(adapter->logmsg.ackfailure); 895 895 896 896 /* Calculate quality */ 897 897 priv->wstats.qual.qual = min_t(u8, quality, 100);