Jeg er i gang med at flytte funktioner fra en gammel PC, som jeg bruger som server til små energisparende og støjsvage maskiner.
Både Fit-PC 2 og Lex Barebone understøtter NX-bitten, der sikrer, at
data ikke kan afvikles som et program. Dette forhindrer en del
potentielle sikkerhedsproblemer. Funktionen kræver, at High
Memory Support (64GB)
er aktiveret i Linux-kernen.
Hvis funktionen er aktiv, vil dette C-program give segmentfejl:
int main(void) {
char a[10] = {0xc3};
((void (*)())a)();
return 0;
}
Programmet virker på den måde, at tabellen a
udfyldes med talkoden for instruktionen, ret
, der
afslutter et funktionskald. Tabellen udføres som en funktion. Dette
virker fint uden NX-bit, men hvis NX-bitten er aktiv, forhindres
det, at data i tabellen kan bruges som programkode. Programmet er
fra AMD64 Linux
kernel and the NX bit. Hvis programmet oversættes med clang i stedet for GCC, virker det ikke. Programmet fejler
ikke når det skal.
Med linuxkernen i version 3.3 er der kommet understøttelse af de
indbyggede watchdog-funktioner i både Fit-PC 2 og VIA-chipsettet i
Lex-barebone. En watchdog gennemtvinger en genstart af maskinen,
hvis der ikke har været "livstegn" i et vist stykke tid. Driveren
udstiller den specielle fil /dev/watchdog
, og når der
en gang er skrevet til denne fil, skal der skreves til den med
korte mellemrum for at undgå en genstart af computeren.
Man kan bruge programmet Watchdog, til at aktivere en watchdog og holde maskinen i live, men jeg skrev mit eget program baseret på dette simple eksempel.
Tilbage til toppen af siden.
Tilbage til hovedsiden.