From e138484e6aa1900838ba8973843d304209a73bad Mon Sep 17 00:00:00 2001 From: "shihong.zheng" Date: Thu, 18 Apr 2019 17:07:42 +0800 Subject: [PATCH] vdec: fix crash in vdec_get_default_vdec_for_userdata. [1/1] PD#SWPL-6811 Problem: Unable to handle kernel NULL pointer dereference at virtual address 00000114 PC is at vdec_get_default_vdec_for_userdata+0x50/0x8c [decoder_common] LR is at 0x0 Solution: vdec in vdec_connect_list searched is NULL, it's may moved to disconnect list. Verify: x301 Change-Id: I407b0115fd4dfacf2bf575f1d981e079702b8800 Signed-off-by: shihong.zheng --- .../amlogic/media_modules/frame_provider/decoder/utils/vdec.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c index 6492fc7921a8..9f6538175c0b 100644 --- a/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c +++ b/drivers/amlogic/media_modules/frame_provider/decoder/utils/vdec.c @@ -2554,6 +2554,7 @@ static int vdec_core_thread(void *data) { struct vdec_core_s *core = (struct vdec_core_s *)data; struct sched_param param = {.sched_priority = MAX_RT_PRIO/2}; + unsigned long flags; int i; sched_setscheduler(current, SCHED_FIFO, ¶m); @@ -2629,6 +2630,7 @@ static int vdec_core_thread(void *data) */ /* check disconnected decoders */ + flags = vdec_core_lock(vdec_core); list_for_each_entry_safe(vdec, tmp, &core->connected_vdec_list, list) { if ((vdec->status == VDEC_STATUS_CONNECTED) && @@ -2644,6 +2646,7 @@ static int vdec_core_thread(void *data) list_move(&vdec->list, &disconnecting_list); } } + vdec_core_unlock(vdec_core, flags); mutex_unlock(&vdec_mutex); /* elect next vdec to be scheduled */ vdec = core->last_vdec;