Byla vydána nová verze 10.1 sady aplikací pro SSH komunikaci OpenSSH. Uživatel je nově varován, když se nepoužívá postkvantová výměna klíčů.
Byly zpracovány a na YouTube zveřejněny videozáznamy z konference LinuxDays 2025.
Na konferenci LinuxDays 2025 byl oficiálně představen nový router Turris Omnia NG.
Přímý přenos (YouTube) z konference LinuxDays 2025, jež probíhá tento víkend v Praze v prostorách FIT ČVUT. Na programu je spousta zajímavých přednášek.
V únoru loňského roku Úřad pro ochranu osobních údajů pravomocně uložil společnosti Avast Software pokutu 351 mil. Kč za porušení GDPR. Městský soud v Praze tuto pokutu na úterním jednání zrušil. Potvrdil ale, že společnost Avast porušila zákon, když skrze svůj zdarma dostupný antivirový program sledovala, které weby jeho uživatelé navštěvují, a tyto informace předávala dceřiné společnosti Jumpshot. Úřad pro ochranu osobních údajů
… více »Google Chrome 141 byl prohlášen za stabilní. Nejnovější stabilní verze 141.0.7390.54 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 21 bezpečnostních chyb. Za nejvážnější z nich (Heap buffer overflow in WebGPU) bylo vyplaceno 25 000 dolarů. Vylepšeny byly také nástroje pro vývojáře.
eDoklady mají kvůli vysoké zátěži technické potíže. Ministerstvo vnitra doporučuje vzít si sebou klasický občanský průkaz nebo pas.
Novým prezidentem Free Software Foundation (FSF) se stal Ian Kelling.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za září (YouTube).
Vyšla kniha Počítačové programy a autorské právo. Podle internetových stránek nakladatelství je v knize "Významný prostor věnován otevřenému a svobodnému softwaru, jeho licencím, důsledkům jejich porušení a rizikům „nakažení“ proprietárního kódu režimem open source."
Aktuální vývojová verze jádra je 3.9-rc3 vydaná 17. března. Linus k ní řekl: Není to tak malé jako -rc2, ale to byla spíš výjimka. Tudíž toho na -rc3 zbylo více, vedly hlavně síťové ovladače a USB. Ale najdou se tam i změny v dalších ovladačích, v architekturách, opravy btrfs atd. atd.
Stabilní aktualizace: verze 3.8.3, 3.4.36 a 3.0.69 vyšly 14. března, verze 3.8.4, 3.4.37, 3.2.41 a 3.0.70 vyšly 20. března.
Dave Jones oznámil vznik mailing listu nástroje pro fuzz testing zvaného „Trinity“. Sídlí na vger, takže platí obvyklý postup přihlašování u majordomo.
Téměř každé I/O zařízení, co za něco stojí, podporuje transakce s přímým přístupem do paměti (DMA; Direct Memory Access); nepodporovat DMA znamená být odkázán na I/O o nízké šířce pásma a vysoké režii. Zařízení s podporou DMA si ale nejsou všechna rovna; řada z nich má omezení týkající se toho, k jaké oblasti paměti je možné přímo přistupovat. 24bitové omezení, které dopadalo na ISA v dřevních dobách osobních počítačů, je takovou klasickou ukázkou, ale svá omezení má i současný hardware. Jádro už dlouho disponuje mechanismem pro obcházení těchto omezení, ale jak se ukázalo, tak tento subsystém má i své vlastní potíže.
Omezení DMA jsou obvykle důsledkem toho, že dané zařízení má méně užitečných linek pro adresaci. 24 linek stanovených ve specifikaci ISA je zjevným příkladem. Zařízení PCI jsou standardně omezena na 32bitový adresní prostor, ale spousta zařízení je následkem pochybného návrhu omezena na méně; jak tomu už mnohdy bývá, návrháři hardwaru v této oblasti vykazují notnou dávku kreativity. Uživatele ale tyto potíže nezajímají; ti jen chtějí, aby jejich hardware fungoval. Proto musí jádro najít způsob, jak respektovat omezení každého zařízení a současně co nejvíce využívat DMA.
Jaderné API pro DMA (popsané v Documentation/DMA-API.txt) slouží jako abstrakce, co skrývá podrobnosti nutné k tomu, aby DMA s libovolným zařízením fungovalo. Toto API se například vynasnaží alokovat paměť v oblasti, která spadá do fyzického rozsahu podporovaného cílovým zařízením. Rovněž transparentně implementuje „bounce buffering“ – kopírování dat mezi bufferem hardwaru nepřístupným a přístupným bufferem – pokud je to nezbytné. K tomu je ale potřeba, aby bylo DMA API o adresačních omezeních zařízení informováno. Toho se dosahuje pomocí „masky DMA“, tedy masky, která popisuje rozsah paměti, ke kterému může zařízení přistupovat. Dokumentace masku popisuje následovně:
dma_mask pro zařízení představuje bitovou masku adresovatelného regionu. Neboli pokud je fyzická adresa bitově vynásobena s dma_mask a stále se rovná fyzické adrese, pak zařízení může na tuto oblast provádět DMA.
Jak ale nedávno upozornil Russell King, maska DMA není vždy takto interpretována. Poukazuje na následující kód nalezený v block/blk-settings.c:
void blk_queue_bounce_limit(struct request_queue *q, u64 dma_mask) { unsigned long b_pfn = dma_mask >> PAGE_SHIFT;
Zde dochází k tomu, že kód posouvá masku DMA doprava, aby z ní udělal „page frame number“ (číslo rámce stránky). Pokud si představíme systémovou paměť jako lineární pole stránek, pak PFN dané stránky je prostým indexem do tohoto pole (ačkoliv paměť není vždy organizována tak jednoduše). Tím, že s maskou DMA prakticky zachází jako s jiným způsobem vyjádření PFN nejvyšší adresovatelné stránky, mění tento kus kódu sématiku toho, jak je maska interpretována.
Russell vysvětlil, v čem se může skrývat problém. Na některých systémech ARM nezačíná paměť na fyzické adrese nula; fyzická adresa prvního bajtu může být dokonce až na 3 GB (0xc0000000). Pokud takto nakonfigurovaný systém bude mít zařízení s omezením adresace na 26 bitů (s tím, že vyšší bity jsou doplněny řadičem), pak by jeho maska DMA měla být nastavena na 0xc3ffffff. Jakákoliv fyzická adresa v rozsahu, jenž zařízení podporuje, bude logickým operátorem AND s jeho maskou nezměněna, což ale nebude platit o adresách mimo tento rozsah.
Ale co se přihodí, pokud zmiňovaný kus kódu provede pro získání PFN posun masky doprava? Výsledkem (za předpokladu, že stránka má 4096 bajtů) je 0xc3fff, což je naprosto validní PFN na systému, kde PFN první stránky je 0xc0000. A to je v pořádku, dokud se člověk nepodívá na proměnnou pro správu globální paměti zvanou max_low_pfn. Vzhledem k jejímu názvu by si člověk mohl představit, že jde o maximální PFN umístěnou v „low memory“ – tedy o PFN nejvyšší stránky, která je přímo adresovatelná jádrem bez speciálního mapování. max_low_pfn ve skutečnosti vyjadřuje počet stránek v „low memory“. Ale ne všechen kód s tím takto zachází.
Na systémech x86, kde paměť začíná na fyzické adrese nula (a tudíž na PFN nula) na tom nesejde; počet a maximum jsou to samé. Na složitějších systémech ale mohou výsledky být zajímavé. Vraťme se k té samé funkci v blk-settings.c:
blk_max_low_pfn = max_low_pfn - 1; /* Done elsewhere at init time */ if (b_pfn < blk_max_low_pfn) dma = 1; q->limits.bounce_pfn = b_pfn;
Zde máme skutečné číslo PFN (spočítané z masky DMA) porovnávané s počtem rámců stránek s rozhodováním o tom, jak se DMA má řešit v závislosti na výsledku. Nebylo by překvapením, kdybychom v takové operaci viděli nesprávné výsledky; s ohledem na diskuzi, která byla vyvolána, to pravděpodobně způsobuje bounce buffering tam, kde by nebylo nutné. Můžeme si snadno domyslet další problémy, které mohou kvůli podobnému zmatku nastat; nejednotné vnímání významu proměnné stěží povede k něčemu dobrému.
Náprava této situace nebude přímočará; Russell neměl „vůbec ponětí“, jak to udělat. Přejmenování max_low_pfn na něco jako low_pfn_count by mohlo posloužit jako první krok, aby se zabránilo dalším zmatkům. Zlepšení definice významu masky DMA (nebo alespoň zajištění toho, aby vnímání masky v jádře odpovídalo stávající definici) zní jako dobrý nápad, ale může být těžké to udělat tak, aby nebyla rozbita podpora pro obskurní hardware – takový kód může být samozřejmě dosti křehký. Už to tak vypadá, že rozhraní DMA, které bylo navrženo vývojáři pracujícími s relativně přímočarým hardwarem, bude vyžadovat jistou dávku pozornosti ze strany komunity ARM, aby splňovalo její požadavky.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: