From 13ee3f811741b3751c377ee9a2ef02b5c0aed1b8 Mon Sep 17 00:00:00 2001 From: zhuanglin Date: Tue, 19 Sep 2023 14:22:11 +0800 Subject: [PATCH] sched/clock Add special handling for TCB null pointer cases Adding a judgment in the code that null return values are not referenced for dereference Signed-off-by: zhuanglin --- sched/clock/clock_gettime.c | 39 ++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/sched/clock/clock_gettime.c b/sched/clock/clock_gettime.c index 57b7e9fb2b..1c5f3f5384 100644 --- a/sched/clock/clock_gettime.c +++ b/sched/clock/clock_gettime.c @@ -153,7 +153,14 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp) tcb = nxsched_get_tcb(pid); } - up_perf_convert(tcb->run_time, tp); + if (tcb != NULL) + { + up_perf_convert(tcb->run_time, tp); + } + else + { + ret = -EFAULT; + } } else if (clock_type == CLOCK_PROCESS_CPUTIME_ID) { @@ -174,18 +181,28 @@ int clock_gettime(clockid_t clock_id, struct timespec *tp) tcb = nxsched_get_tcb(pid); } - group = tcb->group; - runtime = 0; - - flags = enter_critical_section(); - for (i = group->tg_nmembers - 1; i >= 0; i--) + if (tcb != NULL) { - tcb = nxsched_get_tcb(group->tg_members[i]); - runtime += tcb->run_time; - } + group = tcb->group; + runtime = 0; - leave_critical_section(flags); - up_perf_convert(runtime, tp); + flags = enter_critical_section(); + for (i = group->tg_nmembers - 1; i >= 0; i--) + { + tcb = nxsched_get_tcb(group->tg_members[i]); + if (tcb != NULL) + { + runtime += tcb->run_time; + } + } + + leave_critical_section(flags); + up_perf_convert(runtime, tp); + } + else + { + ret = -EFAULT; + } } #endif else