Давно это было, сы́нки: в те времена, когда все знали, кто нужду свою справить в сеть всемирную, ынторнетом кличущуюся, вышел, по звукам характерным; Дональд Трамп ещё не в кабинете овальном сиживал, а роли второго плана в комедиях играл; а пынгвин юный, Линуксом кличущийся, от горшка был всего-то 2.4 ver-шка.
И хранились ядра драгоценные того пынгвина в сундуке заветном, BitKeeper-ом кличущемся, коий тогда свои златые годы переживал, замещая постепенно другой сундук, CVS прозванный, каковой хоть и ветшать начинал, но ещё был ого-го, и были у него ещё свои любители.
И для таких вот любителей олдскульных делал пынгвин копию своих ядер в CVS — чтобы, значца, и тому дать, и ентому. А дабы не возникало бардака какого, строго-настрого наказано было служителям пынгвинячьим следить за BitKeeper-ом, и коли в нём что новое появлялось — сразу же копию делать да в CVS складывать, да помечать соответственно.
И вот смотрит в один прекрасный ноябрьский денёк гордый птиц пынгвин в сундук свой старый, CVS кличущийся, и ластой голову скребёт, ибо видит он в ядре своём изменение — а как оно в сундуке том оказалось — в упор не видит. И хоть был он птицом гордым, а не медведом плюшевым, но тем не менее понял он сразу, что ж-ж-ж это — неспроста!
Достал пынгвин из сундука того ядро своё — и давай разлядывать, да с копией из BitKeeper-а сличать. И вот что он углядел в коде функции wait4()
:
+ if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
+ retval = -EINVAL;
Первый раз посмотрел на это дело пынгвин, да плечами пожал. Второй раз посмотрел на это дело пынгвин, да хмыкнул. Третий раз посмотрел на это дело пынгвин — и перья у него от ужаса зашевелились. Везде.
Вот и вы ничего необычного не видите, малятки? Обычная ж проверка флагов, при условии, что код ядрёный от суперпользователя исполняется, да? Вот и пынгвин сначала так же думал. А потом дошло до него, аки до Шахерезады, что не сравнение это current->uid
с нумером пользователя круглым аки баранка, а установка в этот самый нумер. И потому любому пользователю, вызвавшему wait4()
с этими двумя флагами — была бы эта баранка в личное пользование с глубоким поклоном поднесена!
Вот так-то оно и выходило по всему, что подобрал злыдень некий ключ к сундуку старому, CVS зовущемуся, да подкинул туда изменение злонамеренное. И только внимательность пингвинячья не позволила злыдню прорубить дверь заднюю в ядра его драгоценные.
И я там был, и сказания пингвинячьи в USENET читал. И вообще, сказка — ложь, да в ней намёк, добру молодцу про опасность попутать операторы сравнения и присваивания урок, не любо — не слушай, а прошлое поминать не мешай!