Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 168cb9b7 authored by Ben Hutchings's avatar Ben Hutchings Committed by Greg Kroah-Hartman
Browse files

bpf/verifier: Add spi variable to check_stack_write()



Extracted from commit dc503a8ad984 "bpf/verifier: track liveness for
pruning".

Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarBen Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3c4bb079
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -572,7 +572,7 @@ static bool is_spillable_regtype(enum bpf_reg_type type)
static int check_stack_write(struct verifier_state *state, int off, int size,
			     int value_regno)
{
	int i;
	int i, spi = (MAX_BPF_STACK + off) / BPF_REG_SIZE;
	/* caller checked that off % size == 0 and -MAX_BPF_STACK <= off < 0,
	 * so it's aligned access and [off, off + size) are within stack limits
	 */
@@ -587,15 +587,13 @@ static int check_stack_write(struct verifier_state *state, int off, int size,
		}

		/* save register state */
		state->spilled_regs[(MAX_BPF_STACK + off) / BPF_REG_SIZE] =
			state->regs[value_regno];
		state->spilled_regs[spi] = state->regs[value_regno];

		for (i = 0; i < BPF_REG_SIZE; i++)
			state->stack_slot_type[MAX_BPF_STACK + off + i] = STACK_SPILL;
	} else {
		/* regular write of data into stack */
		state->spilled_regs[(MAX_BPF_STACK + off) / BPF_REG_SIZE] =
			(struct reg_state) {};
		state->spilled_regs[spi] = (struct reg_state) {};

		for (i = 0; i < size; i++)
			state->stack_slot_type[MAX_BPF_STACK + off + i] = STACK_MISC;