Skip to content

Commit 6ccfad5

Browse files
authored
fix: constant time heap stats crash on out of memory (#64)
`mspace_memalign` returns NULL on out of memory and it was not checked for stats collection
1 parent 9fd9afa commit 6ccfad5

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

vpp-patches/0023-vppinfra-collect-heap-stats-in-constant-time.patch

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From d383b50ea710a070faf0d893985dd942027b39b0 Mon Sep 17 00:00:00 2001
1+
From 19cf5078ed7d013e2d06e6d13ea98cf5cb71b33e Mon Sep 17 00:00:00 2001
22
From: Vladimir Zhigulin <scripath96@gmail.com>
33
Date: Wed, 27 Dec 2023 15:23:18 +0100
44
Subject: [PATCH] vppinfra: collect heap stats in constant time
@@ -18,10 +18,10 @@ Signed-off-by: Vladimir Zhigulin <scripath96@gmail.com>
1818
Change-Id: Iaa7a5dda19ce9fd0a32d55f4dd16bc62d4b0b480
1919
---
2020
src/vlib/stats/provider_mem.c | 8 +----
21-
src/vppinfra/dlmalloc.c | 66 ++++++++++++++++++++++++++++++++---
21+
src/vppinfra/dlmalloc.c | 67 ++++++++++++++++++++++++++++++++---
2222
src/vppinfra/dlmalloc.h | 5 ++-
2323
src/vppinfra/mem_dlmalloc.c | 13 ++-----
24-
4 files changed, 69 insertions(+), 23 deletions(-)
24+
4 files changed, 70 insertions(+), 23 deletions(-)
2525

2626
diff --git a/src/vlib/stats/provider_mem.c b/src/vlib/stats/provider_mem.c
2727
index f3a3f5d3e..bc3801f2c 100644
@@ -59,7 +59,7 @@ index f3a3f5d3e..bc3801f2c 100644
5959
/* Create symlink */
6060
vlib_stats_add_symlink (idx, STAT_MEM_USED, "/mem/%s/used", heap->name);
6161
diff --git a/src/vppinfra/dlmalloc.c b/src/vppinfra/dlmalloc.c
62-
index 5cdc6f6cc..1fcd02741 100644
62+
index 5cdc6f6cc..4d8b92d20 100644
6363
--- a/src/vppinfra/dlmalloc.c
6464
+++ b/src/vppinfra/dlmalloc.c
6565
@@ -1179,6 +1179,9 @@ struct malloc_state {
@@ -183,21 +183,22 @@ index 5cdc6f6cc..1fcd02741 100644
183183
}
184184
}
185185
}
186-
@@ -4663,8 +4707,11 @@ void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
186+
@@ -4663,8 +4707,12 @@ void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
187187
USAGE_ERROR_ACTION(ms,ms);
188188
return 0;
189189
}
190190
- if (alignment <= MALLOC_ALIGNMENT)
191191
- return mspace_malloc(msp, bytes);
192192
+ if (alignment <= MALLOC_ALIGNMENT) {
193193
+ void *rv = mspace_malloc(msp, bytes);
194-
+ ms->fast_stats_used_sz += chunksize(mem2chunk(rv));
194+
+ if (rv)
195+
+ ms->fast_stats_used_sz += chunksize(mem2chunk(rv));
195196
+ return rv;
196197
+ }
197198
return internal_memalign(ms, alignment, bytes);
198199
}
199200

200-
@@ -4797,12 +4844,21 @@ size_t mspace_set_footprint_limit(mspace msp, size_t bytes) {
201+
@@ -4797,12 +4845,21 @@ size_t mspace_set_footprint_limit(mspace msp, size_t bytes) {
201202

202203
#if !NO_MALLINFO
203204
__clib_nosanitize_addr
@@ -282,5 +283,5 @@ index de7591139..696738e86 100644
282283
}
283284

284285
--
285-
2.45.2
286+
2.49.0
286287

0 commit comments

Comments
 (0)