diff options
author | Colin Ian King <colin.king@canonical.com> | 2017-09-08 09:55:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-09-18 06:25:31 -0400 |
commit | e1bf28868ab0bfd1fc73dd8d5e642d88456c30e9 (patch) | |
tree | c56bed6261802dfc643ccbf3bab1f462d9f345a1 | |
parent | a3563b09f132661d447f69224ef65fdec02f5c61 (diff) |
staging: r8822be: fix null pointer dereferences with a null driver_adapter
The call to _rtl_dbg_trace via macro HALMAC_RT_TRACE will trigger a null
pointer deference on a null driver_adapter. Fix this by assigning
driver_adapter earlier to halmac_adapter->driver_adapter before the tracing
call so that a non-null driver_adapter is passed instead.
I should have spotted these with an earlier patch I sent, but I overlooked
these in the rather large CoverityScan logs.
Detected by CoverityScan, CID#1454550, CID#1454554, CID#1454565,
CID#1454591, CID#1454598 ("Explicit null dereferenced")
Fixes: 938a0447f094 ("staging: r8822be: Add code for halmac sub-driver")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c | 4 | ||||
-rw-r--r-- | drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c | 13 |
2 files changed, 9 insertions, 8 deletions
diff --git a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c index 5f84526cb5b5..edbf6af1c8b7 100644 --- a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c +++ b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c | |||
@@ -2901,11 +2901,11 @@ halmac_update_datapack_88xx(struct halmac_adapter *halmac_adapter, | |||
2901 | if (halmac_adapter->fw_version.h2c_version < 4) | 2901 | if (halmac_adapter->fw_version.h2c_version < 4) |
2902 | return HALMAC_RET_FW_NO_SUPPORT; | 2902 | return HALMAC_RET_FW_NO_SUPPORT; |
2903 | 2903 | ||
2904 | driver_adapter = halmac_adapter->driver_adapter; | ||
2905 | |||
2904 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2906 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
2905 | "[TRACE]%s ==========>\n", __func__); | 2907 | "[TRACE]%s ==========>\n", __func__); |
2906 | 2908 | ||
2907 | driver_adapter = halmac_adapter->driver_adapter; | ||
2908 | |||
2909 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2909 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
2910 | "[TRACE]%s <==========\n", __func__); | 2910 | "[TRACE]%s <==========\n", __func__); |
2911 | 2911 | ||
diff --git a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c index f33024e4d853..544f638ed3ef 100644 --- a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c +++ b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c | |||
@@ -1618,10 +1618,11 @@ halmac_send_h2c_set_pwr_mode_88xx(struct halmac_adapter *halmac_adapter, | |||
1618 | void *driver_adapter = NULL; | 1618 | void *driver_adapter = NULL; |
1619 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 1619 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
1620 | 1620 | ||
1621 | driver_adapter = halmac_adapter->driver_adapter; | ||
1622 | |||
1621 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 1623 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
1622 | "%s!!\n", __func__); | 1624 | "%s!!\n", __func__); |
1623 | 1625 | ||
1624 | driver_adapter = halmac_adapter->driver_adapter; | ||
1625 | h2c_header = h2c_buff; | 1626 | h2c_header = h2c_buff; |
1626 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; | 1627 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; |
1627 | 1628 | ||
@@ -1713,10 +1714,11 @@ halmac_media_status_rpt_88xx(struct halmac_adapter *halmac_adapter, u8 op_mode, | |||
1713 | void *driver_adapter = NULL; | 1714 | void *driver_adapter = NULL; |
1714 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 1715 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
1715 | 1716 | ||
1717 | driver_adapter = halmac_adapter->driver_adapter; | ||
1718 | |||
1716 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 1719 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
1717 | "halmac_send_h2c_set_pwr_mode_88xx!!\n"); | 1720 | "halmac_send_h2c_set_pwr_mode_88xx!!\n"); |
1718 | 1721 | ||
1719 | driver_adapter = halmac_adapter->driver_adapter; | ||
1720 | h2c_header = H2c_buff; | 1722 | h2c_header = H2c_buff; |
1721 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; | 1723 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; |
1722 | 1724 | ||
@@ -2143,10 +2145,11 @@ halmac_func_ctrl_ch_switch_88xx(struct halmac_adapter *halmac_adapter, | |||
2143 | enum halmac_cmd_process_status *process_status = | 2145 | enum halmac_cmd_process_status *process_status = |
2144 | &halmac_adapter->halmac_state.scan_state_set.process_status; | 2146 | &halmac_adapter->halmac_state.scan_state_set.process_status; |
2145 | 2147 | ||
2148 | driver_adapter = halmac_adapter->driver_adapter; | ||
2149 | |||
2146 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2150 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
2147 | "halmac_ctrl_ch_switch!!\n"); | 2151 | "halmac_ctrl_ch_switch!!\n"); |
2148 | 2152 | ||
2149 | driver_adapter = halmac_adapter->driver_adapter; | ||
2150 | halmac_api = (struct halmac_api *)halmac_adapter->halmac_api; | 2153 | halmac_api = (struct halmac_api *)halmac_adapter->halmac_api; |
2151 | 2154 | ||
2152 | if (halmac_transition_scan_state_88xx( | 2155 | if (halmac_transition_scan_state_88xx( |
@@ -2276,15 +2279,13 @@ enum halmac_ret_status halmac_send_h2c_update_bcn_parse_info_88xx( | |||
2276 | { | 2279 | { |
2277 | u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0}; | 2280 | u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0}; |
2278 | u16 h2c_seq_mum = 0; | 2281 | u16 h2c_seq_mum = 0; |
2279 | void *driver_adapter = NULL; | 2282 | void *driver_adapter = halmac_adapter->driver_adapter; |
2280 | struct halmac_h2c_header_info h2c_header_info; | 2283 | struct halmac_h2c_header_info h2c_header_info; |
2281 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 2284 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
2282 | 2285 | ||
2283 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2286 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
2284 | "%s!!\n", __func__); | 2287 | "%s!!\n", __func__); |
2285 | 2288 | ||
2286 | driver_adapter = halmac_adapter->driver_adapter; | ||
2287 | |||
2288 | UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en); | 2289 | UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en); |
2289 | UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th); | 2290 | UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th); |
2290 | UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout); | 2291 | UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout); |