summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2019-05-08 03:00:04 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-05-08 03:00:03 -0700
commit5ee084c81212756e6a53d842e8ceb24825e1588a (patch)
tree429f7cf8aa4d1c62224c35a620ea982bd750473a /drivers/gpu/drm
parent40adef7ded1b6d1700b922f6153e12a87bea6d47 (diff)
parentadebb0daf71cdace4c8b6ff8dcb61d6332414657 (diff)
Merge "drm/msm/sde: fix null pointer dereference"
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_core_irq.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_core_irq.c b/drivers/gpu/drm/msm/sde/sde_core_irq.c
index 4f7e688650de..b587e5c02b63 100644
--- a/drivers/gpu/drm/msm/sde/sde_core_irq.c
+++ b/drivers/gpu/drm/msm/sde/sde_core_irq.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2017,2019 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -388,10 +388,28 @@ void sde_core_irq_preinstall(struct sde_kms *sde_kms)
sde_kms->irq_obj.total_irqs = sde_kms->hw_intr->irq_idx_tbl_size;
sde_kms->irq_obj.irq_cb_tbl = kcalloc(sde_kms->irq_obj.total_irqs,
sizeof(struct list_head), GFP_KERNEL);
+ if (sde_kms->irq_obj.irq_cb_tbl == NULL) {
+ SDE_ERROR("Failed to allocate\n");
+ return;
+ }
sde_kms->irq_obj.enable_counts = kcalloc(sde_kms->irq_obj.total_irqs,
sizeof(atomic_t), GFP_KERNEL);
+ if (sde_kms->irq_obj.enable_counts == NULL) {
+ kfree(sde_kms->irq_obj.irq_cb_tbl);
+ sde_kms->irq_obj.irq_cb_tbl = NULL;
+ SDE_ERROR("Failed to allocate\n");
+ return;
+ }
sde_kms->irq_obj.irq_counts = kcalloc(sde_kms->irq_obj.total_irqs,
sizeof(atomic_t), GFP_KERNEL);
+ if (sde_kms->irq_obj.irq_counts == NULL) {
+ kfree(sde_kms->irq_obj.irq_cb_tbl);
+ kfree(sde_kms->irq_obj.enable_counts);
+ sde_kms->irq_obj.irq_cb_tbl = NULL;
+ sde_kms->irq_obj.enable_counts = NULL;
+ SDE_ERROR("Failed to allocate\n");
+ return;
+ }
for (i = 0; i < sde_kms->irq_obj.total_irqs; i++) {
INIT_LIST_HEAD(&sde_kms->irq_obj.irq_cb_tbl[i]);
atomic_set(&sde_kms->irq_obj.enable_counts[i], 0);