Udip Pant 7e40781cc8 bpf: verifier: Use target program's type for access verifications
This patch adds changes in verifier to make decisions such as granting
of read / write access or enforcement of return code status based on
the program type of the target program while using dynamic program
extension (of type BPF_PROG_TYPE_EXT).

The BPF_PROG_TYPE_EXT type can be used to extend types such as XDP, SKB
and others. Since the BPF_PROG_TYPE_EXT program type on itself is just a
placeholder for those, we need this extended check for those extended
programs to actually work with proper access, while using this option.

Specifically, it introduces following changes:
- may_access_direct_pkt_data:
    allow access to packet data based on the target prog
- check_return_code:
    enforce return code based on the target prog
    (currently, this check is skipped for EXT program)
- check_ld_abs:
    check for 'may_access_skb' based on the target prog
- check_map_prog_compatibility:
    enforce the map compatibility check based on the target prog
- may_update_sockmap:
    allow sockmap update based on the target prog

Some other occurrences of prog->type is left as it without replacing
with the 'resolved' type:
- do_check_common() and check_attach_btf_id():
    already have specific logic to handle the EXT prog type
- jit_subprogs() and bpf_check():
    Not changed for jit compilation or while inferring env->ops

Next few patches in this series include selftests for some of these cases.

Signed-off-by: Udip Pant <udippant@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200825232003.2877030-2-udippant@fb.com
2020-08-26 12:47:56 -07:00
..
2020-08-03 11:57:03 -07:00
2020-07-26 15:42:20 +02:00
2020-08-11 10:59:19 -07:00
2020-08-04 22:22:25 -07:00
2020-08-14 14:26:08 -07:00
2020-08-25 15:41:15 -07:00
\n
2020-08-06 19:29:51 -07:00
2020-08-04 14:20:26 -07:00
2020-08-04 14:20:26 -07:00
2020-06-03 13:06:42 -07:00
2020-08-12 10:57:59 -07:00
2020-08-10 19:07:44 -07:00
2020-07-28 13:18:01 +02:00
2020-08-12 10:58:02 -07:00
2020-01-08 16:32:55 +00:00
2020-08-07 18:29:15 -07:00
2020-08-14 11:07:02 -07:00
2020-07-23 17:34:18 +10:00
2020-08-04 15:02:07 -07:00
2020-07-01 12:09:13 +03:00
2020-07-27 14:31:12 -04:00
2020-08-04 13:40:35 -07:00
2019-12-04 15:18:39 +01:00
2019-12-18 18:07:31 +01:00
2020-08-12 10:57:59 -07:00
2020-05-09 13:57:12 +02:00
2020-06-04 19:06:24 -07:00
2020-07-07 11:58:59 -05:00
2020-05-09 13:57:12 +02:00