diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2011-09-01 13:23:14 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-09-06 19:35:56 -0400 |
commit | 35f8673d11b60c6c887f8f28734233a7aa580afa (patch) | |
tree | 4328071e00c6229fa9fc16f311417a5ba471c476 /drivers/staging/rtl8192e | |
parent | aa9af000a30e81a40294c21861402dd3c8d610ea (diff) |
staging: rtl8192e: Fix smatch error and warning in rtl_core.c
Smatch shows the following errors:
CHECK drivers/staging/rtl8192e/rtl_core.c
drivers/staging/rtl8192e/rtl_core.c +600 rtl8192_qos_activate(7) warn: variable dereferenced before check 'priv'
drivers/staging/rtl8192e/rtl_core.c +1345 rtl8192_init(40) warn: 'dev->irq' was not released on error
drivers/staging/rtl8192e/rtl_core.c +2120 rtl8192_alloc_rx_desc_ring(43) error: potential null derefence 'entry'.
drivers/staging/rtl8192e/rtl_core.c +3010 rtl8192_pci_probe(153) warn: 'pmem_start' was not released on error
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/rtl8192e')
-rw-r--r-- | drivers/staging/rtl8192e/rtl_core.c | 58 |
1 files changed, 24 insertions, 34 deletions
diff --git a/drivers/staging/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl_core.c index ce0b2ff9273..4c5d7abd9be 100644 --- a/drivers/staging/rtl8192e/rtl_core.c +++ b/drivers/staging/rtl8192e/rtl_core.c | |||
@@ -448,7 +448,7 @@ bool MgntActSet_RF_State(struct net_device *dev, | |||
448 | spin_unlock_irqrestore(&priv->rf_ps_lock, flag); | 448 | spin_unlock_irqrestore(&priv->rf_ps_lock, flag); |
449 | } | 449 | } |
450 | 450 | ||
451 | RT_TRACE((COMP_PS && COMP_RF), "<===MgntActSet_RF_State()\n"); | 451 | RT_TRACE((COMP_PS | COMP_RF), "<===MgntActSet_RF_State()\n"); |
452 | return bActionAllowed; | 452 | return bActionAllowed; |
453 | } | 453 | } |
454 | 454 | ||
@@ -597,9 +597,6 @@ static void rtl8192_qos_activate(void *data) | |||
597 | struct net_device *dev = priv->rtllib->dev; | 597 | struct net_device *dev = priv->rtllib->dev; |
598 | int i; | 598 | int i; |
599 | 599 | ||
600 | if (priv == NULL) | ||
601 | return; | ||
602 | |||
603 | mutex_lock(&priv->mutex); | 600 | mutex_lock(&priv->mutex); |
604 | if (priv->rtllib->state != RTLLIB_LINKED) | 601 | if (priv->rtllib->state != RTLLIB_LINKED) |
605 | goto success; | 602 | goto success; |
@@ -1342,6 +1339,7 @@ static short rtl8192_init(struct net_device *dev) | |||
1342 | 1339 | ||
1343 | if (rtl8192_pci_initdescring(dev) != 0) { | 1340 | if (rtl8192_pci_initdescring(dev) != 0) { |
1344 | printk(KERN_ERR "Endopoints initialization failed"); | 1341 | printk(KERN_ERR "Endopoints initialization failed"); |
1342 | free_irq(dev->irq, dev); | ||
1345 | return -1; | 1343 | return -1; |
1346 | } | 1344 | } |
1347 | 1345 | ||
@@ -2117,7 +2115,8 @@ static short rtl8192_alloc_rx_desc_ring(struct net_device *dev) | |||
2117 | entry->OWN = 1; | 2115 | entry->OWN = 1; |
2118 | } | 2116 | } |
2119 | 2117 | ||
2120 | entry->EOR = 1; | 2118 | if(entry) |
2119 | entry->EOR = 1; | ||
2121 | } | 2120 | } |
2122 | return 0; | 2121 | return 0; |
2123 | } | 2122 | } |
@@ -2862,7 +2861,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2862 | struct r8192_priv *priv = NULL; | 2861 | struct r8192_priv *priv = NULL; |
2863 | struct rtl819x_ops *ops = (struct rtl819x_ops *)(id->driver_data); | 2862 | struct rtl819x_ops *ops = (struct rtl819x_ops *)(id->driver_data); |
2864 | unsigned long pmem_start, pmem_len, pmem_flags; | 2863 | unsigned long pmem_start, pmem_len, pmem_flags; |
2865 | int err = 0; | 2864 | int err = -ENOMEM; |
2866 | bool bdma64 = false; | 2865 | bool bdma64 = false; |
2867 | u8 revision_id; | 2866 | u8 revision_id; |
2868 | 2867 | ||
@@ -2878,14 +2877,14 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2878 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { | 2877 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { |
2879 | if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { | 2878 | if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { |
2880 | printk(KERN_INFO "Unable to obtain 32bit DMA for consistent allocations\n"); | 2879 | printk(KERN_INFO "Unable to obtain 32bit DMA for consistent allocations\n"); |
2881 | pci_disable_device(pdev); | 2880 | goto err_pci_disable; |
2882 | return -ENOMEM; | ||
2883 | } | 2881 | } |
2884 | } | 2882 | } |
2885 | dev = alloc_rtllib(sizeof(struct r8192_priv)); | 2883 | dev = alloc_rtllib(sizeof(struct r8192_priv)); |
2886 | if (!dev) | 2884 | if (!dev) |
2887 | return -ENOMEM; | 2885 | goto err_pci_disable; |
2888 | 2886 | ||
2887 | err = -ENODEV; | ||
2889 | if (bdma64) | 2888 | if (bdma64) |
2890 | dev->features |= NETIF_F_HIGHDMA; | 2889 | dev->features |= NETIF_F_HIGHDMA; |
2891 | 2890 | ||
@@ -2907,20 +2906,20 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2907 | 2906 | ||
2908 | if (!(pmem_flags & IORESOURCE_MEM)) { | 2907 | if (!(pmem_flags & IORESOURCE_MEM)) { |
2909 | RT_TRACE(COMP_ERR, "region #1 not a MMIO resource, aborting"); | 2908 | RT_TRACE(COMP_ERR, "region #1 not a MMIO resource, aborting"); |
2910 | goto fail; | 2909 | goto err_rel_rtllib; |
2911 | } | 2910 | } |
2912 | 2911 | ||
2913 | printk(KERN_INFO "Memory mapped space start: 0x%08lx\n", pmem_start); | 2912 | printk(KERN_INFO "Memory mapped space start: 0x%08lx\n", pmem_start); |
2914 | if (!request_mem_region(pmem_start, pmem_len, DRV_NAME)) { | 2913 | if (!request_mem_region(pmem_start, pmem_len, DRV_NAME)) { |
2915 | RT_TRACE(COMP_ERR, "request_mem_region failed!"); | 2914 | RT_TRACE(COMP_ERR, "request_mem_region failed!"); |
2916 | goto fail; | 2915 | goto err_rel_rtllib; |
2917 | } | 2916 | } |
2918 | 2917 | ||
2919 | 2918 | ||
2920 | ioaddr = (unsigned long)ioremap_nocache(pmem_start, pmem_len); | 2919 | ioaddr = (unsigned long)ioremap_nocache(pmem_start, pmem_len); |
2921 | if (ioaddr == (unsigned long)NULL) { | 2920 | if (ioaddr == (unsigned long)NULL) { |
2922 | RT_TRACE(COMP_ERR, "ioremap failed!"); | 2921 | RT_TRACE(COMP_ERR, "ioremap failed!"); |
2923 | goto fail1; | 2922 | goto err_rel_mem; |
2924 | } | 2923 | } |
2925 | 2924 | ||
2926 | dev->mem_start = ioaddr; | 2925 | dev->mem_start = ioaddr; |
@@ -2929,12 +2928,12 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2929 | pci_read_config_byte(pdev, 0x08, &revision_id); | 2928 | pci_read_config_byte(pdev, 0x08, &revision_id); |
2930 | /* If the revisionid is 0x10, the device uses rtl8192se. */ | 2929 | /* If the revisionid is 0x10, the device uses rtl8192se. */ |
2931 | if (pdev->device == 0x8192 && revision_id == 0x10) | 2930 | if (pdev->device == 0x8192 && revision_id == 0x10) |
2932 | goto fail1; | 2931 | goto err_rel_mem; |
2933 | 2932 | ||
2934 | priv->ops = ops; | 2933 | priv->ops = ops; |
2935 | 2934 | ||
2936 | if (rtl8192_pci_findadapter(pdev, dev) == false) | 2935 | if (rtl8192_pci_findadapter(pdev, dev) == false) |
2937 | goto fail1; | 2936 | goto err_rel_mem; |
2938 | 2937 | ||
2939 | dev->irq = pdev->irq; | 2938 | dev->irq = pdev->irq; |
2940 | priv->irq = 0; | 2939 | priv->irq = 0; |
@@ -2967,7 +2966,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2967 | RT_TRACE(COMP_INIT, "Driver probe completed1\n"); | 2966 | RT_TRACE(COMP_INIT, "Driver probe completed1\n"); |
2968 | if (rtl8192_init(dev) != 0) { | 2967 | if (rtl8192_init(dev) != 0) { |
2969 | RT_TRACE(COMP_ERR, "Initialization failed"); | 2968 | RT_TRACE(COMP_ERR, "Initialization failed"); |
2970 | goto fail1; | 2969 | goto err_free_irq; |
2971 | } | 2970 | } |
2972 | 2971 | ||
2973 | netif_carrier_off(dev); | 2972 | netif_carrier_off(dev); |
@@ -2987,28 +2986,19 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev, | |||
2987 | RT_TRACE(COMP_INIT, "Driver probe completed\n"); | 2986 | RT_TRACE(COMP_INIT, "Driver probe completed\n"); |
2988 | return 0; | 2987 | return 0; |
2989 | 2988 | ||
2990 | fail1: | 2989 | err_free_irq: |
2991 | if (dev->mem_start != (unsigned long)NULL) { | 2990 | free_irq(dev->irq, dev); |
2992 | iounmap((void *)dev->mem_start); | 2991 | priv->irq = 0; |
2993 | release_mem_region(pci_resource_start(pdev, 1), | 2992 | err_rel_mem: |
2994 | pci_resource_len(pdev, 1)); | 2993 | release_mem_region(pmem_start, pmem_len); |
2995 | } | 2994 | err_rel_rtllib: |
2996 | 2995 | free_rtllib(dev); | |
2997 | fail: | ||
2998 | if (dev) { | ||
2999 | if (priv->irq) { | ||
3000 | free_irq(dev->irq, dev); | ||
3001 | priv->irq = 0; | ||
3002 | } | ||
3003 | free_rtllib(dev); | ||
3004 | } | ||
3005 | |||
3006 | pci_disable_device(pdev); | ||
3007 | 2996 | ||
3008 | DMESG("wlan driver load failed\n"); | 2997 | DMESG("wlan driver load failed\n"); |
3009 | pci_set_drvdata(pdev, NULL); | 2998 | pci_set_drvdata(pdev, NULL); |
3010 | return -ENODEV; | 2999 | err_pci_disable: |
3011 | 3000 | pci_disable_device(pdev); | |
3001 | return err; | ||
3012 | } | 3002 | } |
3013 | 3003 | ||
3014 | static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev) | 3004 | static void __devexit rtl8192_pci_disconnect(struct pci_dev *pdev) |