Skip to content

Commit 1955351

Browse files
l0koddavem330
authored andcommitted
bpf: Set register type according to is_valid_access()
This prevent future potential pointer leaks when an unprivileged eBPF program will read a pointer value from its context. Even if is_valid_access() returns a pointer type, the eBPF verifier replace it with UNKNOWN_VALUE. The register value that contains a kernel address is then allowed to leak. Moreover, this fix allows unprivileged eBPF programs to use functions with (legitimate) pointer arguments. Not an issue currently since reg_type is only set for PTR_TO_PACKET or PTR_TO_PACKET_END in XDP and TC programs that can only be loaded as privileged. For now, the only unprivileged eBPF program allowed is for socket filtering and all the types from its context are UNKNOWN_VALUE. However, this fix is important for future unprivileged eBPF programs which could use pointers in their context. Signed-off-by: Mickaël Salaün <[email protected]> Cc: Alexei Starovoitov <[email protected]> Cc: Daniel Borkmann <[email protected]> Acked-by: Daniel Borkmann <[email protected]> Acked-by: Alexei Starovoitov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 973d94d commit 1955351

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

kernel/bpf/verifier.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -749,9 +749,8 @@ static int check_mem_access(struct bpf_verifier_env *env, u32 regno, int off,
749749
err = check_ctx_access(env, off, size, t, &reg_type);
750750
if (!err && t == BPF_READ && value_regno >= 0) {
751751
mark_reg_unknown_value(state->regs, value_regno);
752-
if (env->allow_ptr_leaks)
753-
/* note that reg.[id|off|range] == 0 */
754-
state->regs[value_regno].type = reg_type;
752+
/* note that reg.[id|off|range] == 0 */
753+
state->regs[value_regno].type = reg_type;
755754
}
756755

757756
} else if (reg->type == FRAME_PTR || reg->type == PTR_TO_STACK) {

0 commit comments

Comments
 (0)