Commit cfe90f49 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files


Daniel Borkmann says:

====================
pull-request: bpf 2020-10-08

The main changes are:

1) Fix "unresolved symbol" build error under CONFIG_NET w/o CONFIG_INET due
   to missing tcp_timewait_sock and inet_timewait_sock BTF, from Yonghong Song.

2) Fix 32 bit sub-register bounds tracking for OR case, from Daniel Borkmann.
====================

Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents b6c02ef5 5b9fbeb7
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -5667,8 +5667,8 @@ static void scalar32_min_max_or(struct bpf_reg_state *dst_reg,
	bool src_known = tnum_subreg_is_const(src_reg->var_off);
	bool dst_known = tnum_subreg_is_const(dst_reg->var_off);
	struct tnum var32_off = tnum_subreg(dst_reg->var_off);
	s32 smin_val = src_reg->smin_value;
	u32 umin_val = src_reg->umin_value;
	s32 smin_val = src_reg->s32_min_value;
	u32 umin_val = src_reg->u32_min_value;

	/* Assuming scalar64_min_max_or will be called so it is safe
	 * to skip updating register for known case.
@@ -5691,8 +5691,8 @@ static void scalar32_min_max_or(struct bpf_reg_state *dst_reg,
		/* ORing two positives gives a positive, so safe to
		 * cast result into s64.
		 */
		dst_reg->s32_min_value = dst_reg->umin_value;
		dst_reg->s32_max_value = dst_reg->umax_value;
		dst_reg->s32_min_value = dst_reg->u32_min_value;
		dst_reg->s32_max_value = dst_reg->u32_max_value;
	}
}

+6 −0
Original line number Diff line number Diff line
@@ -9558,6 +9558,12 @@ const struct bpf_func_proto bpf_skc_to_tcp_sock_proto = {

BPF_CALL_1(bpf_skc_to_tcp_timewait_sock, struct sock *, sk)
{
	/* BTF types for tcp_timewait_sock and inet_timewait_sock are not
	 * generated if CONFIG_INET=n. Trigger an explicit generation here.
	 */
	BTF_TYPE_EMIT(struct inet_timewait_sock);
	BTF_TYPE_EMIT(struct tcp_timewait_sock);

#ifdef CONFIG_INET
	if (sk && sk->sk_prot == &tcp_prot && sk->sk_state == TCP_TIME_WAIT)
		return (unsigned long)sk;