CWE-414БазаЧерновик
Отсутствие проверки блокировки
Продукт не проверяет наличие блокировки перед выполнением чувствительных операций с ресурсом.
Открыть в каталоге с фильтром CWE →Связанные CAPEC
—
Связанные уязвимости
CVE-2022-48926В ядре Linux устранена следующая уязвимость:
usb: gadget: rndis: добавить спин-блокировку для списка ответов rndis.
Для списка ответов rndis отсутствует блокировка. Это может привести к повреждению списка, если есть два разных list_add одновременно, как показано ниже.
Лучше добавить в rndis_add_response / rndis_free_response / rndis_get_next_response, чтобы предотвратить состояние гонки в списке ответов.
[ 361.894299] [1: irq/191-dwc3:16979] повреждение list_add.
next->prev должен быть prev (ffffff80651764d0),
но был ffffff883dc36f80. (next=ffffff80651764d0).
[ 361.904380] [1: irq/191-dwc3:16979] Call trace:
[ 361.904391] [1: irq/191-dwc3:16979] __list_add_valid+0x74/0x90
[ 361.904401] [1: irq/191-dwc3:16979] rndis_msg_parser+0x168/0x8c0
[ 361.904409] [1: irq/191-dwc3:16979] rndis_command_complete+0x24/0x84
[ 361.904417] [1: irq/191-dwc3:16979] usb_gadget_giveback_request+0x20/0xe4
[ 361.904426] [1: irq/191-dwc3:16979] dwc3_gadget_giveback+0x44/0x60
[ 361.904434] [1: irq/191-dwc3:16979] dwc3_ep0_complete_data+0x1e8/0x3a0
[ 361.904442] [1: irq/191-dwc3:16979] dwc3_ep0_interrupt+0x29c/0x3dc
[ 361.904450] [1: irq/191-dwc3:16979] dwc3_process_event_entry+0x78/0x6cc
[ 361.904457] [1: irq/191-dwc3:16979] dwc3_process_event_buf+0xa0/0x1ec
[ 361.904465] [1: irq/191-dwc3:16979] dwc3_thread_interrupt+0x34/0x5c
CVE-2021-47132В ядре Linux устранена следующая уязвимость:
mptcp: исправление повреждения sk_forward_memory при повторной передаче
Обработка MPTCP sk_forward_memory немного особенная, поскольку это поле
защищено спин-блокировкой сокета msk, а не обычной
блокировкой сокета.
В настоящее время у нас есть путь кода, обновляющий это поле без обработки
соответствующей блокировки:
__mptcp_retrans() -> __mptcp_clean_una_wakeup()
Несколько вспомогательных функций в __mptcp_clean_una_wakeup() будут обновлять
sk_forward_alloc, что может привести к повреждению этого поля, как сообщил
Маттье.
Для решения этой проблемы предоставляется и используется новый вариант обвиняемой функции,
который явно получает спин-блокировку msk.
CVE-2023-52524В ядре Linux устранена следующая уязвимость:
net: nfc: llcp: Добавление блокировки при изменении списка устройств.
При изменении списка устройств необходимо удерживать связанную с ним блокировку, иначе список может быть поврежден, как обнаружил syzbot.
CVE-2023-52505В ядре Linux устранена следующая уязвимость:
phy: lynx-28g: сериализовать параллельные вызовы phy_set_mode_ext() к общим регистрам.
Регистры конфигурации преобразователя протокола PCC8, PCCC, PCCD (реализованные драйвером), а также другие, управляют преобразователями протокола из нескольких линий (каждая представлена как отдельная struct phy). Поэтому, если есть одновременные вызовы phy_set_mode_ext() к линиям, совместно использующим один и тот же регистр PCC (либо для "старого", либо для "нового" протокола), возможно повреждение значений, запрограммированных в оборудование, поскольку lynx_28g_rmw() не имеет блокировки.
Добавьте спин-блокировку в struct lynx_28g_priv, совместно используемую всеми линиями, и возьмите глобальную спин-блокировку из реализации phy_ops :: set_mode(). Нет других вызывающих сторон, которые изменяют регистры PCC.
CVE-2025-54510Отсутствующая проверка блокировки в прошивке AMD Secure Processor (ASP) может позволить локально аутентифицированному злоумышленнику с административными привилегиями изменять маршрутизацию MMIO на некоторых продуктах на основе Zen 5, что может поставить под угрозу целостность гостевых систем.
CVE-2023-5447Отсутствие проверки блокировки в SynHsaService может привести к состоянию use-after-free, которое вызывает ненормальное завершение работы службы, что приводит к отказу в обслуживании для Synaptics Hardware Support App.
CVE-2022-48810В ядре Linux устранена следующая уязвимость:
ipmr,ip6mr: получение RTNL перед вызовом ip[6]mr_free_table() при сбое.
ip[6]mr_free_table() можно вызывать только под блокировкой RTNL.
RTNL: assertion failed at net/core/dev.c (10367)
WARNING: CPU: 1 PID: 5890 at net/core/dev.c:10367 unregister_netdevice_many+0x1246/0x1850 net/core/dev.c:10367
Modules linked in:
CPU: 1 PID: 5890 Comm: syz-executor.2 Not tainted 5.16.0-syzkaller-11627-g422ee58dc0ef #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:unregister_netdevice_many+0x1246/0x1850 net/core/dev.c:10367
Code: 0f 85 9b ee ff ff e8 69 07 4b fa ba 7f 28 00 00 48 c7 c6 00 90 ae 8a 48 c7 c7 40 90 ae 8a c6 05 6d b1 51 06 01 e8 8c 90 d8 01 <0f> 0b e9 70 ee ff ff e8 3e 07 4b fa 4c 89 e7 e8 86 2a 59 fa e9 ee
RSP: 0018:ffffc900046ff6e0 EFLAGS: 00010286
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
RDX: ffff888050f51d00 RSI: ffffffff815fa008 RDI: fffff520008dfece
RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
R10: ffffffff815f3d6e R11: 0000000000000000 R12: 00000000fffffff4
R13: dffffc0000000000 R14: ffffc900046ff750 R15: ffff88807b7dc000
FS: 00007f4ab736e700(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fee0b4f8990 CR3: 000000001e7d2000 CR4: 00000000003506e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
mroute_clean_tables+0x244/0xb40 net/ipv6/ip6mr.c:1509
ip6mr_free_table net/ipv6/ip6mr.c:389 [inline]
ip6mr_rules_init net/ipv6/ip6mr.c:246 [inline]
ip6mr_net_init net/ipv6/ip6mr.c:1306 [inline]
ip6mr_net_init+0x3f0/0x4e0 net/ipv6/ip6mr.c:1298
ops_init+0xaf/0x470 net/core/net_namespace.c:140
setup_net+0x54f/0xbb0 net/core/net_namespace.c:331
copy_net_ns+0x318/0x760 net/core/net_namespace.c:475
create_new_namespaces+0x3f6/0xb20 kernel/nsproxy.c:110
copy_namespaces+0x391/0x450 kernel/nsproxy.c:178
copy_process+0x2e0c/0x7300 kernel/fork.c:2167
kernel_clone+0xe7/0xab0 kernel/fork.c:2555
__do_sys_clone+0xc8/0x110 kernel/fork.c:2672
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x44/0xae
RIP: 0033:0x7f4ab89f9059
Code: Unable to access opcode bytes at RIP 0x7f4ab89f902f.
RSP: 002b:00007f4ab736e118 EFLAGS: 00000206 ORIG_RAX: 0000000000000038
RAX: ffffffffffffffda RBX: 00007f4ab8b0bf60 RCX: 00007f4ab89f9059
RDX: 0000000020000280 RSI: 0000000020000270 RDI: 0000000040200000
RBP: 00007f4ab8a5308d R08: 0000000020000300 R09: 0000000020000300
R10: 00000000200002c0 R11: 0000000000000206 R12: 0000000000000000
R13: 00007ffc3977cc1f R14: 00007f4ab736e300 R15: 0000000000022000
</TASK>
CVE-2025-54625Уязвимость состояния гонки в модуле файловой системы ядра.
Влияние: Успешная эксплуатация этой уязвимости может повлиять на доступность.
Дополнительная информация из источника [1]: не удалось извлечь релевантную техническую информацию.
Источники:
- [1] https://consumer.huawei.com/en/support/bulletin/2025/8/
CVE-2023-52635В ядре Linux устранена следующая уязвимость:
PM / devfreq: Синхронизировать devfreq_monitor_[start/stop]
Существует вероятность того, что частая смена governor в цикле приведет к повреждению списка таймеров, когда отмена таймера выполняется из двух мест: сначала из cancel_delayed_work_sync(), а затем из expire_timers(), что можно увидеть из трассировок [1].
while true
do
echo "simple_ondemand" > /sys/class/devfreq/1d84000.ufshc/governor
echo "performance" > /sys/class/devfreq/1d84000.ufshc/governor
done
Похоже, что проблема в драйвере devfreq, где device_monitor_[start/stop] необходимо синхронизировать, чтобы отложенная работа не была повреждена во время ее постановки в очередь, выполнения или отмены.
Давайте использовать флаг опроса и блокировку devfreq для синхронизации постановки экземпляра таймера в очередь дважды и повреждения рабочих данных.
[1]
...
..
<idle>-0 [003] 9436.209662: timer_cancel timer=0xffffff80444f0428
<idle>-0 [003] 9436.209664: timer_expire_entry timer=0xffffff80444f0428 now=0x10022da1c function=__typeid__ZTSFvP10timer_listE_global_addr baseclk=0x10022da1c
<idle>-0 [003] 9436.209718: timer_expire_exit timer=0xffffff80444f0428
kworker/u16:6-14217 [003] 9436.209863: timer_start timer=0xffffff80444f0428 function=__typeid__ZTSFvP10timer_listE_global_addr expires=0x10022da2b now=0x10022da1c flags=182452227
vendor.xxxyyy.ha-1593 [004] 9436.209888: timer_cancel timer=0xffffff80444f0428
vendor.xxxyyy.ha-1593 [004] 9436.216390: timer_init timer=0xffffff80444f0428
vendor.xxxyyy.ha-1593 [004] 9436.216392: timer_start timer=0xffffff80444f0428 function=__typeid__ZTSFvP10timer_listE_global_addr expires=0x10022da2c now=0x10022da1d flags=186646532
vendor.xxxyyy.ha-1593 [005] 9436.220992: timer_cancel timer=0xffffff80444f0428
xxxyyyTraceManag-7795 [004] 9436.261641: timer_cancel timer=0xffffff80444f0428
[2]
9436.261653][ C4] Невозможно обработать запрос подкачки ядра по виртуальному адресу dead00000000012a
[ 9436.261664][ C4] Информация об аборте памяти:
[ 9436.261666][ C4] ESR = 0x96000044
[ 9436.261669][ C4] EC = 0x25: DABT (текущий EL), IL = 32 бита
[ 9436.261671][ C4] SET = 0, FnV = 0
[ 9436.261673][ C4] EA = 0, S1PTW = 0
[ 9436.261675][ C4] Информация об аборте данных:
[ 9436.261677][ C4] ISV = 0, ISS = 0x00000044
[ 9436.261680][ C4] CM = 0, WnR = 1
[ 9436.261682][ C4] [dead00000000012a] адрес между диапазонами адресов пользователя и ядра
[ 9436.261685][ C4] Внутренняя ошибка: Oops: 96000044 [#1] PREEMPT SMP
[ 9436.261701][ C4] Пропустить дамп буфера md ftrace для: 0x3a982d0
...
[ 9436.262138][ C4] CPU: 4 PID: 7795 Comm: TraceManag Tainted: G S W O 5.10.149-android12-9-o-g17f915d29d0c #1
[ 9436.262141][ C4] Имя оборудования: Qualcomm Technologies, Inc. (DT)
[ 9436.262144][ C4] pstate: 22400085 (nzCv daIf +PAN -UAO +TCO BTYPE=--)
[ 9436.262161][ C4] pc : expire_timers+0x9c/0x438
[ 9436.262164][ C4] lr : expire_timers+0x2a4/0x438
[ 9436.262168][ C4] sp : ffffffc010023dd0
[ 9436.262171][ C4] x29: ffffffc010023df0 x28: ffffffd0636fdc18
[ 9436.262178][ C4] x27: ffffffd063569dd0 x26: ffffffd063536008
[ 9436.262182][ C4] x25: 0000000000000001 x24: ffffff88f7c69280
[ 9436.262185][ C4] x23: 00000000000000e0 x22: dead000000000122
[ 9436.262188][ C4] x21: 000000010022da29 x20: ffffff8af72b4e80
[ 9436.262191][ C4] x19: ffffffc010023e50 x18: ffffffc010025038
[ 9436.262195][ C4] x17: 0000000000000240 x16: 0000000000000201
[ 9436.262199][ C4] x15: ffffffffffffffff x14: ffffff889f3c3100
[ 9436.262203][ C4] x13: ffffff889f3c3100 x12: 00000000049f56b8
[ 9436.262207][ C4] x11: 00000000049f56b8 x10: 00000000ffffffff
[ 9436.262212][ C4] x9 : ffffffc010023e50 x8 : dead000000000122
[ 9436.262216][ C4] x7 : ffffffffffffffff x6 : ffffffc0100239d8
[ 9436.262220][ C4] x5 : 0000000000000000 x4 : 0000000000000101
[ 9436.262223][ C4] x3 : 0000000000000080 x2 : ffffff8
---truncated---
CVE-2023-52493В ядре Linux устранена следующая уязвимость:
bus: mhi: host: Удалите блокировку канала перед постановкой буферов в очередь.
Убедитесь, что блокировки чтения и записи для канала не берутся последовательно, отбрасывая блокировку чтения из parse_xfer_event(), чтобы обратный вызов, предоставленный клиенту, мог потенциально ставить буферы в очередь и получать блокировку записи в этом процессе. Любая постановка буферов в очередь должна выполняться без полученной блокировки чтения канала, так как это может привести к множеству блокировок и программной блокировке.
[mani: добавил тег fixes и cc'ed stable]
CVE-2021-47512В ядре Linux устранена следующая уязвимость:
net/sched: fq_pie: предотвратить проблему разборки.
По какой-то причине fq_pie_destroy() не скопировала рабочий код из pie_destroy() и других qdisc, что вызвало трудноуловимую ошибку.
Перед вызовом del_timer_sync(&q->adapt_timer) необходимо убедиться, что таймер не перезапустится.
rcu: INFO: rcu_preempt self-detected stall on CPU
rcu: 0-....: (4416 ticks this GP) idle=60d/1/0x4000000000000000 softirq=10433/10434 fqs=2579
(t=10501 jiffies g=13085 q=3989)
NMI backtrace for cpu 0
CPU: 0 PID: 13 Comm: ksoftirqd/0 Not tainted 5.16.0-rc4-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
nmi_cpu_backtrace.cold+0x47/0x144 lib/nmi_backtrace.c:111
nmi_trigger_cpumask_backtrace+0x1b3/0x230 lib/nmi_backtrace.c:62
trigger_single_cpu_backtrace include/linux/nmi.h:164 [inline]
rcu_dump_cpu_stacks+0x25e/0x3f0 kernel/rcu/tree_stall.h:343
print_cpu_stall kernel/rcu/tree_stall.h:627 [inline]
check_cpu_stall kernel/rcu/tree_stall.h:711 [inline]
rcu_pending kernel/rcu/tree.c:3878 [inline]
rcu_sched_clock_irq.cold+0x9d/0x746 kernel/rcu/tree.c:2597
update_process_times+0x16d/0x200 kernel/time/timer.c:1785
tick_sched_handle+0x9b/0x180 kernel/time/tick-sched.c:226
tick_sched_timer+0x1b0/0x2d0 kernel/time/tick-sched.c:1428
__run_hrtimer kernel/time/hrtimer.c:1685 [inline]
__hrtimer_run_queues+0x1c0/0xe50 kernel/time/hrtimer.c:1749
hrtimer_interrupt+0x31c/0x790 kernel/time/hrtimer.c:1811
local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1086 [inline]
__sysvec_apic_timer_interrupt+0x146/0x530 arch/x86/kernel/apic/apic.c:1103
sysvec_apic_timer_interrupt+0x8e/0xc0 arch/x86/kernel/apic/apic.c:1097
</IRQ>
<TASK>
asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:638
RIP: 0010:write_comp_data kernel/kcov.c:221 [inline]
RIP: 0010:__sanitizer_cov_trace_const_cmp1+0x1d/0x80 kernel/kcov.c:273
Code: 54 c8 20 48 89 10 c3 66 0f 1f 44 00 00 53 41 89 fb 41 89 f1 bf 03 00 00 00 65 48 8b 0c 25 40 70 02 00 48 89 ce 4c 8b 54 24 08 <e8> 4e f7 ff ff 84 c0 74 51 48 8b 81 88 15 00 00 44 8b 81 84 15 00
RSP: 0018:ffffc90000d27b28 EFLAGS: 00000246
RAX: 0000000000000000 RBX: ffff888064bf1bf0 RCX: ffff888011928000
RDX: ffff888011928000 RSI: ffff888011928000 RDI: 0000000000000003
RBP: ffff888064bf1c28 R08: 0000000000000000 R09: 0000000000000000
R10: ffffffff875d8295 R11: 0000000000000000 R12: 0000000000000000
R13: ffff8880783dd300 R14: 0000000000000000 R15: 0000000000000000
pie_calculate_probability+0x405/0x7c0 net/sched/sch_pie.c:418
fq_pie_timer+0x170/0x2a0 net/sched/sch_fq_pie.c:383
call_timer_fn+0x1a5/0x6b0 kernel/time/timer.c:1421
expire_timers kernel/time/timer.c:1466 [inline]
__run_timers.part.0+0x675/0xa20 kernel/time/timer.c:1734
__run_timers kernel/time/timer.c:1715 [inline]
run_timer_softirq+0xb3/0x1d0 kernel/time/timer.c:1747
__do_softirq+0x29b/0x9c2 kernel/softirq.c:558
run_ksoftirqd kernel/softirq.c:921 [inline]
run_ksoftirqd+0x2d/0x60 kernel/softirq.c:913
smpboot_thread_fn+0x645/0x9c0 kernel/smpboot.c:164
kthread+0x405/0x4f0 kernel/kthread.c:327
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
</TASK>
CVE-2024-26631В ядре Linux устранена следующая уязвимость:
ipv6: mcast: исправление data-race в ipv6_mc_down / mld_ifc_work
idev->mc_ifc_count может быть перезаписан без надлежащей блокировки.
Первоначально обнаружено syzbot [1], исправьте эту проблему, заключив вызовы mld_ifc_stop_work() (и mld_gq_stop_work() для надежности) с mutex_lock() и mutex_unlock() соответственно, поскольку эти функции должны вызываться только с mc_lock в соответствии с их объявлениями.
[1]
BUG: KCSAN: data-race in ipv6_mc_down / mld_ifc_work
запись в 0xffff88813a80c832 1 байта задачей 3771 на процессоре 0:
mld_ifc_stop_work net/ipv6/mcast.c:1080 [inline]
ipv6_mc_down+0x10a/0x280 net/ipv6/mcast.c:2725
addrconf_ifdown+0xe32/0xf10 net/ipv6/addrconf.c:3949
addrconf_notify+0x310/0x980
notifier_call_chain kernel/notifier.c:93 [inline]
raw_notifier_call_chain+0x6b/0x1c0 kernel/notifier.c:461
__dev_notify_flags+0x205/0x3d0
dev_change_flags+0xab/0xd0 net/core/dev.c:8685
do_setlink+0x9f6/0x2430 net/core/rtnetlink.c:2916
rtnl_group_changelink net/core/rtnetlink.c:3458 [inline]
__rtnl_newlink net/core/rtnetlink.c:3717 [inline]
rtnl_newlink+0xbb3/0x1670 net/core/rtnetlink.c:3754
rtnetlink_rcv_msg+0x807/0x8c0 net/core/rtnetlink.c:6558
netlink_rcv_skb+0x126/0x220 net/netlink/af_netlink.c:2545
rtnetlink_rcv+0x1c/0x20 net/core/rtnetlink.c:6576
netlink_unicast_kernel net/netlink/af_netlink.c:1342 [inline]
netlink_unicast+0x589/0x650 net/netlink/af_netlink.c:1368
netlink_sendmsg+0x66e/0x770 net/netlink/af_netlink.c:1910
...
запись в 0xffff88813a80c832 1 байта задачей 22 на процессоре 1:
mld_ifc_work+0x54c/0x7b0 net/ipv6/mcast.c:2653
process_one_work kernel/workqueue.c:2627 [inline]
process_scheduled_works+0x5b8/0xa30 kernel/workqueue.c:2700
worker_thread+0x525/0x730 kernel/workqueue.c:2781
...