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