diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 23ea4c72d633..db6a7ca3f237 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -5080,6 +5080,7 @@ static void rkcif_free_fence(struct rkcif_stream *stream) unsigned long lock_flags = 0; struct rkcif_fence *vb_fence, *done_fence; struct v4l2_device *v4l2_dev = &stream->cifdev->v4l2_dev; + struct files_struct *files = current->files; LIST_HEAD(local_list); spin_lock_irqsave(&stream->fence_lock, lock_flags); @@ -5100,8 +5101,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free qbuf_fence fd:%d\n", __func__, vb_fence->fence_fd); dma_fence_put(vb_fence->fence); - put_unused_fd(vb_fence->fence_fd); - close_fd(vb_fence->fence_fd); + if (files) { + put_unused_fd(vb_fence->fence_fd); + close_fd(vb_fence->fence_fd); + } kfree(vb_fence); } @@ -5115,8 +5118,10 @@ static void rkcif_free_fence(struct rkcif_stream *stream) v4l2_dbg(2, rkcif_debug, v4l2_dev, "%s: free done_fence fd:%d\n", __func__, done_fence->fence_fd); dma_fence_put(done_fence->fence); - put_unused_fd(done_fence->fence_fd); - close_fd(done_fence->fence_fd); + if (files) { + put_unused_fd(done_fence->fence_fd); + close_fd(done_fence->fence_fd); + } kfree(done_fence); } }