BPF_REG_SIZE
stack_entry = &state->stack[soff / BPF_REG_SIZE];
if (stack_entry->slot_type[soff % BPF_REG_SIZE] == STACK_ZERO)
nfp_prog->subprog[i].stack_depth += BPF_REG_SIZE * 4;
return !(off % BPF_REG_SIZE);
#define BPF_DYNPTR_NR_SLOTS (BPF_DYNPTR_SIZE / BPF_REG_SIZE)
u8 slot_type[BPF_REG_SIZE];
#define BPF_ID_MAP_SIZE ((MAX_BPF_REG + MAX_BPF_STACK / BPF_REG_SIZE) * MAX_CALL_FRAMES)
(((slot < frame->allocated_stack / BPF_REG_SIZE) && \
((1 << frame->stack[slot].slot_type[BPF_REG_SIZE - 1]) & (mask))) \
iter < frame->allocated_stack / BPF_REG_SIZE; \
for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
char types_buf[BPF_REG_SIZE + 1];
for (j = 0; j < BPF_REG_SIZE; j++) {
types_buf[BPF_REG_SIZE] = 0;
switch (state->stack[i].slot_type[BPF_REG_SIZE - 1]) {
for (j = 0; j < BPF_REG_SIZE; j++)
verbose(env, " fp%d=%s", (-i - 1) * BPF_REG_SIZE, types_buf);
verbose(env, " fp%d", (-i - 1) * BPF_REG_SIZE);
(-i - 1) * BPF_REG_SIZE,
verbose(env, " fp%d=%s", (-i - 1) * BPF_REG_SIZE, types_buf);
for (i = 0; i < BPF_REG_SIZE; i++) {
for (j = 0; j < BPF_REG_SIZE; j++)
for (j = 0; j < BPF_REG_SIZE; j++)
for (j = 0; j < BPF_REG_SIZE; j++)
for (j = 0; j < BPF_REG_SIZE; j++)
for (i = 0; i < BPF_REG_SIZE; i++)
for (i = 0; i < BPF_REG_SIZE; i++)
for (i = 0; i < BPF_REG_SIZE; i++)
for (i = 0; i < BPF_REG_SIZE; i++)
enum bpf_stack_slot_type type = stack->slot_type[BPF_REG_SIZE - 1];
return stack->slot_type[BPF_REG_SIZE - 1] == STACK_SPILL;
return stack->slot_type[BPF_REG_SIZE - 1] == STACK_SPILL &&
size_t n = src->allocated_stack / BPF_REG_SIZE;
size_t old_n = state->allocated_stack / BPF_REG_SIZE, n;
size = round_up(size, BPF_REG_SIZE);
n = size / BPF_REG_SIZE;
for (j = 0; j < func->allocated_stack / BPF_REG_SIZE; j++) {
for (i = 1, off = lowest_off; i <= ARRAY_SIZE(caller_saved); ++i, off += BPF_REG_SIZE) {
for (i = 0; i < st->allocated_stack / BPF_REG_SIZE; i++) {
for (j = 0; j < BPF_REG_SIZE; j++)
spi = i / BPF_REG_SIZE;
old->stack[spi].slot_type[i % BPF_REG_SIZE] !=
cur->stack[spi].slot_type[i % BPF_REG_SIZE]))
if (old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_INVALID)
old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_MISC)
i += BPF_REG_SIZE - 1;
if (old->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_MISC &&
cur->stack[spi].slot_type[i % BPF_REG_SIZE] == STACK_ZERO)
if (old->stack[spi].slot_type[i % BPF_REG_SIZE] !=
cur->stack[spi].slot_type[i % BPF_REG_SIZE])
if (i % BPF_REG_SIZE != BPF_REG_SIZE - 1)
switch (old->stack[spi].slot_type[BPF_REG_SIZE - 1]) {
for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
fr, (-i - 1) * BPF_REG_SIZE);
verbose(env, ",fp%d", (-i - 1) * BPF_REG_SIZE);
for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
s32 r6_offset = stack_base + 0 * BPF_REG_SIZE;
s32 r7_offset = stack_base + 1 * BPF_REG_SIZE;
s32 r8_offset = stack_base + 2 * BPF_REG_SIZE;
stack_depth_extra = BPF_REG_SIZE * 3 + stack_depth_roundup;
for (j = 0; j < func->allocated_stack / BPF_REG_SIZE; j++) {
for (j = 0; j < func->allocated_stack / BPF_REG_SIZE; j++) {
if (verifier_bug_if(i >= func->allocated_stack / BPF_REG_SIZE,
i, func->allocated_stack / BPF_REG_SIZE))
for (i = BPF_REG_SIZE; i > BPF_REG_SIZE - size; i--)
int i, slot = -off - 1, spi = slot / BPF_REG_SIZE, err;
size != BPF_REG_SIZE) {
if (!(off % BPF_REG_SIZE) && size == BPF_REG_SIZE) {
if (reg && !(off % BPF_REG_SIZE) && reg->type == SCALAR_VALUE && env->bpf_capable) {
} else if (!reg && !(off % BPF_REG_SIZE) && is_bpf_st_mem(insn) &&
if (size != BPF_REG_SIZE) {
for (i = 0; i < BPF_REG_SIZE; i++)
state->stack[spi].slot_type[(slot - i) % BPF_REG_SIZE] = type;
spi = slot / BPF_REG_SIZE;
stype = &state->stack[spi].slot_type[slot % BPF_REG_SIZE];
spi = slot / BPF_REG_SIZE;
if (stype[slot % BPF_REG_SIZE] != STACK_ZERO)
int i, slot = -off - 1, spi = slot / BPF_REG_SIZE;
for (i = BPF_REG_SIZE - 1; i > 0 && stype[i - 1] == STACK_SPILL; i--)
if (size != BPF_REG_SIZE || spill_size != BPF_REG_SIZE) {
type = stype[(slot - i) % BPF_REG_SIZE];
type = stype[(slot - i) % BPF_REG_SIZE];
return (-off - 1) / BPF_REG_SIZE;
int allocated_slots = state->allocated_stack / BPF_REG_SIZE;
if (off % BPF_REG_SIZE) {
if (!err && size < BPF_REG_SIZE && value_regno >= 0 && t == BPF_READ &&
for (i = 0; i < BPF_REG_SIZE; i++) {
if (state->stack[spi].slot_type[stack_off % BPF_REG_SIZE] == STACK_DYNPTR) {
spi = slot / BPF_REG_SIZE;
stype = &state->stack[spi].slot_type[slot % BPF_REG_SIZE];
for (j = 0; j < BPF_REG_SIZE; j++)
for (i = 0; i < BPF_REG_SIZE; i++) {
for (i = 1; i < state->allocated_stack / BPF_REG_SIZE; i++) {
nr_slots = t->size / BPF_REG_SIZE;
for (i = 0; i < nr_slots * 8; i += BPF_REG_SIZE) {
num_slots = min(fold->allocated_stack / BPF_REG_SIZE,
fcur->allocated_stack / BPF_REG_SIZE);
for (i = 0; i < BPF_REG_SIZE; i++) {
spi = slot / BPF_REG_SIZE;
off = slot % BPF_REG_SIZE;