OSDN Git Service

bnxt_en: Fix NULL pointer dereference in reopen failure path
authorSankar Patchineelam <sankar.patchineelam@broadcom.com>
Tue, 28 Mar 2017 23:47:29 +0000 (19:47 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Mar 2017 21:05:33 +0000 (14:05 -0700)
commit2247925f0942dc4e7c09b1cde45ca18461d94c5f
treec80b85f745a4ca6d83298f60ffe8ef6bbfb891b9
parente91793bb615cf6cdd59c0b6749fe173687bb0947
bnxt_en: Fix NULL pointer dereference in reopen failure path

Net device reset can fail when the h/w or f/w is in a bad state.
Subsequent netdevice open fails in bnxt_hwrm_stat_ctx_alloc().
The cleanup invokes bnxt_hwrm_resource_free() which inturn
calls bnxt_disable_int().  In this routine, the code segment

if (ring->fw_ring_id != INVALID_HW_RING_ID)
   BNXT_CP_DB(cpr->cp_doorbell, cpr->cp_raw_cons);

results in NULL pointer dereference as cpr->cp_doorbell is not yet
initialized, and fw_ring_id is zero.

The fix is to initialize cpr fw_ring_id to INVALID_HW_RING_ID before
bnxt_init_chip() is invoked.

Signed-off-by: Sankar Patchineelam <sankar.patchineelam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c