From b539af865ea3217a50c8e4cbf0f668807c134356 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Wed, 26 Jan 2022 16:00:04 -0600 Subject: cpukit: Prevent error with disabled stack checker When the stack checker is not enabled, the stack checker reporting function can still be called. This prevents that call from performing a null memory access in trying to find the high water mark if the stack checker was never initialized. This also introduces a test to ensure this call does not cause a crash. Closes #4588 --- cpukit/libmisc/stackchk/check.c | 5 ++ spec/build/testsuites/libtests/grp.yml | 2 + spec/build/testsuites/libtests/stackchk02.yml | 19 ++++++++ testsuites/libtests/stackchk02/init.c | 67 +++++++++++++++++++++++++++ testsuites/libtests/stackchk02/stackchk02.doc | 16 +++++++ testsuites/libtests/stackchk02/stackchk02.scn | 7 +++ 6 files changed, 116 insertions(+) create mode 100644 spec/build/testsuites/libtests/stackchk02.yml create mode 100644 testsuites/libtests/stackchk02/init.c create mode 100644 testsuites/libtests/stackchk02/stackchk02.doc create mode 100644 testsuites/libtests/stackchk02/stackchk02.scn diff --git a/cpukit/libmisc/stackchk/check.c b/cpukit/libmisc/stackchk/check.c index a2b63345d9..fa0c3ea1ed 100644 --- a/cpukit/libmisc/stackchk/check.c +++ b/cpukit/libmisc/stackchk/check.c @@ -410,6 +410,11 @@ static bool Stack_check_Dump_stack_usage( void *low; void *high_water_mark; + /* This is likely to occur if the stack checker is not actually enabled */ + if ( stack->area == NULL ) { + return false; + } + low = Stack_check_Usable_stack_start(stack); size = Stack_check_Usable_stack_size(stack); diff --git a/spec/build/testsuites/libtests/grp.yml b/spec/build/testsuites/libtests/grp.yml index fdb9e4fede..d352c8221c 100644 --- a/spec/build/testsuites/libtests/grp.yml +++ b/spec/build/testsuites/libtests/grp.yml @@ -247,6 +247,8 @@ links: uid: stackchk - role: build-dependency uid: stackchk01 +- role: build-dependency + uid: stackchk02 - role: build-dependency uid: stat - role: build-dependency diff --git a/spec/build/testsuites/libtests/stackchk02.yml b/spec/build/testsuites/libtests/stackchk02.yml new file mode 100644 index 0000000000..4a4cbf9660 --- /dev/null +++ b/spec/build/testsuites/libtests/stackchk02.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2022 On-Line Applications Research (OAR) +cppflags: [] +cxxflags: [] +enabled-by: true +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/libtests/stackchk02/init.c +stlib: [] +target: testsuites/libtests/stackchk02.exe +type: build +use-after: [] +use-before: [] diff --git a/testsuites/libtests/stackchk02/init.c b/testsuites/libtests/stackchk02/init.c new file mode 100644 index 0000000000..0904e37c68 --- /dev/null +++ b/testsuites/libtests/stackchk02/init.c @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup libtests + */ + +/* + * Copyright (C) 2022 On-Line Applications Research Corporation (OAR) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define CONFIGURE_INIT + +#include + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE*3) + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#include + +#include + +const char rtems_test_name[] = "STACKCHK02"; + +rtems_task Init( + rtems_task_argument argument +) +{ + TEST_BEGIN(); + + rtems_stack_checker_report_usage(); + + TEST_END(); + rtems_test_exit( 0 ); +} diff --git a/testsuites/libtests/stackchk02/stackchk02.doc b/testsuites/libtests/stackchk02/stackchk02.doc new file mode 100644 index 0000000000..7907f216a8 --- /dev/null +++ b/testsuites/libtests/stackchk02/stackchk02.doc @@ -0,0 +1,16 @@ +# COPYRIGHT (c) 2022. +# On-Line Applications Research Corporation (OAR). +# The license and distribution terms for this file may be +# found in the file LICENSE in this distribution or at +# http://www.rtems.org/license/LICENSE. +# +This file describes the directives and concepts tested by this test set. + +test set name: stackchk02 + +directives: + + rtems_stack_checker_report_usage + +concepts: + + This task verifies that the stack checker will not perform bad + accesses when not properly enabled. diff --git a/testsuites/libtests/stackchk02/stackchk02.scn b/testsuites/libtests/stackchk02/stackchk02.scn new file mode 100644 index 0000000000..bb2b782490 --- /dev/null +++ b/testsuites/libtests/stackchk02/stackchk02.scn @@ -0,0 +1,7 @@ +*** TEST STACKCHK02 *** + STACK USAGE BY THREAD +ID NAME LOW HIGH CURRENT AVAIL USED +0x09010001 IDLE 0x10104940 0x1010713f 0x10107140 10224 N/A +0x0a010001 UI1 0x10109950 0x1010c14f 0x1010c150 10224 N/A + +*** END OF TEST STACKCHK02 *** -- cgit v1.2.3