diff options
Diffstat (limited to 'lib/stackdepot.c')
| -rw-r--r-- | lib/stackdepot.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 9e0b0315a724..53ad6c0831ae 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c @@ -42,12 +42,14 @@  #define DEPOT_STACK_BITS (sizeof(depot_stack_handle_t) * 8) +#define STACK_ALLOC_NULL_PROTECTION_BITS 1  #define STACK_ALLOC_ORDER 2 /* 'Slab' size order for stack depot, 4 pages */  #define STACK_ALLOC_SIZE (1LL << (PAGE_SHIFT + STACK_ALLOC_ORDER))  #define STACK_ALLOC_ALIGN 4  #define STACK_ALLOC_OFFSET_BITS (STACK_ALLOC_ORDER + PAGE_SHIFT - \  					STACK_ALLOC_ALIGN) -#define STACK_ALLOC_INDEX_BITS (DEPOT_STACK_BITS - STACK_ALLOC_OFFSET_BITS) +#define STACK_ALLOC_INDEX_BITS (DEPOT_STACK_BITS - \ +		STACK_ALLOC_NULL_PROTECTION_BITS - STACK_ALLOC_OFFSET_BITS)  #define STACK_ALLOC_SLABS_CAP 1024  #define STACK_ALLOC_MAX_SLABS \  	(((1LL << (STACK_ALLOC_INDEX_BITS)) < STACK_ALLOC_SLABS_CAP) ? \ @@ -59,6 +61,7 @@ union handle_parts {  	struct {  		u32 slabindex : STACK_ALLOC_INDEX_BITS;  		u32 offset : STACK_ALLOC_OFFSET_BITS; +		u32 valid : STACK_ALLOC_NULL_PROTECTION_BITS;  	};  }; @@ -136,6 +139,7 @@ static struct stack_record *depot_alloc_stack(unsigned long *entries, int size,  	stack->size = size;  	stack->handle.slabindex = depot_index;  	stack->handle.offset = depot_offset >> STACK_ALLOC_ALIGN; +	stack->handle.valid = 1;  	memcpy(stack->entries, entries, size * sizeof(unsigned long));  	depot_offset += required_size;  | 
