FAILED: patch "[PATCH] lib/stackdepot.c: fix global out-of-bounds in stack_slabs" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 305e519ce48e935702c32241f07d393c3c8fed3e Mon Sep 17 00:00:00 2001
From: Alexander Potapenko <[email protected]>
Date: Thu, 20 Feb 2020 20:04:30 -0800
Subject: [PATCH] lib/stackdepot.c: fix global out-of-bounds in stack_slabs
Walter Wu has reported a potential case in which init_stack_slab() is called after stack_slabs[STACK_ALLOC_MAX_SLABS - 1] has already been initialized. In that case init_stack_slab() will overwrite stack_slabs[STACK_ALLOC_MAX_SLABS], which may result in a memory corruption.
lib/stackdepot.c +6 -2
@@ -83,15 +83,19 @@ static bool init_stack_slab(void **prealloc)return true;if (stack_slabs[depot_index] ==NULL ) { stack_slabs[depot_index] = *prealloc; + *prealloc =NULL ; }else { - stack_slabs[depot_index +1 ] = *prealloc; +/* If this is the last depot slab, do not touch the next one. */ +if (depot_index +1 <STACK_ALLOC_MAX_SLABS ) { + stack_slabs[depot_index +1 ] = *prealloc; + *prealloc =NULL ; + }/* * This smp_store_release pairs with smp_load_acquire() from * |next_slab_inited| above and in stack_depot_save(). */ smp_store_release (&next_slab_inited,1 ); } - *prealloc =NULL ;return true; }