Skip to content

Conversation

@pbobyn91
Copy link

No description provided.

@pbobyn91 pbobyn91 closed this Jan 31, 2018
@pbobyn91 pbobyn91 deleted the Beowulf branch January 31, 2018 01:09
fengguang pushed a commit to 0day-ci/linux that referenced this pull request Jun 13, 2020
We forgot one call site directly using drm->dev_private.
This leads to a crash like this:

8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
ruscur pushed a commit to ruscur/linux that referenced this pull request Jun 17, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
fifteenhex pushed a commit to fifteenhex/linux that referenced this pull request Jul 25, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
fifteenhex pushed a commit to fifteenhex/linux that referenced this pull request Jul 28, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
fifteenhex pushed a commit to fifteenhex/linux that referenced this pull request Jul 28, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
fifteenhex pushed a commit to fifteenhex/linux that referenced this pull request Jul 29, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
fifteenhex pushed a commit to fifteenhex/linux that referenced this pull request Aug 1, 2020
Unable to handle kernel NULL pointer dereference at virtual address 00000918
pgd = (ptrval)
[00000918] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.7.0-15001-gfa384b50b96b-dirty torvalds#514
Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
PC is at mcde_display_enable+0x78/0x7c0
LR is at mcde_display_enable+0x78/0x7c0

Fix this by using to_mcde() as in other functions.

Fixes: fd7ee85 ("drm/mcde: Don't use drm_device->dev_private")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20200613223027.4189309-2-linus.walleij@linaro.org
jiangenj pushed a commit to jiangenj/linux that referenced this pull request Apr 25, 2025
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 14, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 15, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 20, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 21, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 21, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 21, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 27, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 27, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 27, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 27, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 27, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 28, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this pull request Oct 29, 2025
smbdirect_public.h contains functions which will be still be
eported when we move to an smbdirect.ko.

For now this uses the SMBDIRECT_USE_INLINE_C_FILES code path
and marks all function as '__maybe_unused static',
but this will make further changes easier.

Note this generates the following things from checkpatch.pl,
so I passed --ignore=FILE_PATH_CHANGES,EXPORT_SYMBOL,COMPLEX_MACRO

 ERROR: Macros with complex values should be enclosed in parentheses
 torvalds#514: FILE: fs/smb/common/smbdirect/smbdirect_public.h:18:
 +#define __SMBDIRECT_PUBLIC__ __maybe_unused static

 WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
 torvalds#515: FILE: fs/smb/common/smbdirect/smbdirect_public.h:19:
 +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym)

 WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
 torvalds#518: FILE: fs/smb/common/smbdirect/smbdirect_public.h:22:
 +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym) EXPORT_SYMBOL_FOR_MODULES(__sym, "cifs,ksmbd")

This is exactly what we want here, so we should ignore the
checkpatch.pl problems.

Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Oct 30, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 3, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 5, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 5, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 7, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 15, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 16, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 20, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 22, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 23, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 23, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 23, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 25, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
guidosarducci added a commit to guidosarducci/linux that referenced this pull request Nov 26, 2025
Use bpf_user_pt_regs_t for perf ctx arg to avoid below failures. This type
previously added because "long" type in struct pt_regs on 32-bit arm evals
to wrong size in 64-bit BPF VM, resulting in errors like:

run_subtest:PASS:obj_open_mem 0 nsec
libbpf: prog 'arg_tag_ctx_perf': BPF program load failed: -EINVAL
libbpf: prog 'arg_tag_ctx_perf': failed to load: -EINVAL
libbpf: failed to load object 'verifier_global_subprogs'
run_subtest:FAIL:unexpected_load_failure unexpected error: -22 (errno 22)
VERIFIER LOG:
=============
func#0 @0
func#1 @15
func#2 @21
func#3 @23
func#4 @25
Live regs before insn:
      0: .12345.... (bf) r6 = r1
      1: .123456... (85) call pc+13
      2: 0.23456... (bc) w7 = w0
      3: ..234567.. (bf) r1 = r6
      4: .1234567.. (85) call pc+16
      5: 0.234567.. (bc) w8 = w0
      6: ..2345678. (0c) w8 += w7
      7: ..23456.8. (bf) r1 = r6
      8: .123456.8. (85) call pc+14
      9: 0.23456.8. (0c) w8 += w0
     10: ..23456.8. (bf) r1 = r6
     11: .12345..8. (85) call pc+13
     12: 0.......8. (0c) w8 += w0
     13: ........8. (bc) w0 = w8
     14: 0......... (95) exit
     15: .1........ (18) r2 = 0xdfc7d008
     17: .12....... (b4) w3 = 1024
     18: .123...... (b7) r4 = 0
     19: .1234..... (85) call bpf_get_stack#67
     20: 0......... (95) exit
     21: .......... (b4) w0 = 0
     22: 0......... (95) exit
     23: .......... (b4) w0 = 0
     24: 0......... (95) exit
     25: .......... (b4) w0 = 0
     26: 0......... (95) exit
arg#0 reference type('UNKNOWN ') size cannot be determined: -22
0: R1=ctx() R10=fp0
; int arg_tag_ctx_perf(void *ctx) @ verifier_global_subprogs.c:271
0: (bf) r6 = r1                       ; R1=ctx() R6=ctx()
; return subprog_ctx_tag(ctx) + @ verifier_global_subprogs.c:273
1: (85) call pc+13
Func#1 ('subprog_ctx_tag') is global and assumed valid.
2: R0=scalar()
2: (bc) w7 = w0                       ; R0=scalar() R7=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
; perf_subprog_regs(ctx) + @ verifier_global_subprogs.c:274
3: (bf) r1 = r6                       ; R1=ctx() R6=ctx()
4: (85) call pc+16
arg#0 should be `struct bpf_perf_event_data *`
Caller passes invalid args into func#2 ('perf_subprog_regs')
processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
=============
torvalds#514/14  verifier_global_subprogs/arg_tag_ctx_perf:FAIL

Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant