source: rtems/testsuites/psxtests/psxthreadname01/init.c @ bded3f05

5
Last change on this file since bded3f05 was bded3f05, checked in by Sebastian Huber <sebastian.huber@…>, on 07/24/18 at 10:46:32

psxthreadname01: Fix out of bounds memory access

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*
2 * Copyright (c) 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#define _GNU_SOURCE
20#include <errno.h>
21#include <pthread.h>
22#include <string.h>
23
24#include "tmacros.h"
25
26const char rtems_test_name[] = "PSXTHREADNAME 1";
27
28#define MAX_NAME_SIZE 13
29
30static void test(void)
31{
32  static const char no_name[] = "NO";
33  static const char big_name[] = "abcdefghijklmnopqrstuvwxyz";
34  static const char new_name[] = "new";
35  char name[sizeof(big_name)];
36  int eno;
37
38  memcpy(name, no_name, sizeof(no_name));
39  eno = pthread_getname_np(0xffffffff, name, MAX_NAME_SIZE);
40  rtems_test_assert(eno == ESRCH);
41  rtems_test_assert(strcmp(name, "") == 0);
42
43  eno = pthread_setname_np(0xffffffff, name);
44  rtems_test_assert(eno == ESRCH);
45
46  memcpy(name, no_name, sizeof(no_name));
47  eno = pthread_getname_np(pthread_self(), name, 0);
48  rtems_test_assert(eno == ERANGE);
49  rtems_test_assert(strcmp(name, "NO") == 0);
50
51  memcpy(name, no_name, sizeof(no_name));
52  eno = pthread_getname_np(pthread_self(), name, sizeof(name));
53  rtems_test_assert(eno == 0);
54  rtems_test_assert(strcmp(name, "UI1 ") == 0);
55
56  eno = pthread_setname_np(pthread_self(), big_name);
57  rtems_test_assert(eno == ERANGE);
58
59  memcpy(name, no_name, sizeof(no_name));
60  eno = pthread_getname_np(pthread_self(), name, sizeof(name));
61  rtems_test_assert(eno == 0);
62  rtems_test_assert(strcmp(name, "abcdefghijkl") == 0);
63
64  eno = pthread_setname_np(pthread_self(), new_name);
65  rtems_test_assert(eno == 0);
66
67  memcpy(name, no_name, sizeof(no_name));
68  eno = pthread_getname_np(pthread_self(), name, sizeof(name));
69  rtems_test_assert(eno == 0);
70  rtems_test_assert(strcmp(name, "new") == 0);
71
72  memcpy(name, no_name, sizeof(no_name));
73  eno = pthread_getname_np(pthread_self(), name, 3);
74  rtems_test_assert(eno == ERANGE);
75  rtems_test_assert(strcmp(name, "ne") == 0);
76}
77
78static void Init(rtems_task_argument arg)
79{
80  TEST_BEGIN();
81
82  test();
83
84  TEST_END();
85  rtems_test_exit(0);
86}
87
88#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
89#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
90
91#define CONFIGURE_MAXIMUM_TASKS 1
92
93#define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE MAX_NAME_SIZE
94
95#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
96
97#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
98
99#define CONFIGURE_INIT
100
101#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.