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.