kernel-5.14.0-427.35.1.el9_4
エラータID: AXSA:2024-8827:29
以下項目について対処しました。
[Security Fix]
- efivarfs には、リマウント時にパーミッションフラグの
チェックがされないことによりクラッシュを起こす問題が
あるため、ローカルの攻撃者により、巧妙に細工された
コマンド実行を介して、サービス拒否攻撃を可能とする
脆弱性が存在します。(CVE-2023-52463)
- drivers/iommu/iommufd/io_pagetable.c の
iopt_area_split() 関数には、メモリ破壊により解放後利用
を起こす問題があるため、ローカルの攻撃者により、巧妙
に細工されたデバイスを介して、サービス拒否攻撃を可能
とする脆弱性が存在します。(CVE-2023-52801)
- fs/nfsd/nfs4state.c には、関数の実装に問題があり
プロトコル違反を起こすため、ローカルの攻撃者により、
NFS を介して、サービス妨害を可能とする脆弱性が存在
します。(CVE-2024-26629)
- mm/filemap.c の filemap_cachestat() 関数には、
キャッシュウォーク処理におけるメモリ領域の解放後利用
の問題があるため、ローカルの攻撃者により、情報の漏洩、
およびサービス拒否攻撃を可能とする脆弱性が存在します。
(CVE-2024-26630)
- mm/page-writeback.c の wb_dirty_limits() 関数には、
潜在的にゼロ除算エラーを発生させてしまう問題がある
ため、ローカルの攻撃者により、サービス拒否攻撃を可能
とする脆弱性が存在します。(CVE-2024-26720)
- Bluetooth サブシステムの net/bluetooth/af_bluetooth.c
には、デッドロックの発生、およびメモリ領域の解放後利用
の問題があるため、リモートの攻撃者により、サービス拒否
攻撃を可能とする脆弱性が存在します。(CVE-2024-26886)
- arch/x86/kernel/kprobes/core.c の
arch_adjust_kprobe_addr() 関数には、不正なアドレスから
データを読み取ってしまう問題があるため、ローカルの
攻撃者により、サービス拒否攻撃 (カーネルパニックの発生)
を可能とする脆弱性が存在します。(CVE-2024-26946)
- arch/x86/kvm/svm/sev.c の svm_register_enc_region()
関数には、メモリ領域の解放後利用の問題があるため、
ローカルの攻撃者により、サービス拒否攻撃を可能とする
脆弱性が存在します。(CVE-2024-35791)
- mm/filemap.c の filemap_cachestat() 関数には、スワップ
領域に関するチェック処理が欠落しているため、ローカルの
攻撃者により、サービス拒否攻撃を可能とする脆弱性が存在
します。(CVE-2024-35797)
- x86 アーキテクチャ向けのConfidential Computing
サブシステムには、RDRAND 命令以外の方法で生成した乱数
のシード値は推測可能である問題があるため、ローカルの
攻撃者により、仮想マシンの機密性の維持が不可能となる
脆弱性が存在します。(CVE-2024-35875)
- mm/hugetlb.c の alloc_huge_page() 関数には、ロック
漏れに起因するリソース競合の問題があるため、ローカル
の攻撃者により、サービス妨害を可能とする脆弱性が存在
します。(CVE-2024-36000)
- drivers/base/regmap/regcache-maple.c の
regcache_maple_drop() 関数には、キャッシュ領域が破壊
されてしまう問題があるため、ローカルの攻撃者により、
巧妙に細工されたデバイスを介して、サービス妨害を可能
とする脆弱性が存在します。(CVE-2024-36019)
- net/core/net_namespace.c には、レースコンディション
に起因したメモリ領域の範囲外アクセスの問題があるため、
ローカルの攻撃者により、特権昇格、およびサービス拒否
攻撃 (カーネルクラッシュの発生) を可能とする脆弱性が
存在します。(CVE-2024-36883)
- net/bridge/br_mst.c には、VLAN の管理データの解放後
利用の問題があるため、ローカルの攻撃者により、サービス
拒否攻撃を可能とする脆弱性が存在します。
(CVE-2024-36979)
- drivers/scsi/qedf/qedf_debugfs.c の
qedf_dbg_debug_cmd_write() 関数には、境界外読み込みを
起こしてしまう問題があるため、ローカルの攻撃者により、
debugfs を巧妙に操作することを介して、情報漏洩を可能
とする脆弱性が存在します。(CVE-2024-38559)
- drivers/usb/storage/alauda.c の alauda_check_media()
関数には、メディアの初期化状態のチェック処理の不備に
起因した除算エラーの問題があるため、ローカルの攻撃者
により、サービス拒否攻撃を可能とする脆弱性が存在します。
(CVE-2024-38619)
- drivers/usb/host/xhci-ring.c には、複数のストリーム
が使用されているエンドポイントの機器が停止した際に、
複数のストリームのキャッシュをクリアするためのコマンド
をキューに発行していない問題があるため、ローカルの
攻撃者により、データ破壊、およびサービス拒否攻撃を
可能とする脆弱性が存在します。(CVE-2024-40927)
- drivers/cxl/core/region.c の devm_cxl_add_region()
関数には、メモリリークの問題があるため、ローカルの
攻撃者により、サービス拒否攻撃を可能とする脆弱性が
存在します。(CVE-2024-40936)
- net/sched/act_ct.c の tcf_ct_act() 関数には、メモリ
の解放後利用の問題があるため、ローカルの攻撃者により、
巧妙に細工された設定を介して、サービス拒否攻撃を可能
とする脆弱性が存在します。(CVE-2024-41040)
- drivers/net/ppp/ppp_generic.c には、データサイズが
不正な LCP パケットのチェック処理が欠落しているため、
ローカルの攻撃者により、細工された PPP LCP パケット
の処理を介して、サービス拒否攻撃を可能とする脆弱性
が存在します。(CVE-2024-41044)
- include/linux/mmzone.h の subsection_map_index() 関数
には、チェックが欠けていることにより、NULL ポインタ
デリファレンスを起こす問題があるため、ローカルの攻撃者
により、巧妙に細工された設定を介して、サービス拒否攻撃
を可能とする脆弱性が存在します。(CVE-2024-41055)
- drivers/nvme/host/core.c の nvme_cleanup_cmd() 関数には、
フラグ値のクリア処理の欠落に起因したメモリ領域の二重解放
の問題があるため、ローカルの攻撃者により、サービス拒否
攻撃を可能とする脆弱性が存在します。(CVE-2024-41073)
- drivers/pci/msi/msi.c には、メモリの解放後利用の問題が
あるため、 ローカルの攻撃者により、エラーパスを介して、
サービス拒否攻撃を可能とする脆弱性が存在します。
(CVE-2024-41096)
- net/core/xdp.c の __xdp_reg_mem_model() 関数には、
メモリが割り当てられない、もしくはデータが適切に初期化
されていないなどの理由により __mem_id_init_hash_table()
関数が失敗した際、意図しない警告メッセージが出力されて
しまう問題があるため、ローカルの攻撃者により、サービス
拒否攻撃を可能とする脆弱性が存在します。(CVE-2024-42082)
- x86 アーキテクチャには、profile_pc() 関数がシンプル
なスタックレイアウトのみを想定している問題があるため、
ローカルの攻撃者により、デバッグ機能を有効にすることを
介して、サービス妨害を可能とする脆弱性が存在します。
(CVE-2024-42096)
- 32 ビット環境における mm/page-writeback.c の
wb_dirty_limits() 関数には、64 ビット整数型へのキャスト
処理の誤った削除に起因した整数オーバーフローの問題が
あるため、ローカルの攻撃者により、メモリ破壊、および
サービス拒否攻撃 (性能の低下) を可能とする脆弱性が存在
します。(CVE-2024-42102)
- mm/page-writeback.c には、ダーティースロットリング処理
におけるダーティーリミット値のオーバーフローの問題がある
ため、特権を持つローカルの攻撃者により、16 TByte 以上の
ダーティーリミット値の設定を介して、サービス拒否攻撃を
可能とする脆弱性が存在します。(CVE-2024-42131)
パッケージをアップデートしてください。
In the Linux kernel, the following vulnerability has been resolved: efivarfs: force RO when remounting if SetVariable is not supported If SetVariable at runtime is not supported by the firmware we never assign a callback for that function. At the same time mount the efivarfs as RO so no one can call that. However, we never check the permission flags when someone remounts the filesystem as RW. As a result this leads to a crash looking like this: $ mount -o remount,rw /sys/firmware/efi/efivars $ efi-updatevar -f PK.auth PK [ 303.279166] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 [ 303.280482] Mem abort info: [ 303.280854] ESR = 0x0000000086000004 [ 303.281338] EC = 0x21: IABT (current EL), IL = 32 bits [ 303.282016] SET = 0, FnV = 0 [ 303.282414] EA = 0, S1PTW = 0 [ 303.282821] FSC = 0x04: level 0 translation fault [ 303.283771] user pgtable: 4k pages, 48-bit VAs, pgdp=000000004258c000 [ 303.284913] [0000000000000000] pgd=0000000000000000, p4d=0000000000000000 [ 303.286076] Internal error: Oops: 0000000086000004 [#1] PREEMPT SMP [ 303.286936] Modules linked in: qrtr tpm_tis tpm_tis_core crct10dif_ce arm_smccc_trng rng_core drm fuse ip_tables x_tables ipv6 [ 303.288586] CPU: 1 PID: 755 Comm: efi-updatevar Not tainted 6.3.0-rc1-00108-gc7d0c4695c68 #1 [ 303.289748] Hardware name: Unknown Unknown Product/Unknown Product, BIOS 2023.04-00627-g88336918701d 04/01/2023 [ 303.291150] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 303.292123] pc : 0x0 [ 303.292443] lr : efivar_set_variable_locked+0x74/0xec [ 303.293156] sp : ffff800008673c10 [ 303.293619] x29: ffff800008673c10 x28: ffff0000037e8000 x27: 0000000000000000 [ 303.294592] x26: 0000000000000800 x25: ffff000002467400 x24: 0000000000000027 [ 303.295572] x23: ffffd49ea9832000 x22: ffff0000020c9800 x21: ffff000002467000 [ 303.296566] x20: 0000000000000001 x19: 00000000000007fc x18: 0000000000000000 [ 303.297531] x17: 0000000000000000 x16: 0000000000000000 x15: 0000aaaac807ab54 [ 303.298495] x14: ed37489f673633c0 x13: 71c45c606de13f80 x12: 47464259e219acf4 [ 303.299453] x11: ffff000002af7b01 x10: 0000000000000003 x9 : 0000000000000002 [ 303.300431] x8 : 0000000000000010 x7 : ffffd49ea8973230 x6 : 0000000000a85201 [ 303.301412] x5 : 0000000000000000 x4 : ffff0000020c9800 x3 : 00000000000007fc [ 303.302370] x2 : 0000000000000027 x1 : ffff000002467400 x0 : ffff000002467000 [ 303.303341] Call trace: [ 303.303679] 0x0 [ 303.303938] efivar_entry_set_get_size+0x98/0x16c [ 303.304585] efivarfs_file_write+0xd0/0x1a4 [ 303.305148] vfs_write+0xc4/0x2e4 [ 303.305601] ksys_write+0x70/0x104 [ 303.306073] __arm64_sys_write+0x1c/0x28 [ 303.306622] invoke_syscall+0x48/0x114 [ 303.307156] el0_svc_common.constprop.0+0x44/0xec [ 303.307803] do_el0_svc+0x38/0x98 [ 303.308268] el0_svc+0x2c/0x84 [ 303.308702] el0t_64_sync_handler+0xf4/0x120 [ 303.309293] el0t_64_sync+0x190/0x194 [ 303.309794] Code: ???????? ???????? ???????? ???????? (????????) [ 303.310612] ---[ end trace 0000000000000000 ]--- Fix this by adding a .reconfigure() function to the fs operations which we can use to check the requested flags and deny anything that's not RO if the firmware doesn't implement SetVariable at runtime.
In the Linux kernel, the following vulnerability has been resolved: iommufd: Fix missing update of domains_itree after splitting iopt_area In iopt_area_split(), if the original iopt_area has filled a domain and is linked to domains_itree, pages_nodes have to be properly reinserted. Otherwise the domains_itree becomes corrupted and we will UAF.
In the Linux kernel, the following vulnerability has been resolved: nfsd: fix RELEASE_LOCKOWNER The test on so_count in nfsd4_release_lockowner() is nonsense and harmful. Revert to using check_for_locks(), changing that to not sleep. First: harmful. As is documented in the kdoc comment for nfsd4_release_lockowner(), the test on so_count can transiently return a false positive resulting in a return of NFS4ERR_LOCKS_HELD when in fact no locks are held. This is clearly a protocol violation and with the Linux NFS client it can cause incorrect behaviour. If RELEASE_LOCKOWNER is sent while some other thread is still processing a LOCK request which failed because, at the time that request was received, the given owner held a conflicting lock, then the nfsd thread processing that LOCK request can hold a reference (conflock) to the lock owner that causes nfsd4_release_lockowner() to return an incorrect error. The Linux NFS client ignores that NFS4ERR_LOCKS_HELD error because it never sends NFS4_RELEASE_LOCKOWNER without first releasing any locks, so it knows that the error is impossible. It assumes the lock owner was in fact released so it feels free to use the same lock owner identifier in some later locking request. When it does reuse a lock owner identifier for which a previous RELEASE failed, it will naturally use a lock_seqid of zero. However the server, which didn't release the lock owner, will expect a larger lock_seqid and so will respond with NFS4ERR_BAD_SEQID. So clearly it is harmful to allow a false positive, which testing so_count allows. The test is nonsense because ... well... it doesn't mean anything. so_count is the sum of three different counts. 1/ the set of states listed on so_stateids 2/ the set of active vfs locks owned by any of those states 3/ various transient counts such as for conflicting locks. When it is tested against '2' it is clear that one of these is the transient reference obtained by find_lockowner_str_locked(). It is not clear what the other one is expected to be. In practice, the count is often 2 because there is precisely one state on so_stateids. If there were more, this would fail. In my testing I see two circumstances when RELEASE_LOCKOWNER is called. In one case, CLOSE is called before RELEASE_LOCKOWNER. That results in all the lock states being removed, and so the lockowner being discarded (it is removed when there are no more references which usually happens when the lock state is discarded). When nfsd4_release_lockowner() finds that the lock owner doesn't exist, it returns success. The other case shows an so_count of '2' and precisely one state listed in so_stateid. It appears that the Linux client uses a separate lock owner for each file resulting in one lock state per lock owner, so this test on '2' is safe. For another client it might not be safe. So this patch changes check_for_locks() to use the (newish) find_any_file_locked() so that it doesn't take a reference on the nfs4_file and so never calls nfsd_file_put(), and so never sleeps. With this check is it safe to restore the use of check_for_locks() rather than testing so_count against the mysterious '2'.
In the Linux kernel, the following vulnerability has been resolved: mm: cachestat: fix folio read-after-free in cache walk In cachestat, we access the folio from the page cache's xarray to compute its page offset, and check for its dirty and writeback flags. However, we do not hold a reference to the folio before performing these actions, which means the folio can concurrently be released and reused as another folio/page/slab. Get around this altogether by just using xarray's existing machinery for the folio page offsets and dirty/writeback states. This changes behavior for tmpfs files to now always report zeroes in their dirty and writeback counters. This is okay as tmpfs doesn't follow conventional writeback cache behavior: its pages get "cleaned" during swapout, after which they're no longer resident etc.
In the Linux kernel, the following vulnerability has been resolved: mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again (struct dirty_throttle_control *)->thresh is an unsigned long, but is passed as the u32 divisor argument to div_u64(). On architectures where unsigned long is 64 bytes, the argument will be implicitly truncated. Use div64_u64() instead of div_u64() so that the value used in the "is this a safe division" check is the same as the divisor. Also, remove redundant cast of the numerator to u64, as that should happen implicitly. This would be difficult to exploit in memcg domain, given the ratio-based arithmetic domain_drity_limits() uses, but is much easier in global writeback domain with a BDI_CAP_STRICTLIMIT-backing device, using e.g. vm.dirty_bytes=(1<<32)*PAGE_SIZE so that dtc->thresh == (1<<32)
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: af_bluetooth: Fix deadlock Attemting to do sock_lock on .recvmsg may cause a deadlock as shown bellow, so instead of using sock_sock this uses sk_receive_queue.lock on bt_sock_ioctl to avoid the UAF: INFO: task kworker/u9:1:121 blocked for more than 30 seconds. Not tainted 6.7.6-lemon #183 Workqueue: hci0 hci_rx_work Call Trace:
In the Linux kernel, the following vulnerability has been resolved: kprobes/x86: Use copy_from_kernel_nofault() to read from unsafe address Read from an unsafe address with copy_from_kernel_nofault() in arch_adjust_kprobe_addr() because this function is used before checking the address is in text or not. Syzcaller bot found a bug and reported the case if user specifies inaccessible data area, arch_adjust_kprobe_addr() will cause a kernel panic. [ mingo: Clarified the comment. ]
In the Linux kernel, the following vulnerability has been resolved: KVM: SVM: Flush pages under kvm->lock to fix UAF in svm_register_enc_region() Do the cache flush of converted pages in svm_register_enc_region() before dropping kvm->lock to fix use-after-free issues where region and/or its array of pages could be freed by a different task, e.g. if userspace has __unregister_enc_region_locked() already queued up for the region. Note, the "obvious" alternative of using local variables doesn't fully resolve the bug, as region->pages is also dynamically allocated. I.e. the region structure itself would be fine, but region->pages could be freed. Flushing multiple pages under kvm->lock is unfortunate, but the entire flow is a rare slow path, and the manual flush is only needed on CPUs that lack coherency for encrypted memory.
In the Linux kernel, the following vulnerability has been resolved: mm: cachestat: fix two shmem bugs When cachestat on shmem races with swapping and invalidation, there are two possible bugs: 1) A swapin error can have resulted in a poisoned swap entry in the shmem inode's xarray. Calling get_shadow_from_swap_cache() on it will result in an out-of-bounds access to swapper_spaces[]. Validate the entry with non_swap_entry() before going further. 2) When we find a valid swap entry in the shmem's inode, the shadow entry in the swapcache might not exist yet: swap IO is still in progress and we're before __remove_mapping; swapin, invalidation, or swapoff have removed the shadow from swapcache after we saw the shmem swap entry. This will send a NULL to workingset_test_recent(). The latter purely operates on pointer bits, so it won't crash - node 0, memcg ID 0, eviction timestamp 0, etc. are all valid inputs - but it's a bogus test. In theory that could result in a false "recently evicted" count. Such a false positive wouldn't be the end of the world. But for code clarity and (future) robustness, be explicit about this case. Bail on get_shadow_from_swap_cache() returning NULL.
In the Linux kernel, the following vulnerability has been resolved: x86/coco: Require seeding RNG with RDRAND on CoCo systems There are few uses of CoCo that don't rely on working cryptography and hence a working RNG. Unfortunately, the CoCo threat model means that the VM host cannot be trusted and may actively work against guests to extract secrets or manipulate computation. Since a malicious host can modify or observe nearly all inputs to guests, the only remaining source of entropy for CoCo guests is RDRAND. If RDRAND is broken -- due to CPU hardware fault -- the RNG as a whole is meant to gracefully continue on gathering entropy from other sources, but since there aren't other sources on CoCo, this is catastrophic. This is mostly a concern at boot time when initially seeding the RNG, as after that the consequences of a broken RDRAND are much more theoretical. So, try at boot to seed the RNG using 256 bits of RDRAND output. If this fails, panic(). This will also trigger if the system is booted without RDRAND, as RDRAND is essential for a safe CoCo boot. Add this deliberately to be "just a CoCo x86 driver feature" and not part of the RNG itself. Many device drivers and platforms have some desire to contribute something to the RNG, and add_device_randomness() is specifically meant for this purpose. Any driver can call it with seed data of any quality, or even garbage quality, and it can only possibly make the quality of the RNG better or have no effect, but can never make it worse. Rather than trying to build something into the core of the RNG, consider the particular CoCo issue just a CoCo issue, and therefore separate it all out into driver (well, arch/platform) code. [ bp: Massage commit message. ]
In the Linux kernel, the following vulnerability has been resolved: mm/hugetlb: fix missing hugetlb_lock for resv uncharge There is a recent report on UFFDIO_COPY over hugetlb: https://lore.kernel.org/all/000000000000ee06de0616177560@google.com/ 350: lockdep_assert_held(&hugetlb_lock); Should be an issue in hugetlb but triggered in an userfault context, where it goes into the unlikely path where two threads modifying the resv map together. Mike has a fix in that path for resv uncharge but it looks like the locking criteria was overlooked: hugetlb_cgroup_uncharge_folio_rsvd() will update the cgroup pointer, so it requires to be called with the lock held.
In the Linux kernel, the following vulnerability has been resolved: regmap: maple: Fix cache corruption in regcache_maple_drop() When keeping the upper end of a cache block entry, the entry[] array must be indexed by the offset from the base register of the block, i.e. max - mas.index. The code was indexing entry[] by only the register address, leading to an out-of-bounds access that copied some part of the kernel memory over the cache contents. This bug was not detected by the regmap KUnit test because it only tests with a block of registers starting at 0, so mas.index == 0.
In the Linux kernel, the following vulnerability has been resolved: net: fix out-of-bounds access in ops_init net_alloc_generic is called by net_alloc, which is called without any locking. It reads max_gen_ptrs, which is changed under pernet_ops_rwsem. It is read twice, first to allocate an array, then to set s.len, which is later used to limit the bounds of the array access. It is possible that the array is allocated and another thread is registering a new pernet ops, increments max_gen_ptrs, which is then used to set s.len with a larger than allocated length for the variable array. Fix it by reading max_gen_ptrs only once in net_alloc_generic. If max_gen_ptrs is later incremented, it will be caught in net_assign_generic.
In the Linux kernel, the following vulnerability has been resolved: net: bridge: mst: fix vlan use-after-free syzbot reported a suspicious rcu usage[1] in bridge's mst code. While fixing it I noticed that nothing prevents a vlan to be freed while walking the list from the same path (br forward delay timer). Fix the rcu usage and also make sure we are not accessing freed memory by making br_mst_vlan_set_state use rcu read lock. [1] WARNING: suspicious RCU usage 6.9.0-rc6-syzkaller #0 Not tainted ----------------------------- net/bridge/br_private.h:1599 suspicious rcu_dereference_protected() usage! ... stack backtrace: CPU: 1 PID: 8017 Comm: syz-executor.1 Not tainted 6.9.0-rc6-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024 Call Trace:
In the Linux kernel, the following vulnerability has been resolved: scsi: qedf: Ensure the copied buf is NUL terminated Currently, we allocate a count-sized kernel buffer and copy count from userspace to that buffer. Later, we use kstrtouint on this buffer but we don't ensure that the string is terminated inside the buffer, this can lead to OOB read when using kstrtouint. Fix this issue by using memdup_user_nul instead of memdup_user.
In the Linux kernel, the following vulnerability has been resolved: usb-storage: alauda: Check whether the media is initialized The member "uzonesize" of struct alauda_info will remain 0 if alauda_init_media() fails, potentially causing divide errors in alauda_read_data() and alauda_write_lba(). - Add a member "media_initialized" to struct alauda_info. - Change a condition in alauda_check_media() to ensure the first initialization. - Add an error check for the return value of alauda_init_media().
In the Linux kernel, the following vulnerability has been resolved: xhci: Handle TD clearing for multiple streams case When multiple streams are in use, multiple TDs might be in flight when an endpoint is stopped. We need to issue a Set TR Dequeue Pointer for each, to ensure everything is reset properly and the caches cleared. Change the logic so that any N>1 TDs found active for different streams are deferred until after the first one is processed, calling xhci_invalidate_cancelled_tds() again from xhci_handle_cmd_set_deq() to queue another command until we are done with all of them. Also change the error/"should never happen" paths to ensure we at least clear any affected TDs, even if we can't issue a command to clear the hardware cache, and complain loudly with an xhci_warn() if this ever happens. This problem case dates back to commit e9df17eb1408 ("USB: xhci: Correct assumptions about number of rings per endpoint.") early on in the XHCI driver's life, when stream support was first added. It was then identified but not fixed nor made into a warning in commit 674f8438c121 ("xhci: split handling halted endpoints into two steps"), which added a FIXME comment for the problem case (without materially changing the behavior as far as I can tell, though the new logic made the problem more obvious). Then later, in commit 94f339147fc3 ("xhci: Fix failure to give back some cached cancelled URBs."), it was acknowledged again. [Mathias: commit 94f339147fc3 ("xhci: Fix failure to give back some cached cancelled URBs.") was a targeted regression fix to the previously mentioned patch. Users reported issues with usb stuck after unmounting/disconnecting UAS devices. This rolled back the TD clearing of multiple streams to its original state.] Apparently the commit author was aware of the problem (yet still chose to submit it): It was still mentioned as a FIXME, an xhci_dbg() was added to log the problem condition, and the remaining issue was mentioned in the commit description. The choice of making the log type xhci_dbg() for what is, at this point, a completely unhandled and known broken condition is puzzling and unfortunate, as it guarantees that no actual users would see the log in production, thereby making it nigh undebuggable (indeed, even if you turn on DEBUG, the message doesn't really hint at there being a problem at all). It took me *months* of random xHC crashes to finally find a reliable repro and be able to do a deep dive debug session, which could all have been avoided had this unhandled, broken condition been actually reported with a warning, as it should have been as a bug intentionally left in unfixed (never mind that it shouldn't have been left in at all). > Another fix to solve clearing the caches of all stream rings with > cancelled TDs is needed, but not as urgent. 3 years after that statement and 14 years after the original bug was introduced, I think it's finally time to fix it. And maybe next time let's not leave bugs unfixed (that are actually worse than the original bug), and let's actually get people to review kernel commits please. Fixes xHC crashes and IOMMU faults with UAS devices when handling errors/faults. Easiest repro is to use `hdparm` to mark an early sector (e.g. 1024) on a disk as bad, then `cat /dev/sdX > /dev/null` in a loop. At least in the case of JMicron controllers, the read errors end up having to cancel two TDs (for two queued requests to different streams) and the one that didn't get cleared properly ends up faulting the xHC entirely when it tries to access DMA pages that have since been unmapped, referred to by the stale TDs. This normally happens quickly (after two or three loops). After this fix, I left the `cat` in a loop running overnight and experienced no xHC failures, with all read errors recovered properly. Repro'd and tested on an Apple M1 Mac Mini (dwc3 host). On systems without an IOMMU, this bug would instead silently corrupt freed memory, making this a ---truncated---
In the Linux kernel, the following vulnerability has been resolved: cxl/region: Fix memregion leaks in devm_cxl_add_region() Move the mode verification to __create_region() before allocating the memregion to avoid the memregion leaks.
In the Linux kernel, the following vulnerability has been resolved: net/sched: Fix UAF when resolving a clash KASAN reports the following UAF: BUG: KASAN: slab-use-after-free in tcf_ct_flow_table_process_conn+0x12b/0x380 [act_ct] Read of size 1 at addr ffff888c07603600 by task handler130/6469 Call Trace:
In the Linux kernel, the following vulnerability has been resolved: ppp: reject claimed-as-LCP but actually malformed packets Since 'ppp_async_encode()' assumes valid LCP packets (with code from 1 to 7 inclusive), add 'ppp_check_packet()' to ensure that LCP packet has an actual body beyond PPP_LCP header bytes, and reject claimed-as-LCP but actually malformed data otherwise.
In the Linux kernel, the following vulnerability has been resolved: mm: prevent derefencing NULL ptr in pfn_section_valid() Commit 5ec8e8ea8b77 ("mm/sparsemem: fix race in accessing memory_section->usage") changed pfn_section_valid() to add a READ_ONCE() call around "ms->usage" to fix a race with section_deactivate() where ms->usage can be cleared. The READ_ONCE() call, by itself, is not enough to prevent NULL pointer dereference. We need to check its value before dereferencing it.
In the Linux kernel, the following vulnerability has been resolved: nvme: avoid double free special payload If a discard request needs to be retried, and that retry may fail before a new special payload is added, a double free will result. Clear the RQF_SPECIAL_LOAD when the request is cleaned.
In the Linux kernel, the following vulnerability has been resolved: PCI/MSI: Fix UAF in msi_capability_init KFENCE reports the following UAF: BUG: KFENCE: use-after-free read in __pci_enable_msi_range+0x2c0/0x488 Use-after-free read at 0x0000000024629571 (in kfence-#12): __pci_enable_msi_range+0x2c0/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28 kfence-#12: 0x0000000008614900-0x00000000e06c228d, size=104, cache=kmalloc-128 allocated by task 81 on cpu 7 at 10.808142s: __kmem_cache_alloc_node+0x1f0/0x2bc kmalloc_trace+0x44/0x138 msi_alloc_desc+0x3c/0x9c msi_domain_insert_msi_desc+0x30/0x78 msi_setup_msi_desc+0x13c/0x184 __pci_enable_msi_range+0x258/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28 freed by task 81 on cpu 7 at 10.811436s: msi_domain_free_descs+0xd4/0x10c msi_domain_free_locked.part.0+0xc0/0x1d8 msi_domain_alloc_irqs_all_locked+0xb4/0xbc pci_msi_setup_msi_irqs+0x30/0x4c __pci_enable_msi_range+0x2a8/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28 Descriptor allocation done in: __pci_enable_msi_range msi_capability_init msi_setup_msi_desc msi_insert_msi_desc msi_domain_insert_msi_desc msi_alloc_desc ... Freed in case of failure in __msi_domain_alloc_locked() __pci_enable_msi_range msi_capability_init pci_msi_setup_msi_irqs msi_domain_alloc_irqs_all_locked msi_domain_alloc_locked __msi_domain_alloc_locked => fails msi_domain_free_locked ... That failure propagates back to pci_msi_setup_msi_irqs() in msi_capability_init() which accesses the descriptor for unmasking in the error exit path. Cure it by copying the descriptor and using the copy for the error exit path unmask operation. [ tglx: Massaged change log ]
In the Linux kernel, the following vulnerability has been resolved: xdp: Remove WARN() from __xdp_reg_mem_model() syzkaller reports a warning in __xdp_reg_mem_model(). The warning occurs only if __mem_id_init_hash_table() returns an error. It returns the error in two cases: 1. memory allocation fails; 2. rhashtable_init() fails when some fields of rhashtable_params struct are not initialized properly. The second case cannot happen since there is a static const rhashtable_params struct with valid fields. So, warning is only triggered when there is a problem with memory allocation. Thus, there is no sense in using WARN() to handle this error and it can be safely removed. WARNING: CPU: 0 PID: 5065 at net/core/xdp.c:299 __xdp_reg_mem_model+0x2d9/0x650 net/core/xdp.c:299 CPU: 0 PID: 5065 Comm: syz-executor883 Not tainted 6.8.0-syzkaller-05271-gf99c5f563c17 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024 RIP: 0010:__xdp_reg_mem_model+0x2d9/0x650 net/core/xdp.c:299 Call Trace: xdp_reg_mem_model+0x22/0x40 net/core/xdp.c:344 xdp_test_run_setup net/bpf/test_run.c:188 [inline] bpf_test_run_xdp_live+0x365/0x1e90 net/bpf/test_run.c:377 bpf_prog_test_run_xdp+0x813/0x11b0 net/bpf/test_run.c:1267 bpf_prog_test_run+0x33a/0x3b0 kernel/bpf/syscall.c:4240 __sys_bpf+0x48d/0x810 kernel/bpf/syscall.c:5649 __do_sys_bpf kernel/bpf/syscall.c:5738 [inline] __se_sys_bpf kernel/bpf/syscall.c:5736 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:5736 do_syscall_64+0xfb/0x240 entry_SYSCALL_64_after_hwframe+0x6d/0x75 Found by Linux Verification Center (linuxtesting.org) with syzkaller.
In the Linux kernel, the following vulnerability has been resolved: x86: stop playing stack games in profile_pc() The 'profile_pc()' function is used for timer-based profiling, which isn't really all that relevant any more to begin with, but it also ends up making assumptions based on the stack layout that aren't necessarily valid. Basically, the code tries to account the time spent in spinlocks to the caller rather than the spinlock, and while I support that as a concept, it's not worth the code complexity or the KASAN warnings when no serious profiling is done using timers anyway these days. And the code really does depend on stack layout that is only true in the simplest of cases. We've lost the comment at some point (I think when the 32-bit and 64-bit code was unified), but it used to say: Assume the lock function has either no stack frame or a copy of eflags from PUSHF. which explains why it just blindly loads a word or two straight off the stack pointer and then takes a minimal look at the values to just check if they might be eflags or the return pc: Eflags always has bits 22 and up cleared unlike kernel addresses but that basic stack layout assumption assumes that there isn't any lock debugging etc going on that would complicate the code and cause a stack frame. It causes KASAN unhappiness reported for years by syzkaller [1] and others [2]. With no real practical reason for this any more, just remove the code. Just for historical interest, here's some background commits relating to this code from 2006: 0cb91a229364 ("i386: Account spinlocks to the caller during profiling for !FP kernels") 31679f38d886 ("Simplify profile_pc on x86-64") and a code unification from 2009: ef4512882dbe ("x86: time_32/64.c unify profile_pc") but the basics of this thing actually goes back to before the git tree.
In the Linux kernel, the following vulnerability has been resolved: Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again" Patch series "mm: Avoid possible overflows in dirty throttling". Dirty throttling logic assumes dirty limits in page units fit into 32-bits. This patch series makes sure this is true (see patch 2/2 for more details). This patch (of 2): This reverts commit 9319b647902cbd5cc884ac08a8a6d54ce111fc78. The commit is broken in several ways. Firstly, the removed (u64) cast from the multiplication will introduce a multiplication overflow on 32-bit archs if wb_thresh * bg_thresh >= 1<<32 (which is actually common - the default settings with 4GB of RAM will trigger this). Secondly, the div64_u64() is unnecessarily expensive on 32-bit archs. We have div64_ul() in case we want to be safe & cheap. Thirdly, if dirty thresholds are larger than 1<<32 pages, then dirty balancing is going to blow up in many other spectacular ways anyway so trying to fix one possible overflow is just moot.
In the Linux kernel, the following vulnerability has been resolved: mm: avoid overflows in dirty throttling logic The dirty throttling logic is interspersed with assumptions that dirty limits in PAGE_SIZE units fit into 32-bit (so that various multiplications fit into 64-bits). If limits end up being larger, we will hit overflows, possible divisions by 0 etc. Fix these problems by never allowing so large dirty limits as they have dubious practical value anyway. For dirty_bytes / dirty_background_bytes interfaces we can just refuse to set so large limits. For dirty_ratio / dirty_background_ratio it isn't so simple as the dirty limit is computed from the amount of available memory which can change due to memory hotplug etc. So when converting dirty limits from ratios to numbers of pages, we just don't allow the result to exceed UINT_MAX. This is root-only triggerable problem which occurs when the operator sets dirty limits to >16 TB.
N/A
SRPMS
- kernel-5.14.0-427.35.1.el9_4.src.rpm
MD5: ea55528fb7013841fc14b9157b4025d8
SHA-256: c01963858576ddacdf01b82a0d15cdf6c2c7db36b75434ad3fc71d3804bad3d4
Size: 138.15 MB
Asianux Server 9 for x86_64
- bpftool-7.3.0-427.35.1.el9_4.x86_64.rpm
MD5: 194bcc3dec6e0f084f319a2295a9ab8b
SHA-256: 2c03d4b7fa029221520a653b5042b12c662381ba71668ff6b2f0c7b80ed95754
Size: 5.46 MB - kernel-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 5b86a27f3c367f57ddd8006de9b5be57
SHA-256: c042f66b674c66964319aaa7b7a6994f59fcf977db02ec690f359f4d0ff7cdca
Size: 4.69 MB - kernel-abi-stablelists-5.14.0-427.35.1.el9_4.noarch.rpm
MD5: aaf98d967843a30944ef0a9d80bcc8b9
SHA-256: 88f39e039f18876fc2af98f932061a7043a51a6a44ab51f4912e20d30d0f56e6
Size: 4.71 MB - kernel-core-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 9e240f3a9fdd9b0937960da9cd398321
SHA-256: 3ea98c49f432f36a28b9c5a4257cb7e3b6ba0b37d25a86b2f760434ecffcf97f
Size: 19.56 MB - kernel-cross-headers-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: d34f0ca3afdb27d26a2aefaa93d46e22
SHA-256: 83655c8e180312b48918ed2add334dee3c275509a677b27dbe9027b0b93d5c82
Size: 11.30 MB - kernel-debug-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: d080fe7fa0d241ee0f6b30160cc56e69
SHA-256: 298f345f792a2054f12eb4fc8083d409e0182fca791ba2ee43aa7d8cb2908472
Size: 4.69 MB - kernel-debug-core-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: fa9897c92e1c5914592a580d784c6948
SHA-256: a56ec2c0fd40b98707cb4e90776da65d2fb21ec4fb92e30d0c021e77133af580
Size: 32.22 MB - kernel-debug-devel-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 6b0ec17b49bce4663f094bc036d4bd8b
SHA-256: c14974e58c8e921e29e9d7eb740f1dbcea62075ba2e0513c93d13019e2213105
Size: 24.16 MB - kernel-debug-devel-matched-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: db6e62ec0ed953f25e98b77ec83918d6
SHA-256: d1763ac00639fb3eb53662afc2956275b55b9a109ba19554f0a5ecc2b59a2041
Size: 4.69 MB - kernel-debug-modules-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 8412d8cee2bb3431b7d8e2b6e1c7e3c7
SHA-256: 3ae9a0d216a6f8edbff7a930015ded2716688d3c678e3e66e53a6a5b36432bcd
Size: 63.64 MB - kernel-debug-modules-core-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 6b061b20ab96c58b05c604ce1c01d43b
SHA-256: 346bf618219b61976881ecc204001cdc3e5ec15dee4ba6f5040ebb1fe796ec01
Size: 49.85 MB - kernel-debug-modules-extra-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 1a9ae37cc6fda8aad12e0961009b86a0
SHA-256: 0fff26e618e9755336d6739e17462ce2bfe255a7318825acbde8300a506c3be9
Size: 5.53 MB - kernel-debug-uki-virt-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: c68a50c8a76822d2dab08ec6529cd06f
SHA-256: 8c0c93277b76cd6488a252c4dbab47d1d9c00a4041494cebfe3aa7ff0ba53640
Size: 81.55 MB - kernel-devel-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: f67d90ed677fe571d90601c6820dbaa2
SHA-256: 3804049fd91e7232073309cd40f73c3097a408b049cb0a186acb0969cddcb99d
Size: 23.99 MB - kernel-devel-matched-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 57eb8ee5c24ebd35f444d2b85051bc09
SHA-256: d2a3d3647ed8bcb85358457ddcf6450d4bcd943bdb53d0d4851d53eed136c644
Size: 4.69 MB - kernel-doc-5.14.0-427.35.1.el9_4.noarch.rpm
MD5: be2f14408f3f4cc4ebda0ce9d8e5f1a3
SHA-256: 41ff375e70abb1dd2effb592c8ae9aa6531ce5f1900cef3c74758f1d472e907e
Size: 38.14 MB - kernel-headers-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 28d589ca82faf039e838935787c8e3b1
SHA-256: 74c7fff5ef7e91118e35eeddcde15cfee8f67570ec113e40701b69f4012cad07
Size: 6.37 MB - kernel-modules-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 2eb340558bba18d7d64382c439624438
SHA-256: 28d850759350f7e8f3d7bdc750661934c47d09a26485df8a5539923ae3e9183e
Size: 38.31 MB - kernel-modules-core-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: af7a9d0600a084e94bb2cc57d21eb1e3
SHA-256: 878c49ff4834a51ef819ffa28e758eacd042c9be7d5457bedd4b5b103f564274
Size: 32.51 MB - kernel-modules-extra-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 6ee2f0f2f2aeebc6902d58c9625adbb8
SHA-256: 15a166b76e28a2da3bf3ec6025fe2b2ac478ea9ed3c9d78d8ec5c8b9dad8564a
Size: 5.15 MB - kernel-tools-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: abf480c3f71c65cbf58bcf8a6e20c589
SHA-256: 49d63f1006bcdb325f6f8d2157ddd004843f6c3cbf5a11934d78e1be8574c24a
Size: 4.95 MB - kernel-tools-libs-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: a6fc674688755589009876aebfe387a4
SHA-256: c4096d900543dfc49eddbce76a1da62bb04cda16ec8e15aee4a7af520f6730f0
Size: 4.71 MB - kernel-tools-libs-devel-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: ccfed5d7f8de16e53e2cb838e7ee3b41
SHA-256: 72b61ddfb1b3123e80d1e610c126b5c0f7ce4f28f2d79af680db3de02bfe30df
Size: 4.70 MB - kernel-uki-virt-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: b425147448405ac5003350337317c4cb
SHA-256: ced766a8b3a1f4bf522fc3c727b4547fd5a3a8212801b8d4c8dc09edabb3a38c
Size: 61.42 MB - libperf-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: d496416e8837b7f2b3eb68d6770361d3
SHA-256: dc045075722d39d83fb81377502bfd088a3da8ce5a92c3c6ca413868aaf7f588
Size: 4.71 MB - perf-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 5850fdc5f755bc1823cb574a7b7f79c3
SHA-256: 1da279f15aff4aabcef3a4f6535bb1a4096bce6aee1b4a8fd904c6d441ef1dea
Size: 6.72 MB - python3-perf-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 368f09e942e01331f39d4035baa74c0b
SHA-256: 85a9122a526b4cade8380d176ab4d5a9695c15f8218f4ca6b8a0ee81ab38fe0f
Size: 4.79 MB - rtla-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 218793411da6391b0e9b68f8701d6c40
SHA-256: 744c9f9ecf244f398aef1426ee634707e76ecc2a6c437dd0a3058ffba83ec34c
Size: 4.74 MB - rv-5.14.0-427.35.1.el9_4.x86_64.rpm
MD5: 9a8263c2b277c949192815d0f7348a6e
SHA-256: 17b36001b5cd41245f4a0f56dfc3fcc5b2f10ac77681fdf0ee3b0646e5ea1a3e
Size: 4.71 MB