В ядре Linux устранена следующая уязвимость:
bnx2x: исправление ошибки двойного освобождения в bnx2x_init_firmware()
bnx2x_init_firmware() освобождает bp->init_ops, bp->init_data и
bp->init_ops_offsets в своем пути ошибок, не устанавливая для них значение NULL.
Функция очистки bnx2x_release_firmware() освобождает те же три
указатели безоговорочно, поэтому, если init_firmware завершится неудачно и
Release_firmware вызывается позже (например, из __bnx2x_remove или через
конечный автомат функции), все три освобождаются во второй раз.
Установите каждый указатель на NULL после kfree() в пути ошибки, чтобы
последующий kfree(NULL) в bnx2x_release_firmware() является безопасным бездействием.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: bnx2x: fix double free in bnx2x_init_firmware() error path bnx2x_init_firmware() frees bp->init_ops, bp->init_data and bp->init_ops_offsets in its error path without setting them to NULL. The cleanup function bnx2x_release_firmware() frees the same three pointers unconditionally, so if init_firmware fails and release_firmware is later called (e.g. from __bnx2x_remove or through the function state machine), all three are freed a second time. Set each pointer to NULL after kfree() in the error path so that the subsequent kfree(NULL) in bnx2x_release_firmware() is a safe no-op.