Commit 27ecd6d
committed
bpf: Reject narrower access to pointer ctx fields
JIRA: https://issues.redhat.com/browse/RHEL-110274
commit e092992
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date: Tue Jul 22 16:32:32 2025 +0200
bpf: Reject narrower access to pointer ctx fields
The following BPF program, simplified from a syzkaller repro, causes a
kernel warning:
r0 = *(u8 *)(r1 + 169);
exit;
With pointer field sk being at offset 168 in __sk_buff. This access is
detected as a narrower read in bpf_skb_is_valid_access because it
doesn't match offsetof(struct __sk_buff, sk). It is therefore allowed
and later proceeds to bpf_convert_ctx_access. Note that for the
"is_narrower_load" case in the convert_ctx_accesses(), the insn->off
is aligned, so the cnt may not be 0 because it matches the
offsetof(struct __sk_buff, sk) in the bpf_convert_ctx_access. However,
the target_size stays 0 and the verifier errors with a kernel warning:
verifier bug: error during ctx access conversion(1)
This patch fixes that to return a proper "invalid bpf_context access
off=X size=Y" error on the load instruction.
The same issue affects multiple other fields in context structures that
allow narrow access. Some other non-affected fields (for sk_msg,
sk_lookup, and sockopt) were also changed to use bpf_ctx_range_ptr for
consistency.
Note this syzkaller crash was reported in the "Closes" link below, which
used to be about a different bug, fixed in
commit fce7bd8 ("bpf/verifier: Handle BPF_LOAD_ACQ instructions
in insn_def_regno()"). Because syzbot somehow confused the two bugs,
the new crash and repro didn't get reported to the mailing list.
Fixes: f96da09 ("bpf: simplify narrower ctx access")
Fixes: 0df1a55 ("bpf: Warn on internal verifier errors")
Reported-by: syzbot+0ef84a7bdf5301d4cbec@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=0ef84a7bdf5301d4cbec
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://patch.msgid.link/3b8dcee67ff4296903351a974ddd9c4dca768b64.1753194596.git.paul.chaignon@gmail.com
Signed-off-by: Viktor Malik <vmalik@redhat.com>1 parent 40a90e6 commit 27ecd6d
2 files changed
+14
-14
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2404 | 2404 | | |
2405 | 2405 | | |
2406 | 2406 | | |
2407 | | - | |
| 2407 | + | |
2408 | 2408 | | |
2409 | 2409 | | |
2410 | 2410 | | |
2411 | 2411 | | |
2412 | | - | |
| 2412 | + | |
2413 | 2413 | | |
2414 | 2414 | | |
2415 | 2415 | | |
2416 | 2416 | | |
2417 | | - | |
| 2417 | + | |
2418 | 2418 | | |
2419 | 2419 | | |
2420 | 2420 | | |
2421 | 2421 | | |
2422 | | - | |
| 2422 | + | |
2423 | 2423 | | |
2424 | 2424 | | |
2425 | 2425 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8531 | 8531 | | |
8532 | 8532 | | |
8533 | 8533 | | |
8534 | | - | |
| 8534 | + | |
8535 | 8535 | | |
8536 | 8536 | | |
8537 | 8537 | | |
| |||
9108 | 9108 | | |
9109 | 9109 | | |
9110 | 9110 | | |
9111 | | - | |
| 9111 | + | |
9112 | 9112 | | |
9113 | 9113 | | |
9114 | 9114 | | |
| |||
9158 | 9158 | | |
9159 | 9159 | | |
9160 | 9160 | | |
9161 | | - | |
| 9161 | + | |
9162 | 9162 | | |
9163 | 9163 | | |
9164 | 9164 | | |
9165 | 9165 | | |
9166 | | - | |
| 9166 | + | |
9167 | 9167 | | |
9168 | 9168 | | |
9169 | 9169 | | |
9170 | 9170 | | |
9171 | | - | |
| 9171 | + | |
9172 | 9172 | | |
9173 | 9173 | | |
9174 | 9174 | | |
| |||
9177 | 9177 | | |
9178 | 9178 | | |
9179 | 9179 | | |
9180 | | - | |
| 9180 | + | |
9181 | 9181 | | |
9182 | 9182 | | |
9183 | 9183 | | |
| |||
9247 | 9247 | | |
9248 | 9248 | | |
9249 | 9249 | | |
9250 | | - | |
| 9250 | + | |
9251 | 9251 | | |
9252 | 9252 | | |
9253 | 9253 | | |
9254 | 9254 | | |
9255 | | - | |
| 9255 | + | |
9256 | 9256 | | |
9257 | 9257 | | |
9258 | 9258 | | |
9259 | 9259 | | |
9260 | | - | |
| 9260 | + | |
9261 | 9261 | | |
9262 | 9262 | | |
9263 | 9263 | | |
| |||
11459 | 11459 | | |
11460 | 11460 | | |
11461 | 11461 | | |
11462 | | - | |
| 11462 | + | |
11463 | 11463 | | |
11464 | 11464 | | |
11465 | 11465 | | |
| |||
0 commit comments