diff options
Diffstat (limited to 'kernel/bpf')
| -rw-r--r-- | kernel/bpf/core.c | 2 | ||||
| -rw-r--r-- | kernel/bpf/verifier.c | 11 | 
2 files changed, 11 insertions, 2 deletions
| diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index b297e9f60ca1..e2d256c82072 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -972,7 +972,7 @@ static int __init bpf_jit_charge_init(void)  {  	/* Only used as heuristic here to derive limit. */  	bpf_jit_limit_max = bpf_jit_alloc_exec_limit(); -	bpf_jit_limit = min_t(u64, round_up(bpf_jit_limit_max >> 2, +	bpf_jit_limit = min_t(u64, round_up(bpf_jit_limit_max >> 1,  					    PAGE_SIZE), LONG_MAX);  	return 0;  } diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 272563a0b770..d517d13878cf 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -3826,6 +3826,8 @@ static int check_stack_read_fixed_off(struct bpf_verifier_env *env,  						continue;  					if (type == STACK_MISC)  						continue; +					if (type == STACK_INVALID && env->allow_uninit_stack) +						continue;  					verbose(env, "invalid read from stack off %d+%d size %d\n",  						off, i, size);  					return -EACCES; @@ -3863,6 +3865,8 @@ static int check_stack_read_fixed_off(struct bpf_verifier_env *env,  				continue;  			if (type == STACK_ZERO)  				continue; +			if (type == STACK_INVALID && env->allow_uninit_stack) +				continue;  			verbose(env, "invalid read from stack off %d+%d size %d\n",  				off, i, size);  			return -EACCES; @@ -5754,7 +5758,8 @@ static int check_stack_range_initialized(  		stype = &state->stack[spi].slot_type[slot % BPF_REG_SIZE];  		if (*stype == STACK_MISC)  			goto mark; -		if (*stype == STACK_ZERO) { +		if ((*stype == STACK_ZERO) || +		    (*stype == STACK_INVALID && env->allow_uninit_stack)) {  			if (clobber) {  				/* helper can write anything into the stack */  				*stype = STACK_MISC; @@ -13936,6 +13941,10 @@ static bool stacksafe(struct bpf_verifier_env *env, struct bpf_func_state *old,  		if (old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_INVALID)  			continue; +		if (env->allow_uninit_stack && +		    old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_MISC) +			continue; +  		/* explored stack has more populated slots than current stack  		 * and these slots were used  		 */ |