diff options
Diffstat (limited to 'kernel/bpf/cgroup.c')
-rw-r--r-- | kernel/bpf/cgroup.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index 6a6a154cfa7b..ddd8addcdb5c 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c | |||
@@ -1334,6 +1334,7 @@ static u32 sysctl_convert_ctx_access(enum bpf_access_type type, | |||
1334 | struct bpf_prog *prog, u32 *target_size) | 1334 | struct bpf_prog *prog, u32 *target_size) |
1335 | { | 1335 | { |
1336 | struct bpf_insn *insn = insn_buf; | 1336 | struct bpf_insn *insn = insn_buf; |
1337 | u32 read_size; | ||
1337 | 1338 | ||
1338 | switch (si->off) { | 1339 | switch (si->off) { |
1339 | case offsetof(struct bpf_sysctl, write): | 1340 | case offsetof(struct bpf_sysctl, write): |
@@ -1365,7 +1366,9 @@ static u32 sysctl_convert_ctx_access(enum bpf_access_type type, | |||
1365 | treg, si->dst_reg, | 1366 | treg, si->dst_reg, |
1366 | offsetof(struct bpf_sysctl_kern, ppos)); | 1367 | offsetof(struct bpf_sysctl_kern, ppos)); |
1367 | *insn++ = BPF_STX_MEM( | 1368 | *insn++ = BPF_STX_MEM( |
1368 | BPF_SIZEOF(u32), treg, si->src_reg, 0); | 1369 | BPF_SIZEOF(u32), treg, si->src_reg, |
1370 | bpf_ctx_narrow_access_offset( | ||
1371 | 0, sizeof(u32), sizeof(loff_t))); | ||
1369 | *insn++ = BPF_LDX_MEM( | 1372 | *insn++ = BPF_LDX_MEM( |
1370 | BPF_DW, treg, si->dst_reg, | 1373 | BPF_DW, treg, si->dst_reg, |
1371 | offsetof(struct bpf_sysctl_kern, tmp_reg)); | 1374 | offsetof(struct bpf_sysctl_kern, tmp_reg)); |
@@ -1374,8 +1377,11 @@ static u32 sysctl_convert_ctx_access(enum bpf_access_type type, | |||
1374 | BPF_FIELD_SIZEOF(struct bpf_sysctl_kern, ppos), | 1377 | BPF_FIELD_SIZEOF(struct bpf_sysctl_kern, ppos), |
1375 | si->dst_reg, si->src_reg, | 1378 | si->dst_reg, si->src_reg, |
1376 | offsetof(struct bpf_sysctl_kern, ppos)); | 1379 | offsetof(struct bpf_sysctl_kern, ppos)); |
1380 | read_size = bpf_size_to_bytes(BPF_SIZE(si->code)); | ||
1377 | *insn++ = BPF_LDX_MEM( | 1381 | *insn++ = BPF_LDX_MEM( |
1378 | BPF_SIZE(si->code), si->dst_reg, si->dst_reg, 0); | 1382 | BPF_SIZE(si->code), si->dst_reg, si->dst_reg, |
1383 | bpf_ctx_narrow_access_offset( | ||
1384 | 0, read_size, sizeof(loff_t))); | ||
1379 | } | 1385 | } |
1380 | *target_size = sizeof(u32); | 1386 | *target_size = sizeof(u32); |
1381 | break; | 1387 | break; |