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

Commit 951debb9 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'bpf-next'



Daniel Borkmann says:

====================
Minor BPF updates

Various minor misc updates.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents ce7fa78c b13138ef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1245,7 +1245,7 @@ static int bpf_jit_prog(struct bpf_jit *jit, struct bpf_prog *fp)
	jit->lit = jit->lit_start;
	jit->prg = 0;

	bpf_jit_prologue(jit, fp->type == BPF_PROG_TYPE_UNSPEC);
	bpf_jit_prologue(jit, bpf_prog_was_classic(fp));
	for (i = 0; i < fp->len; i += insn_count) {
		insn_count = bpf_jit_insn(jit, fp, i);
		if (insn_count < 0)
+1 −1
Original line number Diff line number Diff line
@@ -807,7 +807,7 @@ cond_branch: f_offset = addrs[i + filter[i].jf];
	}

	if (bpf_jit_enable > 1)
		bpf_jit_dump(flen, proglen, pass, image);
		bpf_jit_dump(flen, proglen, pass + 1, image);

	if (image) {
		bpf_flush_icache(image, image + proglen);
+1 −1
Original line number Diff line number Diff line
@@ -1103,7 +1103,7 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
	}

	if (bpf_jit_enable > 1)
		bpf_jit_dump(prog->len, proglen, 0, image);
		bpf_jit_dump(prog->len, proglen, pass + 1, image);

	if (image) {
		bpf_flush_icache(header, image + proglen);
+14 −2
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/linkage.h>
#include <linux/printk.h>
#include <linux/workqueue.h>
#include <linux/sched.h>

#include <asm/cacheflush.h>

@@ -354,6 +355,16 @@ static inline unsigned int bpf_prog_size(unsigned int proglen)
		   offsetof(struct bpf_prog, insns[proglen]));
}

static inline bool bpf_prog_was_classic(const struct bpf_prog *prog)
{
	/* When classic BPF programs have been loaded and the arch
	 * does not have a classic BPF JIT (anymore), they have been
	 * converted via bpf_migrate_filter() to eBPF and thus always
	 * have an unspec program type.
	 */
	return prog->type == BPF_PROG_TYPE_UNSPEC;
}

#define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0]))

#ifdef CONFIG_DEBUG_SET_MODULE_RONX
@@ -428,8 +439,9 @@ void bpf_jit_free(struct bpf_prog *fp);
static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen,
				u32 pass, void *image)
{
	pr_err("flen=%u proglen=%u pass=%u image=%pK\n",
	       flen, proglen, pass, image);
	pr_err("flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n", flen,
	       proglen, pass, image, current->comm, task_pid_nr(current));

	if (image)
		print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_OFFSET,
			       16, 1, image, proglen, false);
+2 −0
Original line number Diff line number Diff line
@@ -4613,6 +4613,8 @@ static struct bpf_prog *generate_filter(int which, int *err)
		}

		fp->len = flen;
		/* Type doesn't really matter here as long as it's not unspec. */
		fp->type = BPF_PROG_TYPE_SOCKET_FILTER;
		memcpy(fp->insnsi, fptr, fp->len * sizeof(struct bpf_insn));

		bpf_prog_select_runtime(fp);