[PATCH 2/3] drm/crtc: Fix possible ZERO_SIZE_PTR pointer dereferencing error.
Xiubo Li
Li.Xiubo at freescale.com
Mon Aug 11 20:30:32 PDT 2014
Since we cannot make sure the 'total_objects' and 'gamma_size' will always
be none zero here, and then if either equals to zero, the kzalloc() will
return ZERO_SIZE_PTR, which equals to ((void *)16).
This patch fix this with just doing the zero check before calling kzalloc().
Signed-off-by: Xiubo Li <Li.Xiubo at freescale.com>
---
drivers/gpu/drm/drm_crtc.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 901b812..2379c7a 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -1507,9 +1507,14 @@ static int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *gr
total_objects += dev->mode_config.num_encoder;
total_objects += dev->mode_config.num_bridge;
- group->id_list = kzalloc(total_objects * sizeof(uint32_t), GFP_KERNEL);
- if (!group->id_list)
- return -ENOMEM;
+ if (total_objects) {
+ group->id_list = kzalloc(total_objects * sizeof(uint32_t),
+ GFP_KERNEL);
+ if (!group->id_list)
+ return -ENOMEM;
+ } else {
+ group->id_list = NULL;
+ }
group->num_crtcs = 0;
group->num_connectors = 0;
@@ -4337,6 +4342,9 @@ EXPORT_SYMBOL(drm_mode_connector_attach_encoder);
int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
int gamma_size)
{
+ if (!gamma_size)
+ return -EINVAL;
+
crtc->gamma_size = gamma_size;
crtc->gamma_store = kzalloc(gamma_size * sizeof(uint16_t) * 3, GFP_KERNEL);
--
1.8.5
More information about the dri-devel
mailing list