Набрёл нановость:
> -- Цитата:
> Автор проекта grsecurity, Brad Spengler, опубликовал эксплойт, использующий очень интересную уязвимость в ядре Linux (драйвер net/tun).Специфика этой уязвимости состоит в том, что уязвимость отсутствует в исходном коде, но присутствует в бинарном. Как такое возможно? Давайте рассмотрим это на примере. Все начинается с того, что происходит инициализация указателя sk:Этот код не вызывает ошибок даже если tun == NULL, и не является сам по себе уязвимостью.Несколькими строками ниже происходит проверка инициализации указателя tun:Казалось бы, теперь все правильно. Злодей не пройдет.Но! . Таким образом, ничто не мешает злоумышленнику заставить ядро обращаться по нулевому адресу. Имеем классическую null pointer dereference vulnerability.
Заявление про"даже если tun == NULL, и не является сам по себе уязвимостью"меня удивило (я с C++ не шибко знаком), полез проверять.Действительно:
> -- Цитата:
> Еще одна известная особенность языка C++ может усугубить проблемы, возникающие при вызове delete this. После удаления объекта можно продолжить с ним работать, вызывать те его функции, что не работают с данными и не подозревать о том, что он вообще удален.Пример:Экземпляр объекта CBase никогда даже и не создавался, но код будет шикарно работать годами до тех пор, пока вы не обратитесь к данным класса как-нибудь так:

Понятно, что приведённый код изначально кривой. Но сочетание с оптимизатором получилось интересное