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

Commit 482dca93 authored by David Ahern's avatar David Ahern Committed by David S. Miller
Browse files

bpf: Add mark and priority to sock options that can be set



Add socket mark and priority to fields that can be set by
ebpf program when a socket is created.

Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e12f1a59
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -758,6 +758,8 @@ struct bpf_sock {
	__u32 family;
	__u32 type;
	__u32 protocol;
	__u32 mark;
	__u32 priority;
};

#define XDP_PACKET_HEADROOM 256
+26 −0
Original line number Diff line number Diff line
@@ -3455,6 +3455,10 @@ static bool sock_filter_is_valid_access(int off, int size,
		switch (off) {
		case offsetof(struct bpf_sock, bound_dev_if):
			break;
		case offsetof(struct bpf_sock, mark):
			break;
		case offsetof(struct bpf_sock, priority):
			break;
		default:
			return false;
		}
@@ -3958,6 +3962,28 @@ static u32 sock_filter_convert_ctx_access(enum bpf_access_type type,
				      offsetof(struct sock, sk_bound_dev_if));
		break;

	case offsetof(struct bpf_sock, mark):
		BUILD_BUG_ON(FIELD_SIZEOF(struct sock, sk_mark) != 4);

		if (type == BPF_WRITE)
			*insn++ = BPF_STX_MEM(BPF_W, si->dst_reg, si->src_reg,
					offsetof(struct sock, sk_mark));
		else
			*insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->src_reg,
				      offsetof(struct sock, sk_mark));
		break;

	case offsetof(struct bpf_sock, priority):
		BUILD_BUG_ON(FIELD_SIZEOF(struct sock, sk_priority) != 4);

		if (type == BPF_WRITE)
			*insn++ = BPF_STX_MEM(BPF_W, si->dst_reg, si->src_reg,
					offsetof(struct sock, sk_priority));
		else
			*insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->src_reg,
				      offsetof(struct sock, sk_priority));
		break;

	case offsetof(struct bpf_sock, family):
		BUILD_BUG_ON(FIELD_SIZEOF(struct sock, sk_family) != 2);