[OpenBIOS] [PATCH] ofmem: restrict ofmem_claim() allocations to RAM size

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Thu Feb 22 09:18:58 CET 2018


On 13/02/18 22:41, Mark Cave-Ayland wrote:

> As OFMEM memory ranges don't provide an explicit upper limit, we must manually
> check that CIF claim calls lie within a valid maxmimum range if attempting to
> allocate a specific address. Since the claim method provides a 1:1 mapping between
> physical and virtual addresses, the valid maximum address is therefore equivalent
> to the machine RAM size.
> 
> This fixes booting yaboot 1.3.17 which implements a top-down search using claim to
> find the next free memory region to locate its heap. Without this fix we blindly
> accept a claim for physical addresses far above the available RAM which fails
> silently when we try to use the mapping later.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
> ---
>   libopenbios/ofmem_common.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libopenbios/ofmem_common.c b/libopenbios/ofmem_common.c
> index 217bd9b..fc19d27 100644
> --- a/libopenbios/ofmem_common.c
> +++ b/libopenbios/ofmem_common.c
> @@ -623,7 +623,7 @@ ucell ofmem_claim( ucell addr, ucell size, ucell align )
>   	virt = phys = 0;
>   	if( !align ) {
>   		if( is_free(addr, size, ofmem->virt_range) &&
> -		    is_free(addr, size, ofmem->phys_range) ) {
> +		    is_free(addr, size, ofmem->phys_range) && addr < get_ram_size() ) {
>   			ofmem_claim_phys_( addr, size, 0, 0, 0, 0 );
>   			ofmem_claim_virt_( addr, size, 0, 0, 0, 0 );
>   			virt = phys = addr;
> 

Applied to master.


ATB,

Mark.



More information about the OpenBIOS mailing list