mailweb.openeuler.org
Manage this list

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Kernel

Threads by month
  • ----- 2025 -----
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
kernel@openeuler.org

  • 56 participants
  • 18793 discussions
[PATCH OLK-6.6] VMCI: Fix use-after-free when removing resource in vmci_resource_remove()
by Zhang Kunbo 26 Sep '24

26 Sep '24
From: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com> stable inclusion from stable-v6.6.51 commit 39e7e593418ccdbd151f2925fa6be1a616d16c96 category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/IARY1L CVE: CVE-2024-46738 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id… -------------------------------- commit 48b9a8dabcc3cf5f961b2ebcd8933bf9204babb7 upstream. When removing a resource from vmci_resource_table in vmci_resource_remove(), the search is performed using the resource handle by comparing context and resource fields. It is possible though to create two resources with different types but same handle (same context and resource fields). When trying to remove one of the resources, vmci_resource_remove() may not remove the intended one, but the object will still be freed as in the case of the datagram type in vmci_datagram_destroy_handle(). vmci_resource_table will still hold a pointer to this freed resource leading to a use-after-free vulnerability. BUG: KASAN: use-after-free in vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline] BUG: KASAN: use-after-free in vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147 Read of size 4 at addr ffff88801c16d800 by task syz-executor197/1592 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x82/0xa9 lib/dump_stack.c:106 print_address_description.constprop.0+0x21/0x366 mm/kasan/report.c:239 __kasan_report.cold+0x7f/0x132 mm/kasan/report.c:425 kasan_report+0x38/0x51 mm/kasan/report.c:442 vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline] vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147 vmci_qp_broker_detach+0x89a/0x11b9 drivers/misc/vmw_vmci/vmci_queue_pair.c:2182 ctx_free_ctx+0x473/0xbe1 drivers/misc/vmw_vmci/vmci_context.c:444 kref_put include/linux/kref.h:65 [inline] vmci_ctx_put drivers/misc/vmw_vmci/vmci_context.c:497 [inline] vmci_ctx_destroy+0x170/0x1d6 drivers/misc/vmw_vmci/vmci_context.c:195 vmci_host_close+0x125/0x1ac drivers/misc/vmw_vmci/vmci_host.c:143 __fput+0x261/0xa34 fs/file_table.c:282 task_work_run+0xf0/0x194 kernel/task_work.c:164 tracehook_notify_resume include/linux/tracehook.h:189 [inline] exit_to_user_mode_loop+0x184/0x189 kernel/entry/common.c:187 exit_to_user_mode_prepare+0x11b/0x123 kernel/entry/common.c:220 __syscall_exit_to_user_mode_work kernel/entry/common.c:302 [inline] syscall_exit_to_user_mode+0x18/0x42 kernel/entry/common.c:313 do_syscall_64+0x41/0x85 arch/x86/entry/common.c:86 entry_SYSCALL_64_after_hwframe+0x6e/0x0 This change ensures the type is also checked when removing the resource from vmci_resource_table in vmci_resource_remove(). Fixes: bc63dedb7d46 ("VMCI: resource object implementation.") Cc: stable(a)vger.kernel.org Reported-by: George Kennedy <george.kennedy(a)oracle.com> Signed-off-by: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com> Link: https://lore.kernel.org/r/20240828154338.754746-1-david.fernandez.gonzalez@… Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> Signed-off-by: Zhang Kunbo <zhangkunbo(a)huawei.com> --- drivers/misc/vmw_vmci/vmci_resource.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/misc/vmw_vmci/vmci_resource.c b/drivers/misc/vmw_vmci/vmci_resource.c index 692daa9eff34..19c9d2cdd277 100644 --- a/drivers/misc/vmw_vmci/vmci_resource.c +++ b/drivers/misc/vmw_vmci/vmci_resource.c @@ -144,7 +144,8 @@ void vmci_resource_remove(struct vmci_resource *resource) spin_lock(&vmci_resource_table.lock); hlist_for_each_entry(r, &vmci_resource_table.entries[idx], node) { - if (vmci_handle_is_equal(r->handle, resource->handle)) { + if (vmci_handle_is_equal(r->handle, resource->handle) && + resource->type == r->type) { hlist_del_init_rcu(&r->node); break; } -- 2.34.1
2 1
0 0
[PATCH OLK-6.6] char: xillybus: Check USB endpoints when probing device
by Ye Bin 26 Sep '24

