vfio: fix read-after-free on getting container fd
Checks
Commit Message
We were reading some memory just after freeing it.
Fixes: 83a73c5fef66 ("vfio: use generic multi-process channel")
Cc: jianfeng.tan@intel.com
Cc: anatoly.burakov@intel.com
Cc: stable@dpdk.org
Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
---
lib/librte_eal/linuxapp/eal/eal_vfio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
On 25-Oct-18 11:49 AM, Darek Stojaczyk wrote:
> We were reading some memory just after freeing it.
>
> Fixes: 83a73c5fef66 ("vfio: use generic multi-process channel")
> Cc: jianfeng.tan@intel.com
> Cc: anatoly.burakov@intel.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
> ---
> lib/librte_eal/linuxapp/eal/eal_vfio.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c
> index d7268e4ce..fc3c7b870 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c
> @@ -1034,8 +1034,9 @@ rte_vfio_get_container_fd(void)
> mp_rep = &mp_reply.msgs[0];
> p = (struct vfio_mp_param *)mp_rep->param;
> if (p->result == SOCKET_OK && mp_rep->num_fds == 1) {
> + vfio_container_fd = mp_rep->fds[0];
> free(mp_reply.msgs);
> - return mp_rep->fds[0];
> + return vfio_container_fd;
> }
> free(mp_reply.msgs);
> }
>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
26/10/2018 16:04, Burakov, Anatoly:
> On 25-Oct-18 11:49 AM, Darek Stojaczyk wrote:
> > We were reading some memory just after freeing it.
> >
> > Fixes: 83a73c5fef66 ("vfio: use generic multi-process channel")
> > Cc: jianfeng.tan@intel.com
> > Cc: anatoly.burakov@intel.com
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Applied, thanks
@@ -1034,8 +1034,9 @@ rte_vfio_get_container_fd(void)
mp_rep = &mp_reply.msgs[0];
p = (struct vfio_mp_param *)mp_rep->param;
if (p->result == SOCKET_OK && mp_rep->num_fds == 1) {
+ vfio_container_fd = mp_rep->fds[0];
free(mp_reply.msgs);
- return mp_rep->fds[0];
+ return vfio_container_fd;
}
free(mp_reply.msgs);
}