Message ID | 20190103130338.49081-1-liq3ea@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw: pvrdma: fix memory leak in error path | expand |
On 1/3/19 2:03 PM, Li Qiang wrote: > Spotted by Coverity: CID 1398595 > Fixes: 2b05705dc8 > Signed-off-by: Li Qiang <liq3ea@163.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > hw/rdma/vmw/pvrdma_qp_ops.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c > index 300471a4c9..584be2043e 100644 > --- a/hw/rdma/vmw/pvrdma_qp_ops.c > +++ b/hw/rdma/vmw/pvrdma_qp_ops.c > @@ -168,6 +168,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) > sgid = rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid_index); > if (!sgid) { > pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_index); > + g_free(comp_ctx); > return -EIO; > } > pr_dbg("sgid_id=%d, sgid=0x%llx\n", wqe->hdr.wr.ud.av.gid_index, > @@ -179,6 +180,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) > if (sgid_idx <= 0) { > pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", > wqe->hdr.wr.ud.av.gid_index); > + g_free(comp_ctx); > return -EIO; > } > >
On Thu, Jan 03, 2019 at 02:47:37PM +0100, Philippe Mathieu-Daudé wrote: > On 1/3/19 2:03 PM, Li Qiang wrote: > > Spotted by Coverity: CID 1398595 > > > > Fixes: 2b05705dc8 > > > Signed-off-by: Li Qiang <liq3ea@163.com> > > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > > --- > > hw/rdma/vmw/pvrdma_qp_ops.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c > > index 300471a4c9..584be2043e 100644 > > --- a/hw/rdma/vmw/pvrdma_qp_ops.c > > +++ b/hw/rdma/vmw/pvrdma_qp_ops.c > > @@ -168,6 +168,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) > > sgid = rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid_index); > > if (!sgid) { > > pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_index); > > + g_free(comp_ctx); > > return -EIO; > > } > > pr_dbg("sgid_id=%d, sgid=0x%llx\n", wqe->hdr.wr.ud.av.gid_index, > > @@ -179,6 +180,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) > > if (sgid_idx <= 0) { > > pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", > > wqe->hdr.wr.ud.av.gid_index); > > + g_free(comp_ctx); > > return -EIO; > > } Since comp_ctx is not used until the two checks are done we just can relocate the allocation & initialization right after the two checks. Yuval > > > >
At 2019-01-08 00:26:58, "Yuval Shaia" <yuval.shaia@oracle.com> wrote: >On Thu, Jan 03, 2019 at 02:47:37PM +0100, Philippe Mathieu-Daudé wrote: >> On 1/3/19 2:03 PM, Li Qiang wrote: >> > Spotted by Coverity: CID 1398595 >> > >> >> Fixes: 2b05705dc8 >> >> > Signed-off-by: Li Qiang <liq3ea@163.com> >> >> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> >> > --- >> > hw/rdma/vmw/pvrdma_qp_ops.c | 2 ++ >> > 1 file changed, 2 insertions(+) >> > >> > diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c >> > index 300471a4c9..584be2043e 100644 >> > --- a/hw/rdma/vmw/pvrdma_qp_ops.c >> > +++ b/hw/rdma/vmw/pvrdma_qp_ops.c >> > @@ -168,6 +168,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) >> > sgid = rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid_index); >> > if (!sgid) { >> > pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_index); >> > + g_free(comp_ctx); >> > return -EIO; >> > } >> > pr_dbg("sgid_id=%d, sgid=0x%llx\n", wqe->hdr.wr.ud.av.gid_index, >> > @@ -179,6 +180,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) >> > if (sgid_idx <= 0) { >> > pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", >> > wqe->hdr.wr.ud.av.gid_index); >> > + g_free(comp_ctx); >> > return -EIO; >> > } > >Since comp_ctx is not used until the two checks are done we just can >relocate the allocation & initialization right after the two checks. > OK, will send a revised version later. Thanks, Li Qiang >Yuval > >> > >> >
On 1/7/19 5:26 PM, Yuval Shaia wrote: > On Thu, Jan 03, 2019 at 02:47:37PM +0100, Philippe Mathieu-Daudé wrote: >> On 1/3/19 2:03 PM, Li Qiang wrote: >>> Spotted by Coverity: CID 1398595 >>> >> >> Fixes: 2b05705dc8 >> >>> Signed-off-by: Li Qiang <liq3ea@163.com> >> >> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> >>> --- >>> hw/rdma/vmw/pvrdma_qp_ops.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c >>> index 300471a4c9..584be2043e 100644 >>> --- a/hw/rdma/vmw/pvrdma_qp_ops.c >>> +++ b/hw/rdma/vmw/pvrdma_qp_ops.c >>> @@ -168,6 +168,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) >>> sgid = rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid_index); >>> if (!sgid) { >>> pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_index); >>> + g_free(comp_ctx); >>> return -EIO; >>> } >>> pr_dbg("sgid_id=%d, sgid=0x%llx\n", wqe->hdr.wr.ud.av.gid_index, >>> @@ -179,6 +180,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) >>> if (sgid_idx <= 0) { >>> pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", >>> wqe->hdr.wr.ud.av.gid_index); >>> + g_free(comp_ctx); >>> return -EIO; >>> } > > Since comp_ctx is not used until the two checks are done we just can > relocate the allocation & initialization right after the two checks. Oops I missed this, thanks your suggestion is way cleaner! Phil.
diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c index 300471a4c9..584be2043e 100644 --- a/hw/rdma/vmw/pvrdma_qp_ops.c +++ b/hw/rdma/vmw/pvrdma_qp_ops.c @@ -168,6 +168,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) sgid = rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid_index); if (!sgid) { pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_index); + g_free(comp_ctx); return -EIO; } pr_dbg("sgid_id=%d, sgid=0x%llx\n", wqe->hdr.wr.ud.av.gid_index, @@ -179,6 +180,7 @@ int pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle) if (sgid_idx <= 0) { pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", wqe->hdr.wr.ud.av.gid_index); + g_free(comp_ctx); return -EIO; }
Spotted by Coverity: CID 1398595 Signed-off-by: Li Qiang <liq3ea@163.com> --- hw/rdma/vmw/pvrdma_qp_ops.c | 2 ++ 1 file changed, 2 insertions(+)