diff options
| author | vandoul <[email protected]> | 2025-06-10 10:01:07 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2025-06-13 17:04:27 +0800 |
| commit | 169d84d65adbddf4e08fea812af15f4ca51f389a (patch) | |
| tree | a5d0765c30ff394201b00624e13f7827d9b4d97b /include | |
| parent | b23d87be069a710c5bd7e84a6314260110c53cb1 (diff) | |
修复单向列表移除节点时存在的安全风险.
Signed-off-by: vandoul <[email protected]>
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtservice.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/include/rtservice.h b/include/rtservice.h index 3d99b46151..f9612e0b55 100644 --- a/include/rtservice.h +++ b/include/rtservice.h @@ -234,6 +234,7 @@ rt_inline rt_slist_t *rt_slist_pop(rt_slist_t *l) if (node != (rt_slist_t *)0) { ((struct rt_slist_node *)l)->next = node->next; + node->next = RT_NULL; } return node; @@ -246,7 +247,11 @@ rt_inline rt_slist_t *rt_slist_remove(rt_slist_t *l, rt_slist_t *n) while (node->next && node->next != n) node = node->next; /* remove node */ - if (node->next != (rt_slist_t *)0) node->next = node->next->next; + if (node->next != (rt_slist_t *)0) + { + node->next = node->next->next; + n->next = RT_NULL; + } return l; } |
