| From c702f73717f0569bec8e270f98dd5b6619725e20 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 28 Aug 2021 18:43:21 +0800 |
| Subject: virtio-gpu: fix possible memory allocation failure |
| |
| From: liuyuntao <liuyuntao10@huawei.com> |
| |
| [ Upstream commit 5bd4f20de8acad37dbb3154feb34dbc36d506c02 ] |
| |
| When kmem_cache_zalloc in virtio_gpu_get_vbuf fails, it will return |
| an error code. But none of its callers checks this error code, and |
| a core dump will take place. |
| |
| Considering many of its callers can't handle such error, I add |
| a __GFP_NOFAIL flag when calling kmem_cache_zalloc to make sure |
| it won't fail, and delete those unused error handlings. |
| |
| Fixes: dc5698e80cf724 ("Add virtio gpu driver.") |
| Signed-off-by: Yuntao Liu <liuyuntao10@huawei.com> |
| Link: http://patchwork.freedesktop.org/patch/msgid/20210828104321.3410312-1-liuyuntao10@huawei.com |
| Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/virtio/virtgpu_vq.c | 8 +------- |
| 1 file changed, 1 insertion(+), 7 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c |
| index bb46e7a0f1b5d..0ca996e6fd5cb 100644 |
| --- a/drivers/gpu/drm/virtio/virtgpu_vq.c |
| +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c |
| @@ -80,9 +80,7 @@ virtio_gpu_get_vbuf(struct virtio_gpu_device *vgdev, |
| { |
| struct virtio_gpu_vbuffer *vbuf; |
| |
| - vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL); |
| - if (!vbuf) |
| - return ERR_PTR(-ENOMEM); |
| + vbuf = kmem_cache_zalloc(vgdev->vbufs, GFP_KERNEL | __GFP_NOFAIL); |
| |
| BUG_ON(size > MAX_INLINE_CMD_SIZE); |
| vbuf->buf = (void *)vbuf + sizeof(*vbuf); |
| @@ -142,10 +140,6 @@ static void *virtio_gpu_alloc_cmd_resp(struct virtio_gpu_device *vgdev, |
| |
| vbuf = virtio_gpu_get_vbuf(vgdev, cmd_size, |
| resp_size, resp_buf, cb); |
| - if (IS_ERR(vbuf)) { |
| - *vbuffer_p = NULL; |
| - return ERR_CAST(vbuf); |
| - } |
| *vbuffer_p = vbuf; |
| return (struct virtio_gpu_command *)vbuf->buf; |
| } |
| -- |
| 2.33.0 |
| |