drm_format_info_bpp() cannot be used for formats which do not have an
integer bits-per-pixel. Handle wrong calls by printing a warning and
returning 0.

Signed-off-by: Tomi Valkeinen <[email protected]>
---
 drivers/gpu/drm/drm_fourcc.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 193cf8ed7912..e84c4ed6928c 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -429,6 +429,13 @@ unsigned int drm_format_info_bpp(const struct 
drm_format_info *info, int plane)
        if (!info || plane < 0 || plane >= info->num_planes)
                return 0;
 
+       if (info->char_per_block[plane] * 8 %
+           (drm_format_info_block_width(info, plane) *
+            drm_format_info_block_height(info, plane))) {
+               pr_warn("unable to return an integer bpp\n");
+               return 0;
+       }
+
        return info->char_per_block[plane] * 8 /
               (drm_format_info_block_width(info, plane) *
                drm_format_info_block_height(info, plane));

-- 
2.43.0

Reply via email to