CVE-2026-98980
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
namei: nie ujawniaj przekroczonych wpisów w refwalk
W rcuwalk dentysta jest sprawdzany przed akceptacją. krok_do()
step_into() ponownie sprawdza d_seq, a __follow_mount_rcu() ponownie sprawdza mount_lock.
Wpis, który zostanie rozłączony pomiędzy nimi, powoduje ponowną próbę wyszukiwania i
tęsknię.
Refwalk tego nie daje. lookup_fast() pobiera odniesienie do skrótu
stomatologii i po prostu to akceptuje. Zatem rozłączenie, które następuje po
referencja nie jest widoczna przez refwalk. To w porządku dla prostego
plik. Po prostu otworzyliśmy go przed odłączeniem, nie ma problemu.
W przypadku punktu montowania, a konkretnie zablokowanego punktu montowania, to bardzo dużo
nie jest. Odłączenie odłącza wszystkie wierzchowce, a następnie usuwa nazwę. Dowolny
Refwalk, który nie przeszedł jeszcze przez wierzchowce, po prostu ujawnia
wpis bazowy. To bardzo wąskie okno, ale można je trafić:
odczytuje zakryty plik w ciągu 60 s, 3 osoby spacerujące, ~15000 rozłączeń
bez poszerzenia 27
ten krok + 200 nas 3741
Zobacz dołączoną łatkę, aby uzyskać bardziej niezawodny odtwarzacz.
Sprawdź więc wpis po step_into(). unlink(), rmdir() i zmień nazwę()
zaznacz dentry za pomocą Dont_mount() zanim odłączą mocowania i
usunąć ząb.
Zatem dentry są oznaczone DCACHE_CANT_MOUNT i nie są zaszyfrowane przez
czas, w którym oglądano jego wierzchowce, to nazwa, która została odłączona pod nazwą
refleksja. DCACHE_CANT_MOUNT jest odczytywany po sprawdzeniu wierzchowców i
jest ustawiany przed ich odłączeniem za pomocą detach_mounts(). Refleksja nad tym
przegapiłem wierzchowce, zobaczę DCACHE_CANT_MOUNT.
Zwykła d_unlinked() jest w porządku. Zmiana nazwy usuwa dentry z łańcucha skrótów
ale ___d_drop() pozostawia zestaw d_hash.pprev. Więc tylko __d_drop() i zmiana nazwy
nad zębami, odhacz to. Jedyny ruch, który odwraca sploty IS_ROOT w a
odłączony pseudonim. To nie ma ustawionego DCACHE_CANT_MOUNT.
Dodaj do step_into_slowpath(). „..” i LOOKUP_DOWN mogą legalnie
wyląduj w niezaszyfrowanym katalogu. Refwalk, który przeszedł na wierzchowca, ma
ścieżka.mnt różni się od nd->ścieżka.mnt. Dentry, który został usunięty z systemu plików
samodzielnie (d_invalidate(), d_drop()) nie ma ustawionej flagi i jest
traktowany jak poprzednio.
// Identyfikator licencji SPDX: GPL-2.0
/*
* unlink_covered: odłącz plik będący punktem montowania w odłączonej kopii
* jego wierzchowiec, przeciwko spacerowiczom, którzy otwierają go przez tę kopię.
*
* A to tmpfs z plikiem f1 (zawartość SECRET_F) i zwykłym plikiem
* MARK_A. A' jest kopią open_tree(OPEN_TREE_CLONE) A z powiązaniem MARK_A
* na A'/f1, utrzymywany przez O_PATH fd w jego korzeniu, gdy drzewo fd jest
* zamknięte. Walkery otwierają f1 przez ten fd, podczas gdy kierowca odłącza A/f1,
* gdzie nic nie jest na nim zamontowane. Pieszo może przeczytać MARK_A lub otrzymać ENOENT.
* Czytanie SECRET_F jest strzałem w dziesiątkę: nazwa została znaleziona po odkryciu wierzchowca
* zniknęło. Spacery bez zamków używają openat2 (RESOLVE_CACHED).
*
* użycie: unlink_covered [-t sekund] [-w spacerowiczów]
*/
#ifndef _GNU_SOURCE
#zdefiniuj _GNU_SOURCE
#endif
#include <errno.h>
#include <fcntl.h>
#include <pwątek.h>
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <linux/openat2.h>
#ifndef __NR_open_tree
#zdefiniuj __NR_open_tree 428
#endif
#ifndef __NR_move_mount
#zdefiniuj __NR_move_mount 429
#endif
#ifndef __NR_openat2
#zdefiniuj __NR_openat2 437
#endif
#ifndef OPEN_TREE_CLONE
#zdefiniuj OPEN_TREE_CLONE 1
#endif
#ifndef OPEN_TREE_CLOEXEC
#zdefiniuj OPEN_TREE_CLOEXEC O_CLOEXEC
#endif
#ifndef MOVE_MOUNT_F_EMPTY_PATH
#zdefiniuj MOVE_MOUNT_F_EMPTY_PATH 0x00000004
#endif
#zdefiniuj PRACĘ „/tmp/uc”
#define ADIR PRACA „/A”
statyczny int czas trwania = 60, nwalkers = 3;
statyczny atomic_int stop, write_waiting;
statyczny pthread_rwlock_t cur_lock = PTHREAD_RWLOCK_INITIALIZER;
statyczny int cur_fd = -1; /* pierwiastek A', -1, gdy go nie ma */
statyczny atomic_long n_unlink, n_walk, n_mark, n_enoent, n_othe
---obcięty---
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org