-
Notifications
You must be signed in to change notification settings - Fork 130
bpf: cpumap: remove rcpu pointer from cpu_map_build_skb signature #123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Master branch: ba5f4cf Pull request is NOT updated. Failed to apply https://patchwork.ozlabs.org/project/netdev/list/?series=204573, error message: |
Master branch: ba5f4cf |
508579c
to
9603aa6
Compare
Master branch: 1fd17c8 |
9603aa6
to
ad26045
Compare
Get rid of bpf_cpu_map_entry pointer in cpu_map_build_skb routine signature since it is no longer needed Signed-off-by: Lorenzo Bianconi <[email protected]>
Master branch: 09d8ad1 |
ad26045
to
0a5fcbe
Compare
At least one diff in series https://patchwork.ozlabs.org/project/netdev/list/?series=204573 irrelevant now. Closing PR. |
We got issue as follows when run syzkaller: [ 167.936972] EXT4-fs error (device loop0): __ext4_remount:6314: comm rep: Abort forced by user [ 167.938306] EXT4-fs (loop0): Remounting filesystem read-only [ 167.981637] Assertion failure in ext4_getblk() at fs/ext4/inode.c:847: '(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) || handle != NULL || create == 0' [ 167.983601] ------------[ cut here ]------------ [ 167.984245] kernel BUG at fs/ext4/inode.c:847! [ 167.984882] invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI [ 167.985624] CPU: 7 PID: 2290 Comm: rep Tainted: G B 5.16.0-rc5-next-20211217+ #123 [ 167.986823] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190727_073836-buildvm-ppc64le-16.ppc.fedoraproject.org-3.fc31 04/01/2014 [ 167.988590] RIP: 0010:ext4_getblk+0x17e/0x504 [ 167.989189] Code: c6 01 74 28 49 c7 c0 a0 a3 5c 9b b9 4f 03 00 00 48 c7 c2 80 9c 5c 9b 48 c7 c6 40 b6 5c 9b 48 c7 c7 20 a4 5c 9b e8 77 e3 fd ff <0f> 0b 8b 04 244 [ 167.991679] RSP: 0018:ffff8881736f7398 EFLAGS: 00010282 [ 167.992385] RAX: 0000000000000094 RBX: 1ffff1102e6dee75 RCX: 0000000000000000 [ 167.993337] RDX: 0000000000000001 RSI: ffffffff9b6e29e0 RDI: ffffed102e6dee66 [ 167.994292] RBP: ffff88816a076210 R08: 0000000000000094 R09: ffffed107363fa09 [ 167.995252] R10: ffff88839b1fd047 R11: ffffed107363fa08 R12: ffff88816a0761e8 [ 167.996205] R13: 0000000000000000 R14: 0000000000000021 R15: 0000000000000001 [ 167.997158] FS: 00007f6a1428c740(0000) GS:ffff88839b000000(0000) knlGS:0000000000000000 [ 167.998238] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 167.999025] CR2: 00007f6a140716c8 CR3: 0000000133216000 CR4: 00000000000006e0 [ 167.999987] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 168.000944] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 168.001899] Call Trace: [ 168.002235] <TASK> [ 168.007167] ext4_bread+0xd/0x53 [ 168.007612] ext4_quota_write+0x20c/0x5c0 [ 168.010457] write_blk+0x100/0x220 [ 168.010944] remove_free_dqentry+0x1c6/0x440 [ 168.011525] free_dqentry.isra.0+0x565/0x830 [ 168.012133] remove_tree+0x318/0x6d0 [ 168.014744] remove_tree+0x1eb/0x6d0 [ 168.017346] remove_tree+0x1eb/0x6d0 [ 168.019969] remove_tree+0x1eb/0x6d0 [ 168.022128] qtree_release_dquot+0x291/0x340 [ 168.023297] v2_release_dquot+0xce/0x120 [ 168.023847] dquot_release+0x197/0x3e0 [ 168.024358] ext4_release_dquot+0x22a/0x2d0 [ 168.024932] dqput.part.0+0x1c9/0x900 [ 168.025430] __dquot_drop+0x120/0x190 [ 168.025942] ext4_clear_inode+0x86/0x220 [ 168.026472] ext4_evict_inode+0x9e8/0xa22 [ 168.028200] evict+0x29e/0x4f0 [ 168.028625] dispose_list+0x102/0x1f0 [ 168.029148] evict_inodes+0x2c1/0x3e0 [ 168.030188] generic_shutdown_super+0xa4/0x3b0 [ 168.030817] kill_block_super+0x95/0xd0 [ 168.031360] deactivate_locked_super+0x85/0xd0 [ 168.031977] cleanup_mnt+0x2bc/0x480 [ 168.033062] task_work_run+0xd1/0x170 [ 168.033565] do_exit+0xa4f/0x2b50 [ 168.037155] do_group_exit+0xef/0x2d0 [ 168.037666] __x64_sys_exit_group+0x3a/0x50 [ 168.038237] do_syscall_64+0x3b/0x90 [ 168.038751] entry_SYSCALL_64_after_hwframe+0x44/0xae In order to reproduce this problem, the following conditions need to be met: 1. Ext4 filesystem with no journal; 2. Filesystem image with incorrect quota data; 3. Abort filesystem forced by user; 4. umount filesystem; As in ext4_quota_write: ... if (EXT4_SB(sb)->s_journal && !handle) { ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" " cancelled because transaction is not started", (unsigned long long)off, (unsigned long long)len); return -EIO; } ... We only check handle if NULL when filesystem has journal. There is need check handle if NULL even when filesystem has no journal. Signed-off-by: Ye Bin <[email protected]> Reviewed-by: Jan Kara <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Theodore Ts'o <[email protected]> Cc: [email protected]
Like commit 1cf3bfc ("bpf: Support 64-bit pointers to kfuncs") for s390x, add support for 64-bit pointers to kfuncs for LoongArch. Since the infrastructure is already implemented in BPF core, the only thing need to be done is to override bpf_jit_supports_far_kfunc_call(). Before this change, several test_verifier tests failed: # ./test_verifier | grep # | grep FAIL #119/p calls: invalid kfunc call: ptr_to_mem to struct with non-scalar FAIL #120/p calls: invalid kfunc call: ptr_to_mem to struct with nesting depth > 4 FAIL #121/p calls: invalid kfunc call: ptr_to_mem to struct with FAM FAIL #122/p calls: invalid kfunc call: reg->type != PTR_TO_CTX FAIL #123/p calls: invalid kfunc call: void * not allowed in func proto without mem size arg FAIL #124/p calls: trigger reg2btf_ids[reg->type] for reg->type > __BPF_REG_TYPE_MAX FAIL #125/p calls: invalid kfunc call: reg->off must be zero when passed to release kfunc FAIL #126/p calls: invalid kfunc call: don't match first member type when passed to release kfunc FAIL #127/p calls: invalid kfunc call: PTR_TO_BTF_ID with negative offset FAIL #128/p calls: invalid kfunc call: PTR_TO_BTF_ID with variable offset FAIL #129/p calls: invalid kfunc call: referenced arg needs refcounted PTR_TO_BTF_ID FAIL #130/p calls: valid kfunc call: referenced arg needs refcounted PTR_TO_BTF_ID FAIL #486/p map_kptr: ref: reference state created and released on xchg FAIL This is because the kfuncs in the loaded module are far away from __bpf_call_base: ffff800002009440 t bpf_kfunc_call_test_fail1 [bpf_testmod] 9000000002e128d8 T __bpf_call_base The offset relative to __bpf_call_base does NOT fit in s32, which breaks the assumption in BPF core. Enable bpf_jit_supports_far_kfunc_call() lifts this limit. Note that to reproduce the above result, tools/testing/selftests/bpf/config should be applied, and run the test with JIT enabled, unpriv BPF enabled. With this change, the test_verifier tests now all passed: # ./test_verifier ... Summary: 777 PASSED, 0 SKIPPED, 0 FAILED Tested-by: Tiezhu Yang <[email protected]> Signed-off-by: Hengqi Chen <[email protected]> Signed-off-by: Huacai Chen <[email protected]>
I hit the following failure when running selftests with internal backported upstream kernel: test_ksyms:PASS:kallsyms_fopen 0 nsec test_ksyms:FAIL:ksym_find symbol 'bpf_link_fops' not found #123 ksyms:FAIL In /proc/kallsyms, we have $ cat /proc/kallsyms | grep bpf_link_fops ffffffff829f0cb0 d bpf_link_fops.llvm.12608678492448798416 The CONFIG_LTO_CLANG_THIN is enabled in the kernel which is responsible for bpf_link_fops.llvm.12608678492448798416 symbol name. In prog_tests/ksyms.c we have kallsyms_find("bpf_link_fops", &link_fops_addr) and kallsyms_find() compares "bpf_link_fops" with symbols in /proc/kallsyms in order to find the entry. With bpf_link_fops.llvm.<hash> in /proc/kallsyms, the kallsyms_find() failed. To fix the issue, in kallsyms_find(), if a symbol has suffix .llvm.<hash>, that suffix will be ignored for comparison. This fixed the test failure. Signed-off-by: Yonghong Song <[email protected]>
I hit the following failure when running selftests with internal backported upstream kernel: test_ksyms:PASS:kallsyms_fopen 0 nsec test_ksyms:FAIL:ksym_find symbol 'bpf_link_fops' not found #123 ksyms:FAIL In /proc/kallsyms, we have $ cat /proc/kallsyms | grep bpf_link_fops ffffffff829f0cb0 d bpf_link_fops.llvm.12608678492448798416 The CONFIG_LTO_CLANG_THIN is enabled in the kernel which is responsible for bpf_link_fops.llvm.12608678492448798416 symbol name. In prog_tests/ksyms.c we have kallsyms_find("bpf_link_fops", &link_fops_addr) and kallsyms_find() compares "bpf_link_fops" with symbols in /proc/kallsyms in order to find the entry. With bpf_link_fops.llvm.<hash> in /proc/kallsyms, the kallsyms_find() failed. To fix the issue, in kallsyms_find(), if a symbol has suffix .llvm.<hash>, that suffix will be ignored for comparison. This fixed the test failure. Signed-off-by: Yonghong Song <[email protected]>
I hit the following failure when running selftests with internal backported upstream kernel: test_ksyms:PASS:kallsyms_fopen 0 nsec test_ksyms:FAIL:ksym_find symbol 'bpf_link_fops' not found #123 ksyms:FAIL In /proc/kallsyms, we have $ cat /proc/kallsyms | grep bpf_link_fops ffffffff829f0cb0 d bpf_link_fops.llvm.12608678492448798416 The CONFIG_LTO_CLANG_THIN is enabled in the kernel which is responsible for bpf_link_fops.llvm.12608678492448798416 symbol name. In prog_tests/ksyms.c we have kallsyms_find("bpf_link_fops", &link_fops_addr) and kallsyms_find() compares "bpf_link_fops" with symbols in /proc/kallsyms in order to find the entry. With bpf_link_fops.llvm.<hash> in /proc/kallsyms, the kallsyms_find() failed. To fix the issue, in kallsyms_find(), if a symbol has suffix .llvm.<hash>, that suffix will be ignored for comparison. This fixed the test failure. Signed-off-by: Yonghong Song <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Acked-by: Eduard Zingerman <[email protected]>
Include tests that check for rejection in erroneous cases, like unbalanced IRQ-disabled counts, within and across subprogs, invalid IRQ flag state or input to kfuncs, behavior upon overwriting IRQ saved state on stack, interaction with sleepable kfuncs/helpers, global functions, and out of order restore. Include some success scenarios as well to demonstrate usage. #123/1 irq/irq_restore_missing_1:OK #123/2 irq/irq_restore_missing_2:OK #123/3 irq/irq_restore_missing_3:OK #123/4 irq/irq_restore_missing_3_minus_2:OK #123/5 irq/irq_restore_missing_1_subprog:OK #123/6 irq/irq_restore_missing_2_subprog:OK #123/7 irq/irq_restore_missing_3_subprog:OK #123/8 irq/irq_restore_missing_3_minus_2_subprog:OK #123/9 irq/irq_balance:OK #123/10 irq/irq_balance_n:OK #123/11 irq/irq_balance_subprog:OK #123/12 irq/irq_balance_n_subprog:OK #123/13 irq/irq_global_subprog:OK #123/14 irq/irq_restore_ooo:OK #123/15 irq/irq_restore_ooo_3:OK #123/16 irq/irq_restore_3_subprog:OK #123/17 irq/irq_restore_4_subprog:OK #123/18 irq/irq_restore_ooo_3_subprog:OK #123/19 irq/irq_restore_invalid:OK #123/20 irq/irq_save_invalid:OK #123/21 irq/irq_restore_iter:OK #123/22 irq/irq_save_iter:OK #123/23 irq/irq_flag_overwrite:OK #123/24 irq/irq_flag_overwrite_partial:OK #123/25 irq/irq_sleepable_helper:OK #123/26 irq/irq_sleepable_kfunc:OK #123 irq:OK Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Acked-by: Eduard Zingerman <[email protected]>
When trying to insert a 10MB kernel module kept in a virtio-fs with cache disabled, the following warning was reported: ------------[ cut here ]------------ WARNING: CPU: 1 PID: 404 at mm/page_alloc.c:4551 ...... Modules linked in: CPU: 1 PID: 404 Comm: insmod Not tainted 6.9.0-rc5+ kernel-patches#123 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) ...... RIP: 0010:__alloc_pages+0x2bf/0x380 ...... Call Trace: <TASK> ? __warn+0x8e/0x150 ? __alloc_pages+0x2bf/0x380 __kmalloc_large_node+0x86/0x160 __kmalloc+0x33c/0x480 virtio_fs_enqueue_req+0x240/0x6d0 virtio_fs_wake_pending_and_unlock+0x7f/0x190 queue_request_and_unlock+0x55/0x60 fuse_simple_request+0x152/0x2b0 fuse_direct_io+0x5d2/0x8c0 fuse_file_read_iter+0x121/0x160 __kernel_read+0x151/0x2d0 kernel_read+0x45/0x50 kernel_read_file+0x1a9/0x2a0 init_module_from_file+0x6a/0xe0 idempotent_init_module+0x175/0x230 __x64_sys_finit_module+0x5d/0xb0 x64_sys_call+0x1c3/0x9e0 do_syscall_64+0x3d/0xc0 entry_SYSCALL_64_after_hwframe+0x4b/0x53 ...... </TASK> ---[ end trace 0000000000000000 ]--- The warning is triggered as follows: 1) syscall finit_module() handles the module insertion and it invokes kernel_read_file() to read the content of the module first. 2) kernel_read_file() allocates a 10MB buffer by using vmalloc() and passes it to kernel_read(). kernel_read() constructs a kvec iter by using iov_iter_kvec() and passes it to fuse_file_read_iter(). 3) virtio-fs disables the cache, so fuse_file_read_iter() invokes fuse_direct_io(). As for now, the maximal read size for kvec iter is only limited by fc->max_read. For virtio-fs, max_read is UINT_MAX, so fuse_direct_io() doesn't split the 10MB buffer. It saves the address and the size of the 10MB-sized buffer in out_args[0] of a fuse request and passes the fuse request to virtio_fs_wake_pending_and_unlock(). 4) virtio_fs_wake_pending_and_unlock() uses virtio_fs_enqueue_req() to queue the request. Because virtiofs need DMA-able address, so virtio_fs_enqueue_req() uses kmalloc() to allocate a bounce buffer for all fuse args, copies these args into the bounce buffer and passed the physical address of the bounce buffer to virtiofsd. The total length of these fuse args for the passed fuse request is about 10MB, so copy_args_to_argbuf() invokes kmalloc() with a 10MB size parameter and it triggers the warning in __alloc_pages(): if (WARN_ON_ONCE_GFP(order > MAX_PAGE_ORDER, gfp)) return NULL; 5) virtio_fs_enqueue_req() will retry the memory allocation in a kworker, but it won't help, because kmalloc() will always return NULL due to the abnormal size and finit_module() will hang forever. A feasible solution is to limit the value of max_read for virtio-fs, so the length passed to kmalloc() will be limited. However it will affect the maximal read size for normal read. And for virtio-fs write initiated from kernel, it has the similar problem but now there is no way to limit fc->max_write in kernel. So instead of limiting both the values of max_read and max_write in kernel, introducing use_pages_for_kvec_io in fuse_conn and setting it as true in virtiofs. When use_pages_for_kvec_io is enabled, fuse will use pages instead of pointer to pass the KVEC_IO data. After switching to pages for KVEC_IO data, these pages will be used for DMA through virtio-fs. If these pages are backed by vmalloc(), {flush|invalidate}_kernel_vmap_range() are necessary to flush or invalidate the cache before the DMA operation. So add two new fields in fuse_args_pages to record the base address of vmalloc area and the condition indicating whether invalidation is needed. Perform the flush in fuse_get_user_pages() for write operations and the invalidation in fuse_release_user_pages() for read operations. It may seem necessary to introduce another field in fuse_conn to indicate that these KVEC_IO pages are used for DMA, However, considering that virtio-fs is currently the only user of use_pages_for_kvec_io, just reuse use_pages_for_kvec_io to indicate that these pages will be used for DMA. Fixes: a62a8ef ("virtio-fs: add virtiofs filesystem") Signed-off-by: Hou Tao <[email protected]> Tested-by: Jingbo Xu <[email protected]> Signed-off-by: Miklos Szeredi <[email protected]>
Pull request for series with
subject: bpf: cpumap: remove rcpu pointer from cpu_map_build_skb signature
version: 1
url: https://patchwork.ozlabs.org/project/netdev/list/?series=204573