Showing error 1621

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/atm/he.c
Line in file: 807
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 07:54:05 UTC


Source:

 777static int __devinit
 778he_init_group(struct he_dev *he_dev, int group)
 779{
 780        int i;
 781
 782        /* small buffer pool */
 783        he_dev->rbps_pool = pci_pool_create("rbps", he_dev->pci_dev,
 784                        CONFIG_RBPS_BUFSIZE, 8, 0);
 785        if (he_dev->rbps_pool == NULL) {
 786                hprintk("unable to create rbps pages\n");
 787                return -ENOMEM;
 788        }
 789
 790        he_dev->rbps_base = pci_alloc_consistent(he_dev->pci_dev,
 791                CONFIG_RBPS_SIZE * sizeof(struct he_rbp), &he_dev->rbps_phys);
 792        if (he_dev->rbps_base == NULL) {
 793                hprintk("failed to alloc rbps\n");
 794                return -ENOMEM;
 795        }
 796        memset(he_dev->rbps_base, 0, CONFIG_RBPS_SIZE * sizeof(struct he_rbp));
 797        he_dev->rbps_virt = kmalloc(CONFIG_RBPS_SIZE * sizeof(struct he_virt), GFP_KERNEL);
 798
 799        for (i = 0; i < CONFIG_RBPS_SIZE; ++i) {
 800                dma_addr_t dma_handle;
 801                void *cpuaddr;
 802
 803                cpuaddr = pci_pool_alloc(he_dev->rbps_pool, GFP_KERNEL|GFP_DMA, &dma_handle);
 804                if (cpuaddr == NULL)
 805                        return -ENOMEM;
 806
 807                he_dev->rbps_virt[i].virt = cpuaddr;
 808                he_dev->rbps_base[i].status = RBP_LOANED | RBP_SMALLBUF | (i << RBP_INDEX_OFF);
 809                he_dev->rbps_base[i].phys = dma_handle;
 810
 811        }
 812        he_dev->rbps_tail = &he_dev->rbps_base[CONFIG_RBPS_SIZE - 1];
 813
 814        he_writel(he_dev, he_dev->rbps_phys, G0_RBPS_S + (group * 32));
 815        he_writel(he_dev, RBPS_MASK(he_dev->rbps_tail),
 816                                                G0_RBPS_T + (group * 32));
 817        he_writel(he_dev, CONFIG_RBPS_BUFSIZE/4,
Show full sources