fbdev: msm: check for valid fence before using objects
Validate the input fence for mdss and sde rotator before referencing the structure objects. and also log the fence driver name waiting for the fence. Earlier the fence name was null irrespective of the driver. Change-Id: Ie277d861057a41092505c73ef3815f7d769d114e Signed-off-by: Raghavendra Ambadas <quic_c_rambad@quicinc.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||||
@@ -143,6 +144,11 @@ static void sde_rot_fence_release(struct dma_fence *fence)
|
|||||||
struct sde_rot_fence *f = to_sde_rot_fence(fence);
|
struct sde_rot_fence *f = to_sde_rot_fence(fence);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
if (fence->ops->get_driver_name != &sde_rot_fence_get_driver_name) {
|
||||||
|
pr_debug("invalid parameters\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(fence->lock, flags);
|
spin_lock_irqsave(fence->lock, flags);
|
||||||
if (!list_empty(&f->fence_list))
|
if (!list_empty(&f->fence_list))
|
||||||
list_del(&f->fence_list);
|
list_del(&f->fence_list);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/* Copyright (c) 2015-2018, 2020, The Linux Foundation. All rights reserved. */
|
/* Copyright (c) 2015-2018, 2020, The Linux Foundation. All rights reserved. */
|
||||||
|
/* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */
|
||||||
|
|
||||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||||
|
|
||||||
@@ -121,6 +122,13 @@ static void mdss_fence_release(struct dma_fence *fence)
|
|||||||
struct mdss_timeline *tl = to_mdss_timeline(fence);
|
struct mdss_timeline *tl = to_mdss_timeline(fence);
|
||||||
|
|
||||||
pr_debug("%s for fence %s\n", __func__, f->name);
|
pr_debug("%s for fence %s\n", __func__, f->name);
|
||||||
|
|
||||||
|
if (!fence || (fence->ops->get_driver_name !=
|
||||||
|
&mdss_fence_get_driver_name)) {
|
||||||
|
pr_debug("invalid parameters\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock(&tl->list_lock);
|
spin_lock(&tl->list_lock);
|
||||||
if (!list_empty(&f->fence_list))
|
if (!list_empty(&f->fence_list))
|
||||||
list_del(&f->fence_list);
|
list_del(&f->fence_list);
|
||||||
@@ -412,7 +420,10 @@ int mdss_wait_sync_fence(struct mdss_fence *fence,
|
|||||||
*/
|
*/
|
||||||
struct mdss_fence *mdss_get_fd_sync_fence(int fd)
|
struct mdss_fence *mdss_get_fd_sync_fence(int fd)
|
||||||
{
|
{
|
||||||
return (struct mdss_fence *) sync_file_get_fence(fd);
|
struct dma_fence *fence = NULL;
|
||||||
|
|
||||||
|
fence = sync_file_get_fence(fd);
|
||||||
|
return to_mdss_fence(fence);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -455,11 +466,18 @@ int mdss_get_sync_fence_fd(struct mdss_fence *fence)
|
|||||||
*/
|
*/
|
||||||
const char *mdss_get_sync_fence_name(struct mdss_fence *fence)
|
const char *mdss_get_sync_fence_name(struct mdss_fence *fence)
|
||||||
{
|
{
|
||||||
|
struct dma_fence *input_fence = NULL;
|
||||||
|
|
||||||
if (!fence) {
|
if (!fence) {
|
||||||
pr_err("invalid parameters\n");
|
pr_err("invalid parameters\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input_fence = (struct dma_fence *) &fence->base;
|
||||||
|
|
||||||
|
if (input_fence->ops->get_driver_name != &mdss_fence_get_driver_name)
|
||||||
|
return input_fence->ops->get_driver_name(input_fence);
|
||||||
|
|
||||||
return fence->name;
|
return fence->name;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user