Сказки дiда Панаса. Сказ о том, как злыдни дверь заднюю в пингвиньи ядра прорубали

от автора

Давно это было, сы́нки: в те времена, когда все знали, кто нужду свою справить в сеть всемирную, ынторнетом кличущуюся, вышел, по звукам характерным, Дональд Трамп ещё играл роли второго плана в комедиях, а пынгвин юный, Линуксом кличущийся, был ещё от горшка 2.4 вершка.

И хранились ядра драгоценные того пынгвина в сундуке заветном, BitKeeper-ом кличущемся, коий тогда свои златые годы переживал, замещая постепенно другой сундук, CVS прозванный, каковой хоть и ветшать начинал, но ещё был ого-го, и были у него ещё свои любители.

И для таких вот любителей олдскульных делал пынгвин копию своих ядер в CVS — чтобы, значца, и тому дать, и ентому. А дабы не возникало бардака какого, строго-настрого наказано было служителям пынгвинячьим следить за BitKeeper-ом, и коли в нём что новое появлялось — сразу же копию делать да в CVS складывать, да помечать соответственно.

И вот смотрит в один прекрасный ноябрьский денёк гордый птиц пынгвин в сундук свой старый, CVS кличущийся, и ластой голову скребёт, ибо видит он в ядре своём изменение — а вот откуда оно в сундуке том взялось — в упор не видит. И хоть был он птицом гордым, а не медведем плюшевым, но тем не менее понял он сразу, что ж-ж-ж это — неспроста!

Достал пынгвин их сундука того ядро своё — и давай разлядывать, да с копией из BitKeeper-а сличать. И вот что он углядел в коде функции wait4():

+       if ((options == (__WCLONE|__WALL)) && (current->uid = 0)) +                       retval = -EINVAL;

Первый раз посмотрел на это дело пынгвин, да плечами пожал. Второй раз посмотрел на это дело пынгвин, да хмыкнул. Третий раз посмотрел на это дело пынгвин — и перья у него от ужаса зашевелились. Везде.

Вот и вы ничего необычного не видите, малятки? Обычная ж проверка флагов, при условии, что код ядрёный от суперпользователя исполняется, да? Вот и пынгвин сначала так же думал. А потом дошло до него, аки до Шахерезады, что не сравнение это current->uid с номером пользователя круглым аки баранка, а установка в этот самый номер. И потому любому пользователю, вызвавшему wait4() с этими двумя флагами — была бы эта баранка в личное пользование с глубоким поклоном поднесена!

Вот так-то оно и выходило по всему, что подобрал злыдень некий ключ к сундуку старому, CVS зовущемуся, и подбросил туда изменение злонамеренное. И только внимательность пингвинячья не позволила злыдню прорубить дверь заднюю в ядра его драгоценные.

И я там был, и сказания пингвинячьи в USENET читал. И вообще, сказка — ложь, да в ней намёк, добру молодцу про опасность попутать операторы сравнения и присваивания урок, не любо — не слушай, а прошлое поминать не мешай!


ссылка на оригинал статьи https://habr.com/ru/articles/858088/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *