Showing error 1628

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


Source:

2481                                        (unsigned long long)region->length, pbl_count);
2482                        ret = nes_reg_mr( nesdev, nespd, stag, region->length, &root_vpbl,
2483                                        first_dma_addr, pbl_count, (u16)cur_pbl_index, acc, &iova_start);
2484
2485                        nes_debug(NES_DBG_MR, "ret=%d\n", ret);
2486
2487                        if (ret == 0) {
2488                                nesmr->ibmr.rkey = stag;
2489                                nesmr->ibmr.lkey = stag;
2490                                nesmr->mode = IWNES_MEMREG_TYPE_MEM;
2491                                ibmr = &nesmr->ibmr;
2492                                nesmr->pbl_4k = ((pbl_count > 1) || (cur_pbl_index > 32)) ? 1 : 0;
2493                                nesmr->pbls_used = pbl_count;
2494                                if (pbl_count > 1) {
2495                                        nesmr->pbls_used++;
2496                                }
2497                        } else {
2498                                ib_umem_release(region);
2499                                kfree(nesmr);
2500                                ibmr = ERR_PTR(-ENOMEM);
2501                        }
2502
2503                        reg_user_mr_err:
2504                        /* free the resources */
2505                        if (root_pbl_index == 1) {
2506                                pci_free_consistent(nesdev->pcidev, 4096, vpbl.pbl_vbase,
2507                                                vpbl.pbl_pbase);
2508                        } else {
2509                                for (page_index=0; page_index<root_pbl_index; page_index++) {
2510                                        pci_free_consistent(nesdev->pcidev, 4096,
2511                                                        root_vpbl.leaf_vpbl[page_index].pbl_vbase,
2512                                                        root_vpbl.leaf_vpbl[page_index].pbl_pbase);
2513                                }
2514                                kfree(root_vpbl.leaf_vpbl);
2515                                pci_free_consistent(nesdev->pcidev, 8192, root_vpbl.pbl_vbase,
2516                                                root_vpbl.pbl_pbase);
2517                        }
2518
2519                        nes_debug(NES_DBG_MR, "Leaving, ibmr=%p", ibmr);
2520
2521                        return ibmr;
Show full sources