LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Нашёл коммит, когда добавили -fno-delete-null-pointer-checks

https://github.com/torvalds/linux/commit/a3ca86aea507904148870946d599e07a340b39bf

Пример, просто фейспалм.

Вот код,

static void __devexit agnx_pci_remove(struct pci_dev *pdev)
{
    struct agnx_priv *priv = dev->priv;
    if (!dev)
       return;
    // что-то дальше, неважно
}

Очевидно, что использование dev раньше теста на NULL, поэтому компилятор выкинул

if (!dev)
   return;

Они решили что это не секьюрно, так как добавляет дыры в ядро. А так, если отключить оптимизации, то надеются что их пронесёт и хаков будет меньше.

Turning on this flag could prevent the compiler from optimising away some "useless" checks for null pointers.  Such bugs can sometimes become exploitable at compile time because of the -O2 optimisation.


Clearly the 'fix' is to stop using dev before it is tested, but building with -fno-delete-null-pointer-checks flag at least makes it harder to abuse.

Просто пример для @Forum0888 , а то будет верить в святых разработчиков ядра, которые пишут без UB.

Исходная версия fsb4000, :

Нашёл коммит, когда добавили -fno-delete-null-pointer-checks

https://github.com/torvalds/linux/commit/a3ca86aea507904148870946d599e07a340b39bf

Пример, просто фейспалм.

Вот код,

static void __devexit agnx_pci_remove(struct pci_dev *pdev)
{
    struct agnx_priv *priv = dev->priv;
    if (!dev)
       return;
    // что-то дальше, неважно
}

Очевидно, что использование dev раньше теста на NULL, поэтому компилятор выкинул

if (!dev)
   return;

Они решили что это не секьюрно, так как добавляет дыры в ядро. А так, если отключить оптимизации, то надеются что их пронесёт и хаков будет меньше.

Turning on this flag could prevent the compiler from optimising away some "useless" checks for null pointers.  Such bugs can sometimes become exploitable at compile time because of the -O2 optimisation.


Clearly the 'fix' is to stop using dev before it is tested, but building with -fno-delete-null-pointer-checks flag at least makes it harder to abuse.

Просто пример для @Forum0888 , а то будет верить в святых разработчиков ядра, которые не пишут UB.