Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bnx2x: validate FW trace prior to its printing

Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Dmitry Kravkov and committed by
David S. Miller
de128804 cb4dca27

+13 -1
+2
drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
··· 1129 1129 1130 1130 #define FW_ACK_NUM_OF_POLL (FW_ACK_TIME_OUT_MS/FW_ACK_POLL_TIME_MS) 1131 1131 1132 + #define MFW_TRACE_SIGNATURE 0x54524342 1133 + 1132 1134 /**************************************************************************** 1133 1135 * Driver <-> FW Mailbox * 1134 1136 ****************************************************************************/
+11 -1
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
··· 719 719 trace_shmem_base = bp->common.shmem_base; 720 720 else 721 721 trace_shmem_base = SHMEM2_RD(bp, other_shmem_base_addr); 722 - addr = trace_shmem_base - 0x0800 + 4; 722 + addr = trace_shmem_base - 0x800; 723 + 724 + /* validate TRCB signature */ 725 + mark = REG_RD(bp, addr); 726 + if (mark != MFW_TRACE_SIGNATURE) { 727 + BNX2X_ERR("Trace buffer signature is missing."); 728 + return ; 729 + } 730 + 731 + /* read cyclic buffer pointer */ 732 + addr += 4; 723 733 mark = REG_RD(bp, addr); 724 734 mark = (CHIP_IS_E1x(bp) ? MCP_REG_MCPR_SCRATCH : MCP_A_REG_MCPR_SCRATCH) 725 735 + ((mark + 0x3) & ~0x3) - 0x08000000;