sys_call_table[] (Re: Co zapisuje na disk?)
Martin `MJ' Mares
mj na ucw.cz
Středa Červen 4 10:14:39 CEST 2003
Zdravim!
> > Nevim, jestli je nejaky rozumnejsi zpusob. Pokud ano, rad ho priste
> > pouziju. Napriklad nejaky, tkery by se dal rozumne pouzit na 2.5 kernelu,
> > kde neni pro moduly exportovana sys_call_table[].
>
> Na 2.5 kernelu neni exportovana sys_call_table[]? Je tedy nejaky zpusob
> jak se muzou moduly na neco veset?
>
> To treba i Microsoft je na tom lip, treba v NTckach je exportovana:
>
> extern PSRVTABLE KeServiceDescriptorTable;
>
> Navic novejsi NTcka (tusim >=5.2) maji primo hooky (napr.
> CmRegisterCallback() u registru). U disku (IRPcka) podobne.
K tomu, ze ve 2.5.x neni sys_call_table exportovana, vede nekolik pomerne
dobrych duvodu:
(1) vymenit syscall za jiny neni na multiprocesorovem systemu
vubec jednoduche -- je potreba synchronizovat se s ostatnimi
procesory a zajistit, aby behem vymeny tabulku nepouzivaly.
(2) pokud nejake dva moduly modifikuji ten samy syscall, najednou
zalezi na poradi jejich unloadovani.
(3) vetsina modifikaci syscallu kvuli jejich kontrole ci filtrovani
nefunguje: pokud si napriklad open() opatchuji tak, aby zkontroloval
jmeno a pokud je z nejake povolene casti filesystemu, tak teprve
zavolal puvodni sys_open(), lze to trivialne obejit tak, ze mezi
kontrolou a skutecnym otevrenim jiny thread prepise jmeno souboru
z povoleneho na nepovolene.
Problem (3) nastava i u libovolnych chytrejsich hooku na syscallove
urovni. Daleko rozumnejsi reseni je instalovat hooky pracujici primo
s kernelovymi objekty uvnitr syscallu, coz ve 2.5 existuje ve forme
security hooku.
Have a nice fortnight
--
Martin `MJ' Mares <mj na ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
More memory available, but not for you!
Další informace o konferenci Linux