Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e2dabc4

Browse files
zhou1615kuba-moo
authored andcommitted
net: qlogic: qlcnic: Fix a NULL pointer dereference in qlcnic_83xx_add_rings()
In qlcnic_83xx_add_rings(), the indirect function of ahw->hw_ops->alloc_mbx_args will be called to allocate memory for cmd.req.arg, and there is a dereference of it in qlcnic_83xx_add_rings(), which could lead to a NULL pointer dereference on failure of the indirect function like qlcnic_83xx_alloc_mbx_args(). Fix this bug by adding a check of alloc_mbx_args(), this patch imitates the logic of mbx_cmd()'s failure handling. This bug was found by a static analyzer. The analysis employs differential checking to identify inconsistent security operations (e.g., checks or kfrees) between two code paths and confirms that the inconsistent operations are not recovered in the current function or the callers, so they constitute bugs. Note that, as a bug found by static analysis, it can be a false positive or hard to trigger. Multiple researchers have cross-reviewed the bug. Builds with CONFIG_QLCNIC=m show no new warnings, and our static analyzer no longer warns about this code. Fixes: 7f96645 ("qlcnic: 83xx memory map and HW access routine") Signed-off-by: Zhou Qingyang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 3968e3c commit e2dabc4

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,8 +1077,14 @@ static int qlcnic_83xx_add_rings(struct qlcnic_adapter *adapter)
10771077
sds_mbx_size = sizeof(struct qlcnic_sds_mbx);
10781078
context_id = recv_ctx->context_id;
10791079
num_sds = adapter->drv_sds_rings - QLCNIC_MAX_SDS_RINGS;
1080-
ahw->hw_ops->alloc_mbx_args(&cmd, adapter,
1081-
QLCNIC_CMD_ADD_RCV_RINGS);
1080+
err = ahw->hw_ops->alloc_mbx_args(&cmd, adapter,
1081+
QLCNIC_CMD_ADD_RCV_RINGS);
1082+
if (err) {
1083+
dev_err(&adapter->pdev->dev,
1084+
"Failed to alloc mbx args %d\n", err);
1085+
return err;
1086+
}
1087+
10821088
cmd.req.arg[1] = 0 | (num_sds << 8) | (context_id << 16);
10831089

10841090
/* set up status rings, mbx 2-81 */

0 commit comments

Comments
 (0)