summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkurisaw <[email protected]>2025-07-18 15:34:12 +0800
committerRbb666 <[email protected]>2025-07-18 20:15:53 +0800
commitece19e961aaa5484e1e48a398b9bc4a2e54f9ed9 (patch)
treec7462f0ff6dd40acad217adde6284083ed413746 /src
parent4423c6f01f9ee55e6a9e793a4020d9f8c0029f43 (diff)
kernel/testcase: fixed buffer overflow vulnerability in object
Diffstat (limited to 'src')
-rw-r--r--src/object.c30
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));