mirror of
				https://github.com/riscv-software-src/opensbi
				synced 2025-11-04 05:50:22 +00:00 
			
		
		
		
	lib: sbi_scratch: zero out scratch memory on all harts
In sbi_scratch_init() we determine the last hart. The index of the last hart cannot exceed SBI_HARTMASK_MAX_BITS - 1. We should not initialize last_hartid_having_scratch to a higher number to avoid buffer overflows when using this value before calling sbi_scratch_init(). When allocating scratch memory in sbi_scratch_alloc_offset() we zero out the allocated memory for all harts except for the last one. We should not skip the last hart. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
		
							parent
							
								
									434198e3be
								
							
						
					
					
						commit
						1da3d80b5b
					
				@ -14,7 +14,7 @@
 | 
			
		||||
#include <sbi/sbi_scratch.h>
 | 
			
		||||
#include <sbi/sbi_string.h>
 | 
			
		||||
 | 
			
		||||
u32 last_hartid_having_scratch = SBI_HARTMASK_MAX_BITS;
 | 
			
		||||
u32 last_hartid_having_scratch = SBI_HARTMASK_MAX_BITS - 1;
 | 
			
		||||
struct sbi_scratch *hartid_to_scratch_table[SBI_HARTMASK_MAX_BITS] = { 0 };
 | 
			
		||||
 | 
			
		||||
static spinlock_t extra_lock = SPIN_LOCK_INITIALIZER;
 | 
			
		||||
@ -74,7 +74,7 @@ done:
 | 
			
		||||
	spin_unlock(&extra_lock);
 | 
			
		||||
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		for (i = 0; i < sbi_scratch_last_hartid(); i++) {
 | 
			
		||||
		for (i = 0; i <= sbi_scratch_last_hartid(); i++) {
 | 
			
		||||
			rscratch = sbi_hartid_to_scratch(i);
 | 
			
		||||
			if (!rscratch)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user