diff options
Diffstat (limited to 'kernel/bpf/core.c')
-rw-r--r-- | kernel/bpf/core.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 1eb4f1303756..503d4211988a 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c | |||
@@ -146,10 +146,11 @@ void __bpf_prog_free(struct bpf_prog *fp) | |||
146 | vfree(fp); | 146 | vfree(fp); |
147 | } | 147 | } |
148 | 148 | ||
149 | int bpf_prog_calc_digest(struct bpf_prog *fp) | 149 | int bpf_prog_calc_tag(struct bpf_prog *fp) |
150 | { | 150 | { |
151 | const u32 bits_offset = SHA_MESSAGE_BYTES - sizeof(__be64); | 151 | const u32 bits_offset = SHA_MESSAGE_BYTES - sizeof(__be64); |
152 | u32 raw_size = bpf_prog_digest_scratch_size(fp); | 152 | u32 raw_size = bpf_prog_tag_scratch_size(fp); |
153 | u32 digest[SHA_DIGEST_WORDS]; | ||
153 | u32 ws[SHA_WORKSPACE_WORDS]; | 154 | u32 ws[SHA_WORKSPACE_WORDS]; |
154 | u32 i, bsize, psize, blocks; | 155 | u32 i, bsize, psize, blocks; |
155 | struct bpf_insn *dst; | 156 | struct bpf_insn *dst; |
@@ -162,7 +163,7 @@ int bpf_prog_calc_digest(struct bpf_prog *fp) | |||
162 | if (!raw) | 163 | if (!raw) |
163 | return -ENOMEM; | 164 | return -ENOMEM; |
164 | 165 | ||
165 | sha_init(fp->digest); | 166 | sha_init(digest); |
166 | memset(ws, 0, sizeof(ws)); | 167 | memset(ws, 0, sizeof(ws)); |
167 | 168 | ||
168 | /* We need to take out the map fd for the digest calculation | 169 | /* 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) | |||
204 | *bits = cpu_to_be64((psize - 1) << 3); | 205 | *bits = cpu_to_be64((psize - 1) << 3); |
205 | 206 | ||
206 | while (blocks--) { | 207 | while (blocks--) { |
207 | sha_transform(fp->digest, todo, ws); | 208 | sha_transform(digest, todo, ws); |
208 | todo += SHA_MESSAGE_BYTES; | 209 | todo += SHA_MESSAGE_BYTES; |
209 | } | 210 | } |
210 | 211 | ||
211 | result = (__force __be32 *)fp->digest; | 212 | result = (__force __be32 *)digest; |
212 | for (i = 0; i < SHA_DIGEST_WORDS; i++) | 213 | for (i = 0; i < SHA_DIGEST_WORDS; i++) |
213 | result[i] = cpu_to_be32(fp->digest[i]); | 214 | result[i] = cpu_to_be32(digest[i]); |
215 | memcpy(fp->tag, result, sizeof(fp->tag)); | ||
214 | 216 | ||
215 | vfree(raw); | 217 | vfree(raw); |
216 | return 0; | 218 | return 0; |