mirror of
				https://github.com/riscv-software-src/opensbi
				synced 2025-11-04 14:00:31 +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_scratch.h>
 | 
				
			||||||
#include <sbi/sbi_string.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 };
 | 
					struct sbi_scratch *hartid_to_scratch_table[SBI_HARTMASK_MAX_BITS] = { 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static spinlock_t extra_lock = SPIN_LOCK_INITIALIZER;
 | 
					static spinlock_t extra_lock = SPIN_LOCK_INITIALIZER;
 | 
				
			||||||
@ -74,7 +74,7 @@ done:
 | 
				
			|||||||
	spin_unlock(&extra_lock);
 | 
						spin_unlock(&extra_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret) {
 | 
						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);
 | 
								rscratch = sbi_hartid_to_scratch(i);
 | 
				
			||||||
			if (!rscratch)
 | 
								if (!rscratch)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user