UPSTREAM: dma-buf: call dma_buf_stats_setup after dmabuf is in valid list
When dma_buf_stats_setup() fails, it closes the dmabuf file which results into the calling of dma_buf_file_release() where it does list_del(&dmabuf->list_node) with out first adding it to the proper list. This is resulting into panic in the below path: __list_del_entry_valid+0x38/0xac dma_buf_file_release+0x74/0x158 __fput+0xf4/0x428 ____fput+0x14/0x24 task_work_run+0x178/0x24c do_notify_resume+0x194/0x264 work_pending+0xc/0x5f0 Fix it by moving the dma_buf_stats_setup() after dmabuf is added to the list. Fixes: bdb8d06dfefd ("dmabuf: Add the capability to expose DMA-BUF stats in sysfs") Signed-off-by: Charan Teja Reddy <quic_charante@quicinc.com> Tested-by: T.J. Mercier <tjmercier@google.com> Acked-by: T.J. Mercier <tjmercier@google.com> Cc: <stable@vger.kernel.org> # 5.15.x+ Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/1652125797-2043-1-git-send-email-quic_charante@quicinc.com (cherry picked from commit ef3a6b70507a2add2cd2e01f5eb9b54d561bacb9 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git) Bug: 231929173 Change-Id: Iaefbae326175483444eaf5dbd3fdf8eb8fcca2aa
This commit is contained in:

committed by
T.J. Mercier

parent
f9a66cbe70
commit
d71115b1bf
@@ -621,10 +621,6 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|||||||
file->f_mode |= FMODE_LSEEK;
|
file->f_mode |= FMODE_LSEEK;
|
||||||
dmabuf->file = file;
|
dmabuf->file = file;
|
||||||
|
|
||||||
ret = dma_buf_stats_setup(dmabuf);
|
|
||||||
if (ret)
|
|
||||||
goto err_sysfs;
|
|
||||||
|
|
||||||
mutex_init(&dmabuf->lock);
|
mutex_init(&dmabuf->lock);
|
||||||
INIT_LIST_HEAD(&dmabuf->attachments);
|
INIT_LIST_HEAD(&dmabuf->attachments);
|
||||||
|
|
||||||
@@ -632,6 +628,10 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
|
|||||||
list_add(&dmabuf->list_node, &db_list.head);
|
list_add(&dmabuf->list_node, &db_list.head);
|
||||||
mutex_unlock(&db_list.lock);
|
mutex_unlock(&db_list.lock);
|
||||||
|
|
||||||
|
ret = dma_buf_stats_setup(dmabuf);
|
||||||
|
if (ret)
|
||||||
|
goto err_sysfs;
|
||||||
|
|
||||||
return dmabuf;
|
return dmabuf;
|
||||||
|
|
||||||
err_sysfs:
|
err_sysfs:
|
||||||
|
Reference in New Issue
Block a user