В ядре Linux устранена следующая уязвимость:
bnxt_en: исправлен сбой нулевого указателя в bnxt_ptp_enable во время устранения ошибок. Когда bnxt_init_one() завершается сбоем во время инициализации (например,
bnxt_init_int_mode возвращает -ENODEV), путь к ошибке вызывает
bnxt_free_hwrm_resources(), который уничтожает пул DMA и устанавливает
bp->hwrm_dma_pool в NULL. Впоследствии вызывается bnxt_ptp_clear(),
который вызывает ptp_clock_unregister().
С момента фиксации a60fc3294a37 ("ptp: переработать ptp_clock_unregister() на
отключить события"), ptp_clock_unregister() теперь вызывает
ptp_disable_all_events(), который, в свою очередь, вызывает функцию .enable() драйвера.
обратный вызов (bnxt_ptp_enable()) для отключения событий PTP перед завершением
отмена регистрации.
bnxt_ptp_enable() пытается отправить команды HWRM через bnxt_ptp_cfg_pin()
и bnxt_ptp_cfg_event(), оба из которых вызывают hwrm_req_init(). Это
функция пытается выделить память из bp->hwrm_dma_pool, вызывая NULL
разыменование указателя:
bnxt_en 0000:01:00.0 (безымянное сетевое_устройство) (неинициализировано): bnxt_init_int_mode ошибка: ffffffed
KASAN: null-ptr-deref в диапазоне [0x0000000000000028-0x000000000000002f]
Отслеживание вызова:
__hwrm_req_init (drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c:72)
bnxt_ptp_enable (drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c:323 driver/net/ethernet/broadcom/bnxt/bnxt_ptp.c:517)
ptp_disable_all_events (drivers/ptp/ptp_chardev.c:66)
ptp_clock_unregister (drivers/ptp/ptp_clock.c:518)
bnxt_ptp_clear (drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c:1134)
bnxt_init_one (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16889)
Строки против фиксации f8f9c1f4d0c7 («Linux 6.19-rc3»)
Исправьте это, очистив и отменив регистрацию ptp (bnxt_ptp_clear()) перед
высвобождение ресурсов HWRM.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: bnxt_en: Fix NULL pointer crash in bnxt_ptp_enable during error cleanup When bnxt_init_one() fails during initialization (e.g., bnxt_init_int_mode returns -ENODEV), the error path calls bnxt_free_hwrm_resources() which destroys the DMA pool and sets bp->hwrm_dma_pool to NULL. Subsequently, bnxt_ptp_clear() is called, which invokes ptp_clock_unregister(). Since commit a60fc3294a37 ("ptp: rework ptp_clock_unregister() to disable events"), ptp_clock_unregister() now calls ptp_disable_all_events(), which in turn invokes the driver's .enable() callback (bnxt_ptp_enable()) to disable PTP events before completing the unregistration. bnxt_ptp_enable() attempts to send HWRM commands via bnxt_ptp_cfg_pin() and bnxt_ptp_cfg_event(), both of which call hwrm_req_init(). This function tries to allocate from bp->hwrm_dma_pool, causing a NULL pointer dereference: bnxt_en 0000:01:00.0 (unnamed net_device) (uninitialized): bnxt_init_int_mode err: ffffffed KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f] Call Trace: __hwrm_req_init (drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c:72) bnxt_ptp_enable (drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c:323 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c:517) ptp_disable_all_events (drivers/ptp/ptp_chardev.c:66) ptp_clock_unregister (drivers/ptp/ptp_clock.c:518) bnxt_ptp_clear (drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c:1134) bnxt_init_one (drivers/net/ethernet/broadcom/bnxt/bnxt.c:16889) Lines are against commit f8f9c1f4d0c7 ("Linux 6.19-rc3") Fix this by clearing and unregistering ptp (bnxt_ptp_clear()) before freeing HWRM resources.