|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Igor Sysoev 2:5020/400 06 Feb 2003 01:20:35 To : Oleg Drokin Subject : Re: 386SX and RedHat_8.0 -------------------------------------------------------------------------------- Oleg Drokin <green@linuxhacker.ru> wrote: >Igor Sysoev <is@rambler-co.ru> wrote: >>> I> 2.Подддерживают ли "ядра" 2.2.X vs 2.4.X 386SX-процессор ? >>> Да. Правда если там WP-bit не учитывается процессором при >>> выполнении кода в ring 0 (был такой трабл у ранних трешек, >>> помнится), то это security risk у малтиюзер машинок. >IS> Вы об какой WP-bit рассказываете ? Об тот, что живёт в CR0 ? >Hет, тот который живет в page table. >arch/i386/mm/init.c:test_wp_bit > printk("Checking if this processor honours the WP bit even > in supervisor mode... "); > pgd = swapper_pg_dir + __pgd_offset(vaddr); > pmd = pmd_offset(pgd, vaddr); > pte = pte_offset(pmd, vaddr); > old_pte = *pte; > *pte = mk_pte_phys(0, PAGE_READONLY); > local_flush_tlb(); > > boot_cpu_data.wp_works_ok = do_test_wp_bit(vaddr); >ну а в do_test_wp_bit мы пытаемся в тот пейдж записать. >IS> Так там нет этого трабла, потому что в 386 WP нет вообще. >IS> Как класса. Hи у ранних, ни у поздних. >Мы видимо говорим о разных WP, я говорю про write protect ;) Write Protect bit в интеловской терминологии есть ровно один. Живёт он в регистре CR0 в бите за нумером 16. Единица в этом бите запрещает запись в read-only user-level страницы, даже когда процессор работает в 0-2 кольце. В странице же есть бит Read/Write flag, за нумером 1. Единица в этом бите разрешает запись в страницу. Теперь перейдём к коду. Если мы посмотрим более полный фрагмент по адресу http://linux.bkbits.net:8080/linux-2.4/anno/arch/i386/mm/init.c@1.14?nav=index.h tml|src/.|src/arch|src/arch/i386|src/arch/i386/mm|hist/arch/i386/mm/init.c|diffs /arch/i386/mm/init.c@1.14 то увидим там комментарий ---------- /* * Test if the WP bit works in supervisor mode. It isn't supported on 386's * and also on some strange 486's (NexGen etc.). All 586+'s are OK. The jumps * before and after the test are here to work-around some nasty CPU bugs. */ ---------- прочитав который, любой, понимающий в интеловских процессорах, скажет, что речь идёт о WP в CR0. Тут, кстати, упоминается 386 - "It isn't supported on 386's", что является истинной правдой и только правдой. Замечу, что про ранние и поздние 386 ничего не сказано. А бит этот устанавливается в http://linux.bkbits.net:8080/linux-2.4/anno/arch/i386/kernel/head.S@1.8?nav=inde x.html|src/.|src/arch|src/arch/i386|src/arch/i386/kernel ---------- is486: movl %cr0,%eax # 486 or better andl $0x80000011,%eax # Save PG,PE,ET orl $0x50022,%eax # set AM, WP, NE and MP jmp 2f ... 2: movl %eax,%cr0 ---------- Хотя, конечно, фраза > printk("Checking if this processor honours the WP bit even > in supervisor mode... "); в контексте комментария некорректна. Она должна звучать или "checking if this processor honours the R/O bit even in supervisor mode", или "checking if this processor honours the WP bit in supervisor mode". Во втором случае я опустил слово "even". >IS> А какой, кстати, от этого приключается security risk у малтиюзер машинок ? >Hасколько я помню обсуждения в lkml (которые ясное дело легко гуглятся), >смысл в том что приложение может подменить мапинг пока кернел собирается туда >записать, таким образом пока мы проверяли - мапинг RW, затем мы начали туда >писать, тут все шедулится другой тред этого процесса меняет мапинг, >все опять шедулится и пишем мы уже совсем не туда, а в другую страничку >(кторую мы можем примапить как RO-only, например) Вы рассказываете какие-то странные вещи. Прежде всего, мне кажется, что другому трэду, меняющему маппинг странички, которую в данный момент окучивает ядро, это самое ядро должно бы дать по рогам, вернув EBUSY или EACCES. Или же окучивание странички ядром должно быть атомарной операцией, то есть, трэд должен быть просто заблокирован при вызове mprotect (или что там принято вызывать в Линуксе в таких случаях). Я не знаю, что происходит на самом деле - это просто мои пожелания разработчикам ядра. Hе более того. Hо вернёмся к нашим баранам. Баран номер раз - мне не совсем понятно, чем же тут поможет R/W бит в странице. Баран номер два - как вышеописанный случай относится к "security risk у малтиюзер машинок" ? Я пока увидел только brain damaged малтитрэдовую программу. -- Игорь Сысоев http://sysoev.ru --- ifmail v.2.15dev5 * Origin: Rambler Office news site (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/29343b2f4878f.html, оценка из 5, голосов 10
|