From ba415b2942321c1cbe91fe9e9f279d635fad5816 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Thu, 2 Feb 2023 21:11:29 +0000 Subject: [PATCH] sandbox: vm: fix double evaluation of queue_pop_front() --- sandbox/vm/cache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sandbox/vm/cache.c b/sandbox/vm/cache.c index 1efa96c..a303952 100644 --- a/sandbox/vm/cache.c +++ b/sandbox/vm/cache.c @@ -143,9 +143,13 @@ void *vm_cache_alloc(vm_cache_t *cache, vm_flags_t flags) vm_slab_t *slab = NULL; if (!queue_empty(&cache->c_slabs_partial)) { /* prefer using up partially-full slabs before taking a fresh one */ - slab = QUEUE_CONTAINER(vm_slab_t, s_list, queue_pop_front(&cache->c_slabs_partial)); + queue_entry_t *slab_entry = queue_pop_front(&cache->c_slabs_partial); + assert(slab_entry); + slab = QUEUE_CONTAINER(vm_slab_t, s_list, slab_entry); } else if (!queue_empty(&cache->c_slabs_empty)) { - slab = QUEUE_CONTAINER(vm_slab_t, s_list, queue_pop_front(&cache->c_slabs_empty)); + queue_entry_t *slab_entry = queue_pop_front(&cache->c_slabs_empty); + assert(slab_entry); + slab = QUEUE_CONTAINER(vm_slab_t, s_list, slab_entry); } else { /* we've run out of slabs. create a new one */ slab = alloc_slab(cache, flags);