qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH PULL v2 08/10] hw/rdma: PVRDMA commands and data


From: Marcel Apfelbaum
Subject: Re: [Qemu-devel] [PATCH PULL v2 08/10] hw/rdma: PVRDMA commands and data-path ops
Date: Fri, 27 Apr 2018 21:31:18 +0300
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

On 27/04/2018 18:01, Peter Maydell wrote:
> On 19 February 2018 at 11:43, Marcel Apfelbaum <address@hidden> wrote:
>> From: Yuval Shaia <address@hidden>
>>
>> First PVRDMA sub-module - implementation of the PVRDMA device.
>> - PVRDMA commands such as create CQ and create MR.
>> - Data path QP operations - post_send and post_recv.
>> - Completion handler.
> 
> Coverity CID 1390620: we call munmap() on a NULL pointer.
> 
>> +static int create_mr(PVRDMADev *dev, union pvrdma_cmd_req *req,
>> +                     union pvrdma_cmd_resp *rsp)
>> +{
>> +    struct pvrdma_cmd_create_mr *cmd = &req->create_mr;
>> +    struct pvrdma_cmd_create_mr_resp *resp = &rsp->create_mr_resp;
>> +    PCIDevice *pci_dev = PCI_DEVICE(dev);
>> +    void *host_virt = NULL;
> 
> Here we set host_virt to NULL...
> 
>> +
>> +    memset(resp, 0, sizeof(*resp));
>> +    resp->hdr.response = cmd->hdr.response;
>> +    resp->hdr.ack = PVRDMA_CMD_CREATE_MR_RESP;
>> +
>> +    pr_dbg("pd_handle=%d\n", cmd->pd_handle);
>> +    pr_dbg("access_flags=0x%x\n", cmd->access_flags);
>> +    pr_dbg("flags=0x%x\n", cmd->flags);
>> +
>> +    if (!(cmd->flags & PVRDMA_MR_FLAG_DMA)) {
> 
> ...and if we don't take this if() we won't set host_virt to anything...
> 
>> +        host_virt = pvrdma_map_to_pdir(pci_dev, cmd->pdir_dma, cmd->nchunks,
>> +                                       cmd->length);
>> +        if (!host_virt) {
>> +            pr_dbg("Failed to map to pdir\n");
>> +            resp->hdr.err = -EINVAL;
>> +            goto out;
>> +        }
>> +    }
>> +
>> +    resp->hdr.err = rdma_rm_alloc_mr(&dev->rdma_dev_res, cmd->pd_handle,
>> +                                     cmd->start, cmd->length, host_virt,
>> +                                     cmd->access_flags, &resp->mr_handle,
>> +                                     &resp->lkey, &resp->rkey);
>> +    if (!resp->hdr.err) {
>> +        munmap(host_virt, cmd->length);
> 
> ...but here we call munmap() on it without checking if it is NULL.
> Unlike g_free(), munmap() isn't specified to be "do nothing if
> passed a NULL pointer".

Will fix, thanks for finding it!
Marcel

> 
>> +    }
>> +
>> +out:
>> +    pr_dbg("ret=%d\n", resp->hdr.err);
>> +    return resp->hdr.err;
>> +}
> 
> thanks
> -- PMM
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]