Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
此提交包含在:
@@ -146,10 +146,11 @@ void __bpf_prog_free(struct bpf_prog *fp)
|
||||
vfree(fp);
|
||||
}
|
||||
|
||||
int bpf_prog_calc_digest(struct bpf_prog *fp)
|
||||
int bpf_prog_calc_tag(struct bpf_prog *fp)
|
||||
{
|
||||
const u32 bits_offset = SHA_MESSAGE_BYTES - sizeof(__be64);
|
||||
u32 raw_size = bpf_prog_digest_scratch_size(fp);
|
||||
u32 raw_size = bpf_prog_tag_scratch_size(fp);
|
||||
u32 digest[SHA_DIGEST_WORDS];
|
||||
u32 ws[SHA_WORKSPACE_WORDS];
|
||||
u32 i, bsize, psize, blocks;
|
||||
struct bpf_insn *dst;
|
||||
@@ -162,7 +163,7 @@ int bpf_prog_calc_digest(struct bpf_prog *fp)
|
||||
if (!raw)
|
||||
return -ENOMEM;
|
||||
|
||||
sha_init(fp->digest);
|
||||
sha_init(digest);
|
||||
memset(ws, 0, sizeof(ws));
|
||||
|
||||
/* We need to take out the map fd for the digest calculation
|
||||
@@ -204,13 +205,14 @@ int bpf_prog_calc_digest(struct bpf_prog *fp)
|
||||
*bits = cpu_to_be64((psize - 1) << 3);
|
||||
|
||||
while (blocks--) {
|
||||
sha_transform(fp->digest, todo, ws);
|
||||
sha_transform(digest, todo, ws);
|
||||
todo += SHA_MESSAGE_BYTES;
|
||||
}
|
||||
|
||||
result = (__force __be32 *)fp->digest;
|
||||
result = (__force __be32 *)digest;
|
||||
for (i = 0; i < SHA_DIGEST_WORDS; i++)
|
||||
result[i] = cpu_to_be32(fp->digest[i]);
|
||||
result[i] = cpu_to_be32(digest[i]);
|
||||
memcpy(fp->tag, result, sizeof(fp->tag));
|
||||
|
||||
vfree(raw);
|
||||
return 0;
|
||||
|
@@ -688,17 +688,17 @@ static int bpf_prog_release(struct inode *inode, struct file *filp)
|
||||
static void bpf_prog_show_fdinfo(struct seq_file *m, struct file *filp)
|
||||
{
|
||||
const struct bpf_prog *prog = filp->private_data;
|
||||
char prog_digest[sizeof(prog->digest) * 2 + 1] = { };
|
||||
char prog_tag[sizeof(prog->tag) * 2 + 1] = { };
|
||||
|
||||
bin2hex(prog_digest, prog->digest, sizeof(prog->digest));
|
||||
bin2hex(prog_tag, prog->tag, sizeof(prog->tag));
|
||||
seq_printf(m,
|
||||
"prog_type:\t%u\n"
|
||||
"prog_jited:\t%u\n"
|
||||
"prog_digest:\t%s\n"
|
||||
"prog_tag:\t%s\n"
|
||||
"memlock:\t%llu\n",
|
||||
prog->type,
|
||||
prog->jited,
|
||||
prog_digest,
|
||||
prog_tag,
|
||||
prog->pages * 1ULL << PAGE_SHIFT);
|
||||
}
|
||||
#endif
|
||||
|
@@ -3016,7 +3016,7 @@ static int replace_map_fd_with_map_ptr(struct bpf_verifier_env *env)
|
||||
int insn_cnt = env->prog->len;
|
||||
int i, j, err;
|
||||
|
||||
err = bpf_prog_calc_digest(env->prog);
|
||||
err = bpf_prog_calc_tag(env->prog);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
新增問題並參考
封鎖使用者