WARNING::BUILDID(7stap) | WARNING::BUILDID(7stap) |
warning::buildid - chyby ověření build-id
Systemtap skript prochází několika fázemi zpracování, které nemusejí nutně následovat bezprostředně po sobě. Někdy je nutné ověřit některé invarianty. Jedním z nich je build-id, které zaručuje, že pokud systemtap skript běží proti uživatelským programům, jde o ty jejich verze, proti kterým byl systemtap skript skutečně zkompilován. Build-id je údaj, který moderní (2007+) překladače přidávají do binárních souborů jako ELF značku NT_GNU_BUILD_ID. Build-id lze zobrazit příkazem readelf -n.
Na build-id jsou citlivé jen skripty, které provádějí hlubokou analýzu binárních souborů a jejich ladicích informací. Například skripty, které používají sondy .function nebo .statement , nebo skripty, které generují backtrace. Jiné skripty mohou spoléhat například na sondy process.mark nebo kernel.trace, které nepotřebují ladicí informace, a ty pak na build-id citlivé nejsou. Viz sekci LADICÍ INFORMACE FORMÁTU DWARF manuálové stránky stapprobes(3stap).
Systemtap uchovává kopii relevantních build-id uvnitř svých jaderných modulů. Za běhu modulu pak dojde ke srovnání uloženého build-id se skutečnou hodnotou, která je pro daný obraz binárního souboru uložena v paměti. V případě neshody se vypíše chybová hláška a systemtap odmítne do daného binárního souboru vložit sondy. To je důležité z bezpečnostního hlediska, kdy by vložení sond na nesprávná místa mohlo způsobit pád programu.
Nesoulad build-id může být způsoben různými příčinami. Tou hlavní je situace, kdy je verze nebo architektura zkoumaného binárního souboru odlišná od verze nebo architektury souboru, proti kterému byl systemtap modul vytvořen. Například je možné, že systemtap modul byl sestaven na stroji s mírně odlišnou verzí nebo jinou distribucí OS. Mohlo dojít k "rebuildu" jádra při zachování čísla verze. Mohlo také například dojít k "upgrade" jádra, po kterém obraz v paměti není v souladu s obsahem souborů na disku. Nebo v případě, že Vaše distribuce používá samostatné "debuginfo" balíčky, nemusí verze "debuginfo" balíčku přesně odpovídat verzi hlavního balíčku.
Pokud má nesoulad build-id známou příčinu, a je zřejmé, že nedojde ke škodám, je možno test na build-id obejít volbou -DSTP_NO_BUILDID_CHECK.
http://fedoraproject.org/wiki/Releases/FeatureBuildId, stap(1), stapprobes(3stap), warning::debuginfo(7stap), error::reporting(7stap)