26 Sep '24
From: Eli Billauer <eli.billauer(a)gmail.com> stable inclusion from stable-v6.6.48 commit 5cff754692ad45d5086b75fef8cc3a99c30a1005 category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAQOJN CVE: CVE-2024-45011 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id… -------------------------------- commit 2374bf7558de915edc6ec8cb10ec3291dfab9594 upstream. Ensure, as the driver probes the device, that all endpoints that the driver may attempt to access exist and are of the correct type. All XillyUSB devices must have a Bulk IN and Bulk OUT endpoint at address 1. This is verified in xillyusb_setup_base_eps(). On top of that, a XillyUSB device may have additional Bulk OUT endpoints. The information about these endpoints' addresses is deduced from a data structure (the IDT) that the driver fetches from the device while probing it. These endpoints are checked in setup_channels(). A XillyUSB device never has more than one IN endpoint, as all data towards the host is multiplexed in this single Bulk IN endpoint. This is why setup_channels() only checks OUT endpoints. Reported-by: syzbot+eac39cba052f2e750dbe(a)syzkaller.appspotmail.com Cc: stable <stable(a)kernel.org> Closes: https://lore.kernel.org/all/0000000000001d44a6061f7a54ee@google.com/T/ Fixes: a53d1202aef1 ("char: xillybus: Add driver for XillyUSB (Xillybus variant for USB)"). Signed-off-by: Eli Billauer <eli.billauer(a)gmail.com> Link: https://lore.kernel.org/r/20240816070200.50695-2-eli.billauer@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> Signed-off-by: ZhangPeng <zhangpeng362(a)huawei.com> Signed-off-by: Ye Bin <yebin10(a)huawei.com> --- drivers/char/xillybus/xillyusb.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xillyusb.c index 5a5afa14ca8c..613c366a2df6 100644 --- a/drivers/char/xillybus/xillyusb.c +++ b/drivers/char/xillybus/xillyusb.c @@ -1906,6 +1906,13 @@ static const struct file_operations xillyusb_fops = { static int xillyusb_setup_base_eps(struct xillyusb_dev *xdev) { + struct usb_device *udev = xdev->udev; + + /* Verify that device has the two fundamental bulk in/out endpoints */ + if (usb_pipe_type_check(udev, usb_sndbulkpipe(udev, MSG_EP_NUM)) || + usb_pipe_type_check(udev, usb_rcvbulkpipe(udev, IN_EP_NUM))) + return -ENODEV; + xdev->msg_ep = endpoint_alloc(xdev, MSG_EP_NUM | USB_DIR_OUT, bulk_out_work, 1, 2); if (!xdev->msg_ep) @@ -1935,14 +1942,15 @@ static int setup_channels(struct xillyusb_dev *xdev, __le16 *chandesc, int num_channels) { - struct xillyusb_channel *chan; + struct usb_device *udev = xdev->udev; + struct xillyusb_channel *chan, *new_channels; int i; chan = kcalloc(num_channels, sizeof(*chan), GFP_KERNEL); if (!chan) return -ENOMEM; - xdev->channels = chan; + new_channels = chan; for (i = 0; i < num_channels; i++, chan++) { unsigned int in_desc = le16_to_cpu(*chandesc++); @@ -1971,6 +1979,15 @@ static int setup_channels(struct xillyusb_dev *xdev, */ if ((out_desc & 0x80) && i < 14) { /* Entry is valid */ + if (usb_pipe_type_check(udev, + usb_sndbulkpipe(udev, i + 2))) { + dev_err(xdev->dev, + "Missing BULK OUT endpoint %d\n", + i + 2); + kfree(new_channels); + return -ENODEV; + } + chan->writable = 1; chan->out_synchronous = !!(out_desc & 0x40); chan->out_seekable = !!(out_desc & 0x20); @@ -1980,6 +1997,7 @@ static int setup_channels(struct xillyusb_dev *xdev, } } + xdev->channels = new_channels; return 0; } -- 2.34.1
2 1
0 0
[openeuler:OLK-6.6 8439/14122] cpu.c:undefined reference to `trace_event_buffer_commit'
by kernel test robot 26 Sep '24

26 Sep '24
tree: https://gitee.com/openeuler/kernel.git OLK-6.6 head: 81a41d2ac1de43215c014bc71d907a026042e55b commit: 4c7a7e37c75ec2611be134d953ae976bc25c793b [8439/14122] LoongArch: Change __my_cpu_offset definition to avoid mis-optimization config: loongarch-randconfig-002-20240925 (https://download.01.org/0day-ci/archive/20240926/202409261955.pho8kSov-lkp@…) compiler: loongarch64-linux-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240926/202409261955.pho8kSov-lkp@…) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp(a)intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202409261955.pho8kSov-lkp@intel.com/ All errors (new ones prefixed by >>): loongarch64-linux-ld: warning: orphan section `_ftrace_events' from `sound/core/pcm_lib.o' being placed in section `_ftrace_events' loongarch64-linux-ld: warning: orphan section `_ftrace_events' from `lib/maple_tree.o' being placed in section `_ftrace_events' loongarch64-linux-ld: init/main.o: in function `.L199': main.c:(.text+0x1f0): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: main.c:(.text+0x22c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: init/main.o: in function `perf_trace_initcall_start': main.c:(.text+0x364): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: main.c:(.text+0x38c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: init/main.o: in function `perf_trace_initcall_finish': main.c:(.text+0x44c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: main.c:(.text+0x478): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_start': main.c:(.text+0x550): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: main.c:(.text+0x560): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: init/main.o: in function `.L240': main.c:(.text+0x5a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_finish': main.c:(.text+0x620): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: main.c:(.text+0x634): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: init/main.o: in function `.L251': main.c:(.text+0x688): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: init/main.o: in function `.L247': main.c:(.text+0x6bc): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_level': main.c:(.text+0x714): undefined reference to `trace_event_printf' loongarch64-linux-ld: main.c:(.text+0x734): undefined reference to `trace_handle_return' loongarch64-linux-ld: main.c:(.text+0x75c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_start': main.c:(.text+0x7b0): undefined reference to `trace_event_printf' loongarch64-linux-ld: main.c:(.text+0x7d0): undefined reference to `trace_handle_return' loongarch64-linux-ld: main.c:(.text+0x7fc): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: init/main.o: in function `trace_raw_output_initcall_finish': main.c:(.text+0x854): undefined reference to `trace_event_printf' loongarch64-linux-ld: main.c:(.text+0x874): undefined reference to `trace_handle_return' loongarch64-linux-ld: init/main.o: in function `trace_event_raw_event_initcall_level': main.c:(.text+0x8f8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: main.c:(.text+0x914): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: init/main.o: in function `.L312': main.c:(.text+0x97c): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: init/main.o: in function `.L299': main.c:(.text+0x9c8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: init/main.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: init/main.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: init/main.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: init/main.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: init/main.o:(.ref.data+0xa8): undefined reference to `trace_event_reg' loongarch64-linux-ld: init/main.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/fork.o: in function `perf_trace_task_newtask': fork.c:(.text+0x168): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/fork.o: in function `.L34': fork.c:(.text+0x1bc): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/fork.o: in function `.L33': fork.c:(.text+0x238): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/fork.o: in function `trace_event_raw_event_task_newtask': fork.c:(.text+0x2f4): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/fork.o: in function `.L39': fork.c:(.text+0x32c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/fork.o: in function `.L35': fork.c:(.text+0x36c): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/fork.o: in function `.L36': fork.c:(.text+0x3a4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/fork.o: in function `trace_raw_output_task_newtask': fork.c:(.text+0x3fc): undefined reference to `trace_event_printf' loongarch64-linux-ld: fork.c:(.text+0x41c): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/fork.o: in function `.L52': fork.c:(.text+0x444): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/fork.o: in function `trace_raw_output_task_rename': fork.c:(.text+0x49c): undefined reference to `trace_event_printf' loongarch64-linux-ld: fork.c:(.text+0x4bc): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/fork.o: in function `.L58': fork.c:(.text+0x520): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/fork.o: in function `perf_trace_task_rename': fork.c:(.text+0x580): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/fork.o: in function `.L59': fork.c:(.text+0x5f8): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/fork.o: in function `.L70': fork.c:(.text+0x6b8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/fork.o: in function `trace_event_raw_event_task_rename': fork.c:(.text+0x6fc): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/fork.o: in function `.L77': fork.c:(.text+0x748): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/fork.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_enter': cpu.c:(.text+0x2cc): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cpu.o: in function `.L35': cpu.c:(.text+0x300): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_multi_enter': cpu.c:(.text+0x3dc): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cpu.o: in function `.L47': cpu.c:(.text+0x410): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cpu.o: in function `perf_trace_cpuhp_exit': cpu.c:(.text+0x4fc): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cpu.o: in function `.L59': cpu.c:(.text+0x530): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_enter': cpu.c:(.text+0x628): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cpu.o: in function `.L74': >> cpu.c:(.text+0x644): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cpu.o: in function `.L70': cpu.c:(.text+0x6a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_multi_enter': cpu.c:(.text+0x730): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: cpu.c:(.text+0x74c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cpu.o: in function `.L81': cpu.c:(.text+0x7a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/cpu.o: in function `trace_event_raw_event_cpuhp_exit': cpu.c:(.text+0x830): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: cpu.c:(.text+0x84c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cpu.o: in function `.L92': cpu.c:(.text+0x8a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: cpu.c:(.text+0x8dc): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_enter': cpu.c:(.text+0x93c): undefined reference to `trace_event_printf' loongarch64-linux-ld: cpu.c:(.text+0x95c): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/cpu.o: in function `.L108': >> cpu.c:(.text+0x984): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_multi_enter': cpu.c:(.text+0x9dc): undefined reference to `trace_event_printf' loongarch64-linux-ld: cpu.c:(.text+0x9fc): undefined reference to `trace_handle_return' loongarch64-linux-ld: cpu.c:(.text+0xa24): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cpu.o: in function `trace_raw_output_cpuhp_exit': cpu.c:(.text+0xa7c): undefined reference to `trace_event_printf' loongarch64-linux-ld: cpu.c:(.text+0xa9c): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0xa8): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cpu.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_irq_handler_exit': softirq.c:(.text+0x454): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/softirq.o: in function `.L74': softirq.c:(.text+0x480): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_softirq': softirq.c:(.text+0x544): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/softirq.o: in function `.L86': softirq.c:(.text+0x56c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/softirq.o: in function `perf_trace_tasklet': softirq.c:(.text+0x62c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/softirq.o: in function `.L98': softirq.c:(.text+0x658): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_irq_handler_exit': softirq.c:(.text+0x738): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: softirq.c:(.text+0x74c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/softirq.o: in function `.L109': softirq.c:(.text+0x7a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_softirq': softirq.c:(.text+0x818): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: softirq.c:(.text+0x828): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/softirq.o: in function `.L120': softirq.c:(.text+0x868): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_tasklet': softirq.c:(.text+0x8e0): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: softirq.c:(.text+0x8f4): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/softirq.o: in function `.L131': softirq.c:(.text+0x948): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: softirq.c:(.text+0x97c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_irq_handler_entry': softirq.c:(.text+0x9d8): undefined reference to `trace_event_printf' loongarch64-linux-ld: softirq.c:(.text+0x9f8): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/softirq.o: in function `.L147': softirq.c:(.text+0xa24): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_irq_handler_exit': softirq.c:(.text+0xa50): undefined reference to `trace_event_printf' loongarch64-linux-ld: softirq.c:(.text+0xa70): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/softirq.o: in function `.L153': softirq.c:(.text+0xaf4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_tasklet': softirq.c:(.text+0xb54): undefined reference to `trace_event_printf' loongarch64-linux-ld: softirq.c:(.text+0xb74): undefined reference to `trace_handle_return' loongarch64-linux-ld: softirq.c:(.text+0xb9c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/softirq.o: in function `trace_raw_output_softirq': softirq.c:(.text+0xbf4): undefined reference to `trace_print_symbols_seq' loongarch64-linux-ld: softirq.c:(.text+0xc0c): undefined reference to `trace_event_printf' loongarch64-linux-ld: softirq.c:(.text+0xc2c): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/softirq.o: in function `.L206': softirq.c:(.text+0xff4): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/softirq.o: in function `.L205': softirq.c:(.text+0x1044): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/softirq.o: in function `.L230': softirq.c:(.text+0x11d4): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/softirq.o: in function `.L227': softirq.c:(.text+0x1204): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/softirq.o: in function `trace_event_raw_event_irq_handler_entry': softirq.c:(.text+0x1288): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xa8): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0xf0): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/softirq.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/signal.o: in function `perf_trace_signal_generate': signal.c:(.text+0x260): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/signal.o: in function `.L30': signal.c:(.text+0x2cc): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/signal.o: in function `.L41': signal.c:(.text+0x358): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/signal.o: in function `perf_trace_signal_deliver': signal.c:(.text+0x414): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/signal.o: in function `.L49': signal.c:(.text+0x468): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/signal.o: in function `trace_event_raw_event_signal_generate': signal.c:(.text+0x590): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/signal.o: in function `.L66': signal.c:(.text+0x5e0): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/signal.o: in function `.L62': signal.c:(.text+0x688): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/signal.o: in function `trace_event_raw_event_signal_deliver': signal.c:(.text+0x708): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: signal.c:(.text+0x748): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/signal.o: in function `.L78': signal.c:(.text+0x7e8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/signal.o: in function `.L92': signal.c:(.text+0x81c): undefined reference to `trace_raw_output_prep' -- update.c:(.text+0x630): undefined reference to `trace_event_printf' loongarch64-linux-ld: update.c:(.text+0x650): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/rcu/update.o: in function `.L88': update.c:(.text+0x67c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/rcu/update.o: in function `trace_raw_output_rcu_stall_warning': update.c:(.text+0x6d4): undefined reference to `trace_event_printf' loongarch64-linux-ld: update.c:(.text+0x6f4): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/rcu/update.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L51': swiotlb.c:(.text+0x46c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `trace_raw_output_swiotlb_bounced': swiotlb.c:(.text+0x4a8): undefined reference to `trace_event_printf' loongarch64-linux-ld: swiotlb.c:(.text+0x4c8): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L237': swiotlb.c:(.text+0x11c4): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `perf_trace_swiotlb_bounced': swiotlb.c:(.text+0x1234): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L239': swiotlb.c:(.text+0x1394): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L264': swiotlb.c:(.text+0x13ec): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `trace_event_raw_event_swiotlb_bounced': swiotlb.c:(.text+0x147c): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/dma/swiotlb.o: in function `.L293': swiotlb.c:(.text+0x14e8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/dma/swiotlb.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/dma/swiotlb.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/entry/common.o: in function `.L22': common.c:(.text+0x154): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: common.c:(.text+0x184): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/entry/common.o: in function `perf_trace_sys_enter': common.c:(.text+0x250): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/entry/common.o: in function `.L46': common.c:(.text+0x298): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/entry/common.o: in function `.L33': common.c:(.text+0x318): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/entry/common.o: in function `trace_event_raw_event_sys_enter': common.c:(.text+0x3d8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/entry/common.o: in function `.L51': common.c:(.text+0x404): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/entry/common.o: in function `.L47': common.c:(.text+0x448): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/entry/common.o: in function `trace_event_raw_event_sys_exit': common.c:(.text+0x4c0): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: common.c:(.text+0x4dc): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/entry/common.o: in function `.L58': common.c:(.text+0x528): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: common.c:(.text+0x55c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/entry/common.o: in function `trace_raw_output_sys_enter': common.c:(.text+0x5cc): undefined reference to `trace_event_printf' loongarch64-linux-ld: common.c:(.text+0x5ec): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/entry/common.o: in function `.L74': common.c:(.text+0x614): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/entry/common.o: in function `trace_raw_output_sys_exit': common.c:(.text+0x674): undefined reference to `trace_event_printf' loongarch64-linux-ld: common.c:(.text+0x694): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/entry/common.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o: in function `.L114': timer.c:(.text+0x814): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_class': timer.c:(.text+0x83c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_start': timer.c:(.text+0x914): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: timer.c:(.text+0x958): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L143': timer.c:(.text+0xa2c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_timer_expire_entry': timer.c:(.text+0xa6c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L144': timer.c:(.text+0xb34): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_hrtimer_init': timer.c:(.text+0xb64): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L156': timer.c:(.text+0xc2c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `perf_trace_hrtimer_start': timer.c:(.text+0xc70): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L168': timer.c:(.text+0xd2c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `.L179': timer.c:(.text+0xd64): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L180': timer.c:(.text+0xe24): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: timer.c:(.text+0xe4c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L192': timer.c:(.text+0xf14): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/timer.o: in function `.L203': timer.c:(.text+0xf60): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L204': timer.c:(.text+0x1034): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: timer.c:(.text+0x1070): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L219': timer.c:(.text+0x1130): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/timer.o: in function `.L216': timer.c:(.text+0x1140): undefined reference to `trace_event_buffer_commit' >> loongarch64-linux-ld: timer.c:(.text+0x1188): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_timer_class': timer.c:(.text+0x1208): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/timer.o: in function `.L231': timer.c:(.text+0x1238): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L232': timer.c:(.text+0x1288): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `.L246': timer.c:(.text+0x1300): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: timer.c:(.text+0x132c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L242': timer.c:(.text+0x1368): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_timer_expire_entry': timer.c:(.text+0x13e8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/timer.o: in function `.L257': timer.c:(.text+0x1400): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L253': timer.c:(.text+0x1448): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_init': timer.c:(.text+0x14b8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: timer.c:(.text+0x14e8): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L264': timer.c:(.text+0x152c): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_start': timer.c:(.text+0x15a8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: timer.c:(.text+0x15cc): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L279': timer.c:(.text+0x1608): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `.L276': timer.c:(.text+0x1678): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: timer.c:(.text+0x1688): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_expire_entry': timer.c:(.text+0x16c8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `.L286': timer.c:(.text+0x1748): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/timer.o: in function `.L287': timer.c:(.text+0x1780): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_hrtimer_class': timer.c:(.text+0x17c8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/timer.o: in function `.L298': timer.c:(.text+0x1848): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_itimer_state': timer.c:(.text+0x186c): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/timer.o: in function `.L312': timer.c:(.text+0x18c8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: timer.c:(.text+0x18fc): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `.L308': timer.c:(.text+0x1950): undefined reference to `trace_event_printf' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_event_raw_event_itimer_expire': timer.c:(.text+0x1970): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x199c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `.L324': timer.c:(.text+0x19fc): undefined reference to `trace_event_printf' loongarch64-linux-ld: kernel/time/timer.o: in function `.L319': timer.c:(.text+0x1a1c): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x1a44): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_class': timer.c:(.text+0x1a98): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1ab8): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/time/timer.o: in function `.L338': timer.c:(.text+0x1ae4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_expire_entry': timer.c:(.text+0x1b30): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1b50): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x1b7c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_hrtimer_expire_entry': timer.c:(.text+0x1bf0): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1c10): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x1c3c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_hrtimer_class': timer.c:(.text+0x1c98): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1cb8): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x1ce4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_itimer_state': timer.c:(.text+0x1d84): undefined reference to `trace_print_flags_seq' loongarch64-linux-ld: kernel/time/timer.o: in function `.L362': timer.c:(.text+0x1db0): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1de0): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_itimer_expire': timer.c:(.text+0x1e0c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: timer.c:(.text+0x1e68): undefined reference to `trace_print_symbols_seq' loongarch64-linux-ld: kernel/time/timer.o: in function `.L368': timer.c:(.text+0x1e80): undefined reference to `trace_print_symbols_seq' loongarch64-linux-ld: timer.c:(.text+0x1e9c): undefined reference to `trace_event_printf' loongarch64-linux-ld: kernel/time/timer.o: in function `trace_raw_output_timer_start': timer.c:(.text+0x1ec8): undefined reference to `trace_handle_return' loongarch64-linux-ld: timer.c:(.text+0x1ef4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/timer.o: in function `.L374': timer.c:(.text+0x1f70): undefined reference to `trace_print_symbols_seq' loongarch64-linux-ld: timer.c:(.text+0x1f94): undefined reference to `trace_event_printf' loongarch64-linux-ld: timer.c:(.text+0x1fc0): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xa8): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0xf0): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x138): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x160): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x180): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1a8): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1c8): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x1f0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x210): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x238): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x258): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/timer.o:(.ref.data+0x280): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `perf_trace_alarmtimer_suspend': alarmtimer.c:(.text+0x2d4): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L46': alarmtimer.c:(.text+0x300): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `perf_trace_alarm_class': alarmtimer.c:(.text+0x3cc): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L58': alarmtimer.c:(.text+0x408): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_event_raw_event_alarmtimer_suspend': alarmtimer.c:(.text+0x4d8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: alarmtimer.c:(.text+0x4ec): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L73': alarmtimer.c:(.text+0x528): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L70': alarmtimer.c:(.text+0x598): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_event_raw_event_alarm_class': alarmtimer.c:(.text+0x5c0): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L84': alarmtimer.c:(.text+0x60c): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L80': alarmtimer.c:(.text+0x644): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_raw_output_alarmtimer_suspend': alarmtimer.c:(.text+0x6a0): undefined reference to `trace_print_flags_seq' loongarch64-linux-ld: alarmtimer.c:(.text+0x6b8): undefined reference to `trace_event_printf' loongarch64-linux-ld: alarmtimer.c:(.text+0x6d8): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `.L96': alarmtimer.c:(.text+0x704): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/time/alarmtimer.o: in function `trace_raw_output_alarm_class': alarmtimer.c:(.text+0x76c): undefined reference to `trace_print_flags_seq' loongarch64-linux-ld: alarmtimer.c:(.text+0x78c): undefined reference to `trace_event_printf' loongarch64-linux-ld: alarmtimer.c:(.text+0x7b0): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/time/alarmtimer.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/smp.o: in function `perf_trace_csd_queue_cpu': smp.c:(.text+0x214): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/smp.o: in function `.L30': smp.c:(.text+0x248): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/smp.o: in function `perf_trace_csd_function': smp.c:(.text+0x30c): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/smp.o: in function `.L42': smp.c:(.text+0x338): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/smp.o: in function `trace_event_raw_event_csd_queue_cpu': smp.c:(.text+0x428): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/smp.o: in function `.L57': smp.c:(.text+0x444): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/smp.o: in function `.L53': smp.c:(.text+0x4a8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/smp.o: in function `trace_event_raw_event_csd_function': smp.c:(.text+0x520): undefined reference to `trace_event_buffer_reserve' >> loongarch64-linux-ld: smp.c:(.text+0x534): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/smp.o: in function `.L64': smp.c:(.text+0x588): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/smp.o: in function `.L65': smp.c:(.text+0x5bc): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/smp.o: in function `trace_raw_output_csd_queue_cpu': smp.c:(.text+0x61c): undefined reference to `trace_event_printf' loongarch64-linux-ld: smp.c:(.text+0x63c): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/smp.o: in function `.L80': smp.c:(.text+0x664): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/smp.o: in function `trace_raw_output_csd_function': smp.c:(.text+0x6b4): undefined reference to `trace_event_printf' loongarch64-linux-ld: smp.c:(.text+0x6d4): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/smp.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/kexec_core.o: in function `.L255': kexec_core.c:(.text+0x1b10): undefined reference to `machine_kexec_cleanup' loongarch64-linux-ld: kernel/kexec_core.o: in function `.L296': kexec_core.c:(.text+0x1d70): undefined reference to `machine_crash_shutdown' loongarch64-linux-ld: kexec_core.c:(.text+0x1d78): undefined reference to `machine_kexec' loongarch64-linux-ld: kernel/kexec_core.o: in function `.L383': kexec_core.c:(.text+0x2350): undefined reference to `machine_shutdown' loongarch64-linux-ld: kernel/kexec_core.o: in function `.L380': kexec_core.c:(.text+0x2360): undefined reference to `machine_kexec' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L128': cgroup.c:(.text+0x858): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L129': cgroup.c:(.text+0x8b0): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup_event': cgroup.c:(.text+0xa58): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L147': cgroup.c:(.text+0xab8): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L168': cgroup.c:(.text+0xd70): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L21': cgroup.c:(.text+0xdb4): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L192': cgroup.c:(.text+0xe68): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: cgroup.c:(.text+0xe9c): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L189': cgroup.c:(.text+0xefc): undefined reference to `trace_event_printf' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L200': cgroup.c:(.text+0xf1c): undefined reference to `trace_handle_return' loongarch64-linux-ld: cgroup.c:(.text+0xf44): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L190': cgroup.c:(.text+0xfa0): undefined reference to `trace_event_printf' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup_root': cgroup.c:(.text+0xfc0): undefined reference to `trace_handle_return' loongarch64-linux-ld: cgroup.c:(.text+0xfec): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup': cgroup.c:(.text+0x106c): undefined reference to `trace_event_printf' loongarch64-linux-ld: cgroup.c:(.text+0x108c): undefined reference to `trace_handle_return' loongarch64-linux-ld: cgroup.c:(.text+0x10b4): undefined reference to `trace_raw_output_prep' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `trace_raw_output_cgroup_migrate': cgroup.c:(.text+0x1124): undefined reference to `trace_event_printf' loongarch64-linux-ld: cgroup.c:(.text+0x1144): undefined reference to `trace_handle_return' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L725': cgroup.c:(.text+0x3e50): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L15': cgroup.c:(.text+0x3ed4): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L756': cgroup.c:(.text+0x4020): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L761': cgroup.c:(.text+0x407c): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L779': cgroup.c:(.text+0x41d4): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L769': cgroup.c:(.text+0x4218): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: cgroup.c:(.text+0x4274): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L772': cgroup.c:(.text+0x42c8): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup_migrate': cgroup.c:(.text+0x4364): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: cgroup.c:(.text+0x4394): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L783': cgroup.c:(.text+0x43ec): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L784': cgroup.c:(.text+0x4448): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L799': cgroup.c:(.text+0x4520): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `perf_trace_cgroup': cgroup.c:(.text+0x4588): undefined reference to `trace_event_buffer_commit' loongarch64-linux-ld: kernel/cgroup/cgroup.o: in function `.L802': cgroup.c:(.text+0x4668): undefined reference to `__trace_trigger_soft_disabled' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x18): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x40): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x60): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x88): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xa8): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xd0): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0xf0): undefined reference to `trace_event_reg' loongarch64-linux-ld: kernel/cgroup/cgroup.o:(.ref.data+0x118): undefined reference to `trace_event_raw_init' loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `.L12': error_report-traces.c:(.text+0xdc): undefined reference to `perf_trace_buf_alloc' loongarch64-linux-ld: error_report-traces.c:(.text+0x108): undefined reference to `perf_trace_run_bpf_submit' loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `trace_event_raw_event_error_report_template': error_report-traces.c:(.text+0x1d8): undefined reference to `trace_event_buffer_reserve' loongarch64-linux-ld: kernel/trace/error_report-traces.o: in function `.L27': error_report-traces.c:(.text+0x1ec): undefined reference to `trace_event_buffer_commit' .. Kconfig warnings: (for reference only) WARNING: unmet direct dependencies detected for PGP_PRELOAD Depends on [n]: CRYPTO [=y] && ASYMMETRIC_KEY_TYPE [=n] Selected by [y]: - PGP_PRELOAD_PUBLIC_KEYS [=y] && CRYPTO [=y] -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
1 0
0 0
[PATCH openEuler-22.03-LTS-SP1 v2 0/5] Fix CVE-2024-45025
by Long Li 26 Sep '24

26 Sep '24
This patch set fix cve-2024-45025 Al Viro (1): fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE Alexander Lobakin (4): tools: move alignment-related macros to new <linux/align.h> fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64() bitmap: introduce generic optimized bitmap_size() s390/cio: rename bitmap_size() -> idset_bitmap_size() drivers/md/dm-clone-metadata.c | 5 --- drivers/s390/cio/idset.c | 12 ++++--- fs/file.c | 30 +++++++--------- fs/ntfs3/bitmap.c | 4 +-- fs/ntfs3/fsntfs.c | 2 +- fs/ntfs3/index.c | 11 +++--- fs/ntfs3/ntfs_fs.h | 4 +-- fs/ntfs3/super.c | 2 +- include/linux/bitmap.h | 20 +++++++++-- include/linux/cpumask.h | 2 +- lib/math/prime_numbers.c | 2 -- tools/include/linux/align.h | 12 +++++++ tools/include/linux/bitmap.h | 9 ++--- .../testing/selftests/core/close_range_test.c | 35 +++++++++++++++++++ 14 files changed, 102 insertions(+), 48 deletions(-) create mode 100644 tools/include/linux/align.h -- 2.39.2
2 6
0 0
[PATCH OLK-6.6] arm64/mpam: Fix redefined reference of 'mpam_detect_is_enabled'
by Zeng Heng 26 Sep '24

26 Sep '24
hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IATSCU -------------------------------- Fix re-defined reference of 'mpam_detect_is_enabled' when CONFIG_ARM64_MPAM is enabled. Fixes: 797c68d3b52d ("arm64/mpam: Check mpam_detect_is_enabled() before accessing MPAM registers") Signed-off-by: Zeng Heng <zengheng4(a)huawei.com> --- arch/arm64/include/asm/cpufeature.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index f8ec4b20fa69..4c759e0dcc21 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -858,14 +858,7 @@ static inline bool cpus_support_mpam(void) cpus_have_final_cap(ARM64_MPAM); } -#ifdef CONFIG_ARM64_MPAM bool mpam_detect_is_enabled(void); -#else -static inline bool mpam_detect_is_enabled(void) -{ - return false; -} -#endif int do_emulate_mrs(struct pt_regs *regs, u32 sys_reg, u32 rt); bool try_emulate_mrs(struct pt_regs *regs, u32 isn); -- 2.25.1
2 1
0 0
[PATCH OLK-5.10] acpi/arm64: Do not add CPU to node_to_cpumask_map in acpi_map_cpu()
by Xiongfeng Wang 26 Sep '24

26 Sep '24
hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IATDZ5 CVE: NA -------------------------------- When two vCPUs of NUMA1 are hot added and then taken to online, e.g.: In qemu monitor: device_add host-arm-cpu,socket-id=1,cluster-id=0,core-id=0, thread-id=0,id=core4 device_add host-arm-cpu,socket-id=1,cluster-id=0,core-id=0, thread-id=1,id=core5 In guest: echo 1 > /sys/devices/system/cpu/cpu4/online it will appear calltrace as below: WARNING: CPU: 4 PID: 286 at kernel/sched/core.c:2293 __set_cpus_allowed_ptr+0x468/0x4d4 Modules linked in: ... CPU: 4 PID: 286 Comm: cpuhp/4 Tainted: G W OE 5.10.0 #1 Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015 pstate: 20400085 (nzCv daIf +PAN -UAO -TCO BTYPE=--) pc : __set_cpus_allowed_ptr+0x468/0x4d4 lr : __set_cpus_allowed_ptr+0x440/0x4d4 sp : ffff800010a43c30 x29: ffff800010a43c30 x28: ffff4e2fbffe7c40 x27: ffffa34037fcb450 x26: ffffa340372f2000 x25: 0000000000000004 x24: ffffa34037c47140 x23: ffff4e2f3ffc7480 x22: 0000000000000000 x21: ffff4e2ec0fee040 x20: ffffa34037cb8530 x19: ffffa34037cb7c80 x18: ffff4e2f80242787 x17: 00000000248943a4 x16: 0000000000000000 x15: ffff800010760000 x14: 0000000000001000 x13: ffff80000fffffff x12: 0000000000007290 x11: ffff4e2fbffeeed0 x10: ffffa3403826eea8 x9 : ffffa340341b8290 x8 : 0000000000000000 x7 : ffffa3403826a3c8 x6 : ffff4e2ec0fee4f8 x5 : 0000000000000000 x4 : 00000000000007c7 x3 : ffffffffffffffff x2 : 00000000000000ff x1 : 0000000000000004 x0 : 0000000000000001 Call trace: __set_cpus_allowed_ptr+0x468/0x4d4 set_cpus_allowed_ptr+0x38/0x5c kcompactd_cpu_online+0xb0/0x190 cpuhp_invoke_callback+0x274/0xbb0 cpuhp_thread_fun+0x188/0x36c smpboot_thread_fn+0x144/0x380 kthread+0x190/0x1fc ret_from_fork+0x10/0x18 When the WARN_ON occurs, the mask variables is as follows. new_mask: 0-4 activ_mask:0-3 nr_cpus_allowed:2 numa_add_cpu() is called in secondary_start_kernel() when the CPU is brought up online. We need to remove numa_add_cpu() in acpi_map_cpu(). So it is for arch/x86. Also fix it in acpi_unmap_cpu() as well. Fixes: 7eaf6534f708 ("arm64: Add CPU hotplug support") Signed-off-by: Xiongfeng Wang <wangxiongfeng2(a)huawei.com> Signed-off-by: Zhou Wang <wangzhou1(a)hisilicon.com> --- arch/arm64/kernel/acpi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c index a81105cfe57e2..f043bec3ba50f 100644 --- a/arch/arm64/kernel/acpi.c +++ b/arch/arm64/kernel/acpi.c @@ -417,7 +417,6 @@ int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id, nid = acpi_get_node(handle); if (nid != NUMA_NO_NODE) { set_cpu_numa_node(cpu, nid); - numa_add_cpu(cpu); } *pcpu = cpu; @@ -430,7 +429,7 @@ EXPORT_SYMBOL(acpi_map_cpu); int acpi_unmap_cpu(int cpu) { set_cpu_present(cpu, false); - numa_clear_node(cpu); + set_cpu_numa_node(cpu, NUMA_NO_NODE); return 0; } -- 2.20.1
2 1
0 0
[PATCH openEuler-1.0-LTS] VMCI: Fix use-after-free when removing resource in vmci_resource_remove()
by Zhang Kunbo 26 Sep '24

26 Sep '24
From: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com> stable inclusion from stable-v4.19.322 commit f6365931bf7c07b2b397dbb06a4f6573cc9fae73 category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/IARY1L CVE: CVE-2024-46738 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id… -------------------------------- commit 48b9a8dabcc3cf5f961b2ebcd8933bf9204babb7 upstream. When removing a resource from vmci_resource_table in vmci_resource_remove(), the search is performed using the resource handle by comparing context and resource fields. It is possible though to create two resources with different types but same handle (same context and resource fields). When trying to remove one of the resources, vmci_resource_remove() may not remove the intended one, but the object will still be freed as in the case of the datagram type in vmci_datagram_destroy_handle(). vmci_resource_table will still hold a pointer to this freed resource leading to a use-after-free vulnerability. BUG: KASAN: use-after-free in vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline] BUG: KASAN: use-after-free in vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147 Read of size 4 at addr ffff88801c16d800 by task syz-executor197/1592 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x82/0xa9 lib/dump_stack.c:106 print_address_description.constprop.0+0x21/0x366 mm/kasan/report.c:239 __kasan_report.cold+0x7f/0x132 mm/kasan/report.c:425 kasan_report+0x38/0x51 mm/kasan/report.c:442 vmci_handle_is_equal include/linux/vmw_vmci_defs.h:142 [inline] vmci_resource_remove+0x3a1/0x410 drivers/misc/vmw_vmci/vmci_resource.c:147 vmci_qp_broker_detach+0x89a/0x11b9 drivers/misc/vmw_vmci/vmci_queue_pair.c:2182 ctx_free_ctx+0x473/0xbe1 drivers/misc/vmw_vmci/vmci_context.c:444 kref_put include/linux/kref.h:65 [inline] vmci_ctx_put drivers/misc/vmw_vmci/vmci_context.c:497 [inline] vmci_ctx_destroy+0x170/0x1d6 drivers/misc/vmw_vmci/vmci_context.c:195 vmci_host_close+0x125/0x1ac drivers/misc/vmw_vmci/vmci_host.c:143 __fput+0x261/0xa34 fs/file_table.c:282 task_work_run+0xf0/0x194 kernel/task_work.c:164 tracehook_notify_resume include/linux/tracehook.h:189 [inline] exit_to_user_mode_loop+0x184/0x189 kernel/entry/common.c:187 exit_to_user_mode_prepare+0x11b/0x123 kernel/entry/common.c:220 __syscall_exit_to_user_mode_work kernel/entry/common.c:302 [inline] syscall_exit_to_user_mode+0x18/0x42 kernel/entry/common.c:313 do_syscall_64+0x41/0x85 arch/x86/entry/common.c:86 entry_SYSCALL_64_after_hwframe+0x6e/0x0 This change ensures the type is also checked when removing the resource from vmci_resource_table in vmci_resource_remove(). Fixes: bc63dedb7d46 ("VMCI: resource object implementation.") Cc: stable(a)vger.kernel.org Reported-by: George Kennedy <george.kennedy(a)oracle.com> Signed-off-by: David Fernandez Gonzalez <david.fernandez.gonzalez(a)oracle.com> Link: https://lore.kernel.org/r/20240828154338.754746-1-david.fernandez.gonzalez@… Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> Signed-off-by: Zhang Kunbo <zhangkunbo(a)huawei.com> --- drivers/misc/vmw_vmci/vmci_resource.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/misc/vmw_vmci/vmci_resource.c b/drivers/misc/vmw_vmci/vmci_resource.c index da1ee2e1ba99..2779704e128a 100644 --- a/drivers/misc/vmw_vmci/vmci_resource.c +++ b/drivers/misc/vmw_vmci/vmci_resource.c @@ -152,7 +152,8 @@ void vmci_resource_remove(struct vmci_resource *resource) spin_lock(&vmci_resource_table.lock); hlist_for_each_entry(r, &vmci_resource_table.entries[idx], node) { - if (vmci_handle_is_equal(r->handle, resource->handle)) { + if (vmci_handle_is_equal(r->handle, resource->handle) && + resource->type == r->type) { hlist_del_init_rcu(&r->node); break; } -- 2.34.1
2 1
0 0
[PATCH openEuler-1.0-LTS 0/2] fix CVE-2024-46777 for 4.19
by Wupeng Ma 26 Sep '24

26 Sep '24
From: Ma Wupeng <mawupeng1(a)huawei.com> fix cve for CVE-2024-46777. Jan Kara (2): udf: Define EFSCORRUPTED error code udf: Avoid excessive partition lengths fs/udf/super.c | 15 +++++++++++++++ fs/udf/udf_sb.h | 2 ++ 2 files changed, 17 insertions(+) -- 2.25.1
2 3
0 0
[PATCH openEuler-22.03-LTS-SP1] bcache: fix variable length array abuse in btree_iter
by Yuan Can 26 Sep '24

26 Sep '24
From: Matthew Mirvish <matthew(a)mm12.xyz> stable inclusion from stable-v5.10.221 commit 2c3d7b03b658dc8bfa6112b194b67b92a87e081b category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAB04K CVE: CVE-2024-39482 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id… -------------------------------- commit 3a861560ccb35f2a4f0a4b8207fa7c2a35fc7f31 upstream. btree_iter is used in two ways: either allocated on the stack with a fixed size MAX_BSETS, or from a mempool with a dynamic size based on the specific cache set. Previously, the struct had a fixed-length array of size MAX_BSETS which was indexed out-of-bounds for the dynamically-sized iterators, which causes UBSAN to complain. This patch uses the same approach as in bcachefs's sort_iter and splits the iterator into a btree_iter with a flexible array member and a btree_iter_stack which embeds a btree_iter as well as a fixed-length data array. Cc: stable(a)vger.kernel.org Closes: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2039368 Signed-off-by: Matthew Mirvish <matthew(a)mm12.xyz> Signed-off-by: Coly Li <colyli(a)suse.de> Link: https://lore.kernel.org/r/20240509011117.2697-3-colyli@suse.de Signed-off-by: Jens Axboe <axboe(a)kernel.dk> Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> Signed-off-by: Yuan Can <yuancan(a)huawei.com> --- drivers/md/bcache/bset.c | 44 +++++++++++++++++------------------ drivers/md/bcache/bset.h | 28 ++++++++++++++-------- drivers/md/bcache/btree.c | 40 ++++++++++++++++--------------- drivers/md/bcache/super.c | 5 ++-- drivers/md/bcache/sysfs.c | 2 +- drivers/md/bcache/writeback.c | 10 ++++---- 6 files changed, 70 insertions(+), 59 deletions(-) diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c index 94d38e8a59b3..cb544207427b 100644 --- a/drivers/md/bcache/bset.c +++ b/drivers/md/bcache/bset.c @@ -54,7 +54,7 @@ void bch_dump_bucket(struct btree_keys *b) int __bch_count_data(struct btree_keys *b) { unsigned int ret = 0; - struct btree_iter iter; + struct btree_iter_stack iter; struct bkey *k; if (b->ops->is_extents) @@ -67,7 +67,7 @@ void __bch_check_keys(struct btree_keys *b, const char *fmt, ...) { va_list args; struct bkey *k, *p = NULL; - struct btree_iter iter; + struct btree_iter_stack iter; const char *err; for_each_key(b, k, &iter) { @@ -879,7 +879,7 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k, unsigned int status = BTREE_INSERT_STATUS_NO_INSERT; struct bset *i = bset_tree_last(b)->data; struct bkey *m, *prev = NULL; - struct btree_iter iter; + struct btree_iter_stack iter; struct bkey preceding_key_on_stack = ZERO_KEY; struct bkey *preceding_key_p = &preceding_key_on_stack; @@ -895,9 +895,9 @@ unsigned int bch_btree_insert_key(struct btree_keys *b, struct bkey *k, else preceding_key(k, &preceding_key_p); - m = bch_btree_iter_init(b, &iter, preceding_key_p); + m = bch_btree_iter_stack_init(b, &iter, preceding_key_p); - if (b->ops->insert_fixup(b, k, &iter, replace_key)) + if (b->ops->insert_fixup(b, k, &iter.iter, replace_key)) return status; status = BTREE_INSERT_STATUS_INSERT; @@ -1100,33 +1100,33 @@ void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k, btree_iter_cmp)); } -static struct bkey *__bch_btree_iter_init(struct btree_keys *b, - struct btree_iter *iter, - struct bkey *search, - struct bset_tree *start) +static struct bkey *__bch_btree_iter_stack_init(struct btree_keys *b, + struct btree_iter_stack *iter, + struct bkey *search, + struct bset_tree *start) { struct bkey *ret = NULL; - iter->size = ARRAY_SIZE(iter->data); - iter->used = 0; + iter->iter.size = ARRAY_SIZE(iter->stack_data); + iter->iter.used = 0; #ifdef CONFIG_BCACHE_DEBUG - iter->b = b; + iter->iter.b = b; #endif for (; start <= bset_tree_last(b); start++) { ret = bch_bset_search(b, start, search); - bch_btree_iter_push(iter, ret, bset_bkey_last(start->data)); + bch_btree_iter_push(&iter->iter, ret, bset_bkey_last(start->data)); } return ret; } -struct bkey *bch_btree_iter_init(struct btree_keys *b, - struct btree_iter *iter, +struct bkey *bch_btree_iter_stack_init(struct btree_keys *b, + struct btree_iter_stack *iter, struct bkey *search) { - return __bch_btree_iter_init(b, iter, search, b->set); + return __bch_btree_iter_stack_init(b, iter, search, b->set); } static inline struct bkey *__bch_btree_iter_next(struct btree_iter *iter, @@ -1293,10 +1293,10 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start, struct bset_sort_state *state) { size_t order = b->page_order, keys = 0; - struct btree_iter iter; + struct btree_iter_stack iter; int oldsize = bch_count_data(b); - __bch_btree_iter_init(b, &iter, NULL, &b->set[start]); + __bch_btree_iter_stack_init(b, &iter, NULL, &b->set[start]); if (start) { unsigned int i; @@ -1307,7 +1307,7 @@ void bch_btree_sort_partial(struct btree_keys *b, unsigned int start, order = get_order(__set_bytes(b->set->data, keys)); } - __btree_sort(b, &iter, start, order, false, state); + __btree_sort(b, &iter.iter, start, order, false, state); EBUG_ON(oldsize >= 0 && bch_count_data(b) != oldsize); } @@ -1323,11 +1323,11 @@ void bch_btree_sort_into(struct btree_keys *b, struct btree_keys *new, struct bset_sort_state *state) { uint64_t start_time = local_clock(); - struct btree_iter iter; + struct btree_iter_stack iter; - bch_btree_iter_init(b, &iter, NULL); + bch_btree_iter_stack_init(b, &iter, NULL); - btree_mergesort(b, new->set->data, &iter, false, true); + btree_mergesort(b, new->set->data, &iter.iter, false, true); bch_time_stats_update(&state->time, start_time); diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h index d795c84246b0..011f6062c4c0 100644 --- a/drivers/md/bcache/bset.h +++ b/drivers/md/bcache/bset.h @@ -321,7 +321,14 @@ struct btree_iter { #endif struct btree_iter_set { struct bkey *k, *end; - } data[MAX_BSETS]; + } data[]; +}; + +/* Fixed-size btree_iter that can be allocated on the stack */ + +struct btree_iter_stack { + struct btree_iter iter; + struct btree_iter_set stack_data[MAX_BSETS]; }; typedef bool (*ptr_filter_fn)(struct btree_keys *b, const struct bkey *k); @@ -333,9 +340,9 @@ struct bkey *bch_btree_iter_next_filter(struct btree_iter *iter, void bch_btree_iter_push(struct btree_iter *iter, struct bkey *k, struct bkey *end); -struct bkey *bch_btree_iter_init(struct btree_keys *b, - struct btree_iter *iter, - struct bkey *search); +struct bkey *bch_btree_iter_stack_init(struct btree_keys *b, + struct btree_iter_stack *iter, + struct bkey *search); struct bkey *__bch_bset_search(struct btree_keys *b, struct bset_tree *t, const struct bkey *search); @@ -350,13 +357,14 @@ static inline struct bkey *bch_bset_search(struct btree_keys *b, return search ? __bch_bset_search(b, t, search) : t->data->start; } -#define for_each_key_filter(b, k, iter, filter) \ - for (bch_btree_iter_init((b), (iter), NULL); \ - ((k) = bch_btree_iter_next_filter((iter), (b), filter));) +#define for_each_key_filter(b, k, stack_iter, filter) \ + for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \ + ((k) = bch_btree_iter_next_filter(&((stack_iter)->iter), (b), \ + filter));) -#define for_each_key(b, k, iter) \ - for (bch_btree_iter_init((b), (iter), NULL); \ - ((k) = bch_btree_iter_next(iter));) +#define for_each_key(b, k, stack_iter) \ + for (bch_btree_iter_stack_init((b), (stack_iter), NULL); \ + ((k) = bch_btree_iter_next(&((stack_iter)->iter)));) /* Sorting */ diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 98daa9d200f7..da24a3ca69e5 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -1274,7 +1274,7 @@ static bool btree_gc_mark_node(struct btree *b, struct gc_stat *gc) uint8_t stale = 0; unsigned int keys = 0, good_keys = 0; struct bkey *k; - struct btree_iter iter; + struct btree_iter_stack iter; struct bset_tree *t; gc->nodes++; @@ -1533,7 +1533,7 @@ static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op, static unsigned int btree_gc_count_keys(struct btree *b) { struct bkey *k; - struct btree_iter iter; + struct btree_iter_stack iter; unsigned int ret = 0; for_each_key_filter(&b->keys, k, &iter, bch_ptr_bad) @@ -1574,17 +1574,18 @@ static int btree_gc_recurse(struct btree *b, struct btree_op *op, int ret = 0; bool should_rewrite; struct bkey *k; - struct btree_iter iter; + struct btree_iter_stack iter; struct gc_merge_info r[GC_MERGE_NODES]; struct gc_merge_info *i, *last = r + ARRAY_SIZE(r) - 1; - bch_btree_iter_init(&b->keys, &iter, &b->c->gc_done); + bch_btree_iter_stack_init(&b->keys, &iter, &b->c->gc_done); for (i = r; i < r + ARRAY_SIZE(r); i++) i->b = ERR_PTR(-EINTR); while (1) { - k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad); + k = bch_btree_iter_next_filter(&iter.iter, &b->keys, + bch_ptr_bad); if (k) { r->b = bch_btree_node_get(b->c, op, k, b->level - 1, true, b); @@ -1874,7 +1875,7 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op) { int ret = 0; struct bkey *k, *p = NULL; - struct btree_iter iter; + struct btree_iter_stack iter; for_each_key_filter(&b->keys, k, &iter, bch_ptr_invalid) bch_initial_mark_key(b->c, b->level, k); @@ -1882,10 +1883,10 @@ static int bch_btree_check_recurse(struct btree *b, struct btree_op *op) bch_initial_mark_key(b->c, b->level + 1, &b->key); if (b->level) { - bch_btree_iter_init(&b->keys, &iter, NULL); + bch_btree_iter_stack_init(&b->keys, &iter, NULL); do { - k = bch_btree_iter_next_filter(&iter, &b->keys, + k = bch_btree_iter_next_filter(&iter.iter, &b->keys, bch_ptr_bad); if (k) { btree_node_prefetch(b, k); @@ -1913,7 +1914,7 @@ static int bch_btree_check_thread(void *arg) struct btree_check_info *info = arg; struct btree_check_state *check_state = info->state; struct cache_set *c = check_state->c; - struct btree_iter iter; + struct btree_iter_stack iter; struct bkey *k, *p; int cur_idx, prev_idx, skip_nr; @@ -1922,8 +1923,8 @@ static int bch_btree_check_thread(void *arg) ret = 0; /* root node keys are checked before thread created */ - bch_btree_iter_init(&c->root->keys, &iter, NULL); - k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad); + bch_btree_iter_stack_init(&c->root->keys, &iter, NULL); + k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad); BUG_ON(!k); p = k; @@ -1941,7 +1942,7 @@ static int bch_btree_check_thread(void *arg) skip_nr = cur_idx - prev_idx; while (skip_nr) { - k = bch_btree_iter_next_filter(&iter, + k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad); if (k) @@ -2005,7 +2006,7 @@ int bch_btree_check(struct cache_set *c) int ret = 0; int i; struct bkey *k = NULL; - struct btree_iter iter; + struct btree_iter_stack iter; struct btree_check_state check_state; /* check and mark root node keys */ @@ -2501,11 +2502,11 @@ static int bch_btree_map_nodes_recurse(struct btree *b, struct btree_op *op, if (b->level) { struct bkey *k; - struct btree_iter iter; + struct btree_iter_stack iter; - bch_btree_iter_init(&b->keys, &iter, from); + bch_btree_iter_stack_init(&b->keys, &iter, from); - while ((k = bch_btree_iter_next_filter(&iter, &b->keys, + while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys, bch_ptr_bad))) { ret = bcache_btree(map_nodes_recurse, k, b, op, from, fn, flags); @@ -2534,11 +2535,12 @@ int bch_btree_map_keys_recurse(struct btree *b, struct btree_op *op, { int ret = MAP_CONTINUE; struct bkey *k; - struct btree_iter iter; + struct btree_iter_stack iter; - bch_btree_iter_init(&b->keys, &iter, from); + bch_btree_iter_stack_init(&b->keys, &iter, from); - while ((k = bch_btree_iter_next_filter(&iter, &b->keys, bch_ptr_bad))) { + while ((k = bch_btree_iter_next_filter(&iter.iter, &b->keys, + bch_ptr_bad))) { ret = !b->level ? fn(op, b, k) : bcache_btree(map_keys_recurse, k, diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index b5601f200c09..c778862f4f33 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -1928,8 +1928,9 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb) INIT_LIST_HEAD(&c->btree_cache_freed); INIT_LIST_HEAD(&c->data_buckets); - iter_size = ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size + 1) * - sizeof(struct btree_iter_set); + iter_size = sizeof(struct btree_iter) + + ((meta_bucket_pages(sb) * PAGE_SECTORS) / sb->block_size) * + sizeof(struct btree_iter_set); c->devices = kcalloc(c->nr_uuids, sizeof(void *), GFP_KERNEL); if (!c->devices) diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index 8467e37411a7..84b8e9e90ee6 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c @@ -660,7 +660,7 @@ static unsigned int bch_root_usage(struct cache_set *c) unsigned int bytes = 0; struct bkey *k; struct btree *b; - struct btree_iter iter; + struct btree_iter_stack iter; goto lock_root; diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index 83dcdd85abc0..9502cc9b0c80 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c @@ -899,15 +899,15 @@ static int bch_dirty_init_thread(void *arg) struct dirty_init_thrd_info *info = arg; struct bch_dirty_init_state *state = info->state; struct cache_set *c = state->c; - struct btree_iter iter; + struct btree_iter_stack iter; struct bkey *k, *p; int cur_idx, prev_idx, skip_nr; k = p = NULL; cur_idx = prev_idx = 0; - bch_btree_iter_init(&c->root->keys, &iter, NULL); - k = bch_btree_iter_next_filter(&iter, &c->root->keys, bch_ptr_bad); + bch_btree_iter_stack_init(&c->root->keys, &iter, NULL); + k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad); BUG_ON(!k); p = k; @@ -921,7 +921,7 @@ static int bch_dirty_init_thread(void *arg) skip_nr = cur_idx - prev_idx; while (skip_nr) { - k = bch_btree_iter_next_filter(&iter, + k = bch_btree_iter_next_filter(&iter.iter, &c->root->keys, bch_ptr_bad); if (k) @@ -969,7 +969,7 @@ void bch_sectors_dirty_init(struct bcache_device *d) { int i; struct bkey *k = NULL; - struct btree_iter iter; + struct btree_iter_stack iter; struct sectors_dirty_init op; struct cache_set *c = d->c; struct bch_dirty_init_state state; -- 2.17.1
2 1
0 0
[PATCH openEuler-22.03-LTS-SP1] usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete
by Yuan Can 26 Sep '24

26 Sep '24
From: Wesley Cheng <quic_wcheng(a)quicinc.com> stable inclusion from stable-v5.10.221 commit e500b1c4e29ad0bd1c1332a1eaea2913627a92dd category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9TXIA CVE: CVE-2024-36894 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id… -------------------------------- [ Upstream commit 24729b307eefcd7c476065cd7351c1a018082c19 ] FFS based applications can utilize the aio_cancel() callback to dequeue pending USB requests submitted to the UDC. There is a scenario where the FFS application issues an AIO cancel call, while the UDC is handling a soft disconnect. For a DWC3 based implementation, the callstack looks like the following: DWC3 Gadget FFS Application dwc3_gadget_soft_disconnect() ... --> dwc3_stop_active_transfers() --> dwc3_gadget_giveback(-ESHUTDOWN) --> ffs_epfile_async_io_complete() ffs_aio_cancel() --> usb_ep_free_request() --> usb_ep_dequeue() There is currently no locking implemented between the AIO completion handler and AIO cancel, so the issue occurs if the completion routine is running in parallel to an AIO cancel call coming from the FFS application. As the completion call frees the USB request (io_data->req) the FFS application is also referencing it for the usb_ep_dequeue() call. This can lead to accessing a stale/hanging pointer. commit b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently") relocated the usb_ep_free_request() into ffs_epfile_async_io_complete(). However, in order to properly implement locking to mitigate this issue, the spinlock can't be added to ffs_epfile_async_io_complete(), as usb_ep_dequeue() (if successfully dequeuing a USB request) will call the function driver's completion handler in the same context. Hence, leading into a deadlock. Fix this issue by moving the usb_ep_free_request() back to ffs_user_copy_worker(), and ensuring that it explicitly sets io_data->req to NULL after freeing it within the ffs->eps_lock. This resolves the race condition above, as the ffs_aio_cancel() routine will not continue attempting to dequeue a request that has already been freed, or the ffs_user_copy_work() not freeing the USB request until the AIO cancel is done referencing it. This fix depends on commit b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently") Fixes: 2e4c7553cd6f ("usb: gadget: f_fs: add aio support") Cc: stable <stable(a)kernel.org> # b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently") Signed-off-by: Wesley Cheng <quic_wcheng(a)quicinc.com> Link: https://lore.kernel.org/r/20240409014059.6740-1-quic_wcheng@quicinc.com Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org> Signed-off-by: Sasha Levin <sashal(a)kernel.org> Signed-off-by: Yuan Can <yuancan(a)huawei.com> --- drivers/usb/gadget/function/f_fs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index bb0d92837f67..f98a6010fa50 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -822,6 +822,7 @@ static void ffs_user_copy_worker(struct work_struct *work) int ret = io_data->req->status ? io_data->req->status : io_data->req->actual; bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD; + unsigned long flags; if (io_data->read && ret > 0) { kthread_use_mm(io_data->mm); @@ -834,7 +835,10 @@ static void ffs_user_copy_worker(struct work_struct *work) if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd) eventfd_signal(io_data->ffs->ffs_eventfd, 1); + spin_lock_irqsave(&io_data->ffs->eps_lock, flags); usb_ep_free_request(io_data->ep, io_data->req); + io_data->req = NULL; + spin_unlock_irqrestore(&io_data->ffs->eps_lock, flags); if (io_data->read) kfree(io_data->to_free); -- 2.17.1
2 1
0 0
  • ← Newer
  • 1
  • ...
  • 582
  • 583
  • 584
  • 585
  • 586
  • 587
  • 588
  • ...
  • 1880
  • Older →

HyperKitty Powered by HyperKitty