diff options
| author | kurisaw <[email protected]> | 2025-07-18 15:34:12 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2025-07-18 20:15:53 +0800 |
| commit | ece19e961aaa5484e1e48a398b9bc4a2e54f9ed9 (patch) | |
| tree | c7462f0ff6dd40acad217adde6284083ed413746 /src | |
| parent | 4423c6f01f9ee55e6a9e793a4020d9f8c0029f43 (diff) | |
kernel/testcase: fixed buffer overflow vulnerability in object
Diffstat (limited to 'src')
| -rw-r--r-- | src/object.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/object.c b/src/object.c index 0ab018f445..03911b98a5 100644 --- a/src/object.c +++ b/src/object.c @@ -355,6 +355,7 @@ void rt_object_init(struct rt_object *object, const char *name) { rt_base_t level; + rt_size_t len; #ifdef RT_DEBUGING_ASSERT struct rt_list_node *node = RT_NULL; #endif /* RT_DEBUGING_ASSERT */ @@ -390,10 +391,20 @@ void rt_object_init(struct rt_object *object, /* set object type to static */ object->type = type | RT_Object_Class_Static; #if RT_NAME_MAX > 0 - rt_strncpy(object->name, name, RT_NAME_MAX); /* copy name */ + if (name) + { + len = rt_strlen(name); + len = len > RT_NAME_MAX - 1 ? RT_NAME_MAX - 1 : len; + rt_memcpy(object->name, name, len); + object->name[len] = '\0'; + } + else + { + object->name[0] = '\0'; + } #else object->name = name; -#endif /* RT_NAME_MAX > 0 */ +#endif RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object)); @@ -461,6 +472,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name) { struct rt_object *object; rt_base_t level; + rt_size_t len; struct rt_object_information *information; #ifdef RT_USING_MODULE struct rt_dlmodule *module = dlmodule_self(); @@ -491,10 +503,20 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name) object->flag = 0; #if RT_NAME_MAX > 0 - rt_strncpy(object->name, name, RT_NAME_MAX - 1); /* copy name */ + if (name) + { + len = rt_strlen(name); + len = len > RT_NAME_MAX - 1 ? RT_NAME_MAX - 1 : len; + rt_memcpy(object->name, name, len); + object->name[len] = '\0'; + } + else + { + object->name[0] = '\0'; + } #else object->name = name; -#endif /* RT_NAME_MAX > 0 */ +#endif RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object)); |
