linux/include
Eduard Zingerman bb124da69c bpf: keep track of max number of bpf_loop callback iterations
In some cases verifier can't infer convergence of the bpf_loop()
iteration. E.g. for the following program:

    static int cb(__u32 idx, struct num_context* ctx)
    {
        ctx->i++;
        return 0;
    }

    SEC("?raw_tp")
    int prog(void *_)
    {
        struct num_context ctx = { .i = 0 };
        __u8 choice_arr[2] = { 0, 1 };

        bpf_loop(2, cb, &ctx, 0);
        return choice_arr[ctx.i];
    }

Each 'cb' simulation would eventually return to 'prog' and reach
'return choice_arr[ctx.i]' statement. At which point ctx.i would be
marked precise, thus forcing verifier to track multitude of separate
states with {.i=0}, {.i=1}, ... at bpf_loop() callback entry.

This commit allows "brute force" handling for such cases by limiting
number of callback body simulations using 'umax' value of the first
bpf_loop() parameter.

For this, extend bpf_func_state with 'callback_depth' field.
Increment this field when callback visiting state is pushed to states
traversal stack. For frame #N it's 'callback_depth' field counts how
many times callback with frame depth N+1 had been executed.
Use bpf_func_state specifically to allow independent tracking of
callback depths when multiple nested bpf_loop() calls are present.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20231121020701.26440-11-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-11-20 18:36:40 -08:00
..
acpi Merge branch 'acpi-bus' 2023-10-26 15:04:49 +02:00
asm-generic Kbuild updates for v6.7 2023-11-04 08:07:19 -10:00
clocksource
crypto crypto: FIPS 202 SHA-3 register in hash info for IMA 2023-10-27 18:04:30 +08:00
drm drm next and fixes for 6.7-rc1 2023-11-07 17:10:02 -08:00
dt-bindings linux-watchdog 6.7-rc1 tag 2023-11-09 13:54:25 -08:00
keys
kunit
kvm KVM/arm64 updates for 6.7 2023-10-31 16:37:07 -04:00
linux bpf: keep track of max number of bpf_loop callback iterations 2023-11-20 18:36:40 -08:00
math-emu
media media: Add MIPI CSI-2 generic long packet type definition 2023-10-07 10:55:48 +02:00
memory
misc
net bpf, netkit: Add indirect call wrapper for fetching peer dev 2023-11-20 10:15:16 -08:00
pcmcia
ras
rdma
rv
scsi SCSI misc on 20231102 2023-11-02 15:13:50 -10:00
soc IOMMU Updates for Linux v6.7 2023-11-09 13:37:28 -08:00
sound ASoC: Updates for v6.7 2023-10-31 09:01:25 +01:00
target scsi: target: core: Unexport target_queue_submission() 2023-10-13 15:53:58 -04:00
trace rxrpc: Fix RTT determination to use any ACK as a source 2023-11-17 02:50:33 +00:00
uapi vhost,virtio,vdpa,firmware: bugfixes 2023-11-16 07:39:37 -05:00
ufs scsi: ufs: core: Add support for parsing OPP 2023-10-16 20:59:21 -04:00
vdso
video fbdev: stifb: Make the STI next font pointer a 32-bit signed offset 2023-10-30 14:54:41 +01:00
xen xen/events: reduce externally visible helper functions 2023-11-14 09:29:28 +01:00