[PATCH 1/2] drm/exynos: g2d: make ioctls more robust
Inki Dae
inki.dae at samsung.com
Sun Aug 3 00:54:46 PDT 2014
2014-07-23 23:57 GMT+09:00 Tobias Jakobi <tjakobi at math.uni-bielefeld.de>:
> Both exynos_g2d_set_cmdlist_ioctl and exynos_g2d_exec_ioctl don't check
> if the G2D was succesfully probe. If that is not the case, then g2d_priv
> is just NULL and extracting 'dev' from it in the next step is going to
> produce a kernel oops.
>
> Add proper checks and return ENODEV if the G2D is not available.
>
> Signed-off-by: Tobias Jakobi <tjakobi at math.uni-bielefeld.de>
> ---
> drivers/gpu/drm/exynos/exynos_drm_g2d.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> index 5fa1bb6..8c62423 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> @@ -1056,7 +1056,7 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
> {
> struct drm_exynos_file_private *file_priv = file->driver_priv;
> struct exynos_drm_g2d_private *g2d_priv = file_priv->g2d_priv;
> - struct device *dev = g2d_priv->dev;
> + struct device *dev;
> struct g2d_data *g2d;
> struct drm_exynos_g2d_set_cmdlist *req = data;
> struct drm_exynos_g2d_cmd *cmd;
> @@ -1067,6 +1067,10 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
> int size;
> int ret;
>
> + if (!g2d_priv)
> + return -ENODEV;
> +
> + dev = g2d_priv->dev;
> if (!dev)
> return -ENODEV;
>
> @@ -1223,13 +1227,17 @@ int exynos_g2d_exec_ioctl(struct drm_device *drm_dev, void *data,
> {
> struct drm_exynos_file_private *file_priv = file->driver_priv;
> struct exynos_drm_g2d_private *g2d_priv = file_priv->g2d_priv;
> - struct device *dev = g2d_priv->dev;
> + struct device *dev;
> struct g2d_data *g2d;
> struct drm_exynos_g2d_exec *req = data;
> struct g2d_runqueue_node *runqueue_node;
> struct list_head *run_cmdlist;
> struct list_head *event_list;
>
> + if (!g2d_priv)
> + return -ENODEV;
> +
> + dev = g2d_priv->dev
It seems that you have no build test because above line incurs build
error. Anyway I fixed it up.
Thanks,
Inki Dae
> if (!dev)
> return -ENODEV;
>
> --
> 1.8.5.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the dri-devel
mailing list