• Dan Carpenter's avatar
    drm/vmwgfx: Fix double free in vmw_recv_msg() · 08b0c891
    Dan Carpenter authored
    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: 6b7c3b86 ("drm/vmwgfx: fix memory leak when too many retries have occurred")
    Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
    Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
    08b0c891
vmwgfx_msg.c 12 KB