Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0ea452e authored by Michal Schmidt's avatar Michal Schmidt Committed by David S. Miller
Browse files

bnx2x: fix memory leak in bnx2x_init_firmware()



When cycling the interface down and up, bnx2x_init_firmware() knows that
the firmware is already loaded, but nevertheless it allocates certain
arrays anew (init_data, init_ops, init_ops_offsets, iro_arr). The old
arrays are leaked.

Fix the leaks by returning early if the firmware was already loaded.
Because if the firmware is loaded, so are the arrays.

Signed-off-by: default avatarMichal Schmidt <mschmidt@redhat.com>
Acked-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 127d0a19
Loading
Loading
Loading
Loading
+24 −26
Original line number Diff line number Diff line
@@ -10824,12 +10824,12 @@ do { \

int bnx2x_init_firmware(struct bnx2x *bp)
{
	const char *fw_file_name;
	struct bnx2x_fw_file_hdr *fw_hdr;
	int rc;


	if (!bp->firmware) {
		const char *fw_file_name;
	if (bp->firmware)
		return 0;

	if (CHIP_IS_E1(bp))
		fw_file_name = FW_FILE_NAME_E1;
@@ -10843,8 +10843,7 @@ int bnx2x_init_firmware(struct bnx2x *bp)
	}
	BNX2X_DEV_INFO("Loading %s\n", fw_file_name);

		rc = request_firmware(&bp->firmware, fw_file_name,
				      &bp->pdev->dev);
	rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
	if (rc) {
		BNX2X_ERR("Can't load firmware file %s\n",
			  fw_file_name);
@@ -10856,7 +10855,6 @@ int bnx2x_init_firmware(struct bnx2x *bp)
		BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name);
		goto request_firmware_exit;
	}
	}

	fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data;