]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
drm/vmwgfx: Fix double free in vmw_recv_msg()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 15 Aug 2019 08:30:50 +0000 (11:30 +0300)
committerKhalid Elmously <khalid.elmously@canonical.com>
Thu, 26 Sep 2019 04:34:52 +0000 (00:34 -0400)
commit65a944a4816c20426c0694802dd6026a861ef162
treec8b3e38990252be80a4af24f15c0c72cbcd25430
parent62841e215b49f31a350c8a58a3f5d11ab5faef86
drm/vmwgfx: Fix double free in vmw_recv_msg()

BugLink: https://bugs.launchpad.net/bugs/1844558
commit 08b0c891605acf727e43e3e03a25857d3e789b61 upstream.

We recently added a kfree() after the end of the loop:

if (retries == RETRIES) {
kfree(reply);
return -EINVAL;
}

There are two problems.  First the test is wrong and because retries
equals RETRIES if we succeed on the last iteration through the loop.
Second if we fail on the last iteration through the loop then the kfree
is a double free.

When you're reading this code, please note the break statement at the
end of the while loop.  This patch changes the loop so that if it's not
successful then "reply" is NULL and we can test for that afterward.

Cc: <stable@vger.kernel.org>
Fixes: 6b7c3b86f0b6 ("drm/vmwgfx: fix memory leak when too many retries have occurred")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/gpu/drm/vmwgfx/vmwgfx_msg.c