Skip to content

Commit 8146256

Browse files
Carl Huanggregkh
authored andcommitted
ath10k: fix use-after-free in ath10k_wmi_cmd_send_nowait
commit 9ef0f58 upstream. The skb may be freed in tx completion context before trace_ath10k_wmi_cmd is called. This can be easily captured when KASAN(Kernel Address Sanitizer) is enabled. The fix is to move trace_ath10k_wmi_cmd before the send operation. As the ret has no meaning in trace_ath10k_wmi_cmd then, so remove this parameter too. Signed-off-by: Carl Huang <cjhuang@codeaurora.org> Tested-by: Brian Norris <briannorris@chromium.org> Reviewed-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Signed-off-by: Amit Pundir <amit.pundir@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 327400b commit 8146256

2 files changed

Lines changed: 5 additions & 9 deletions

File tree

drivers/net/wireless/ath/ath10k/trace.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,36 +152,32 @@ TRACE_EVENT(ath10k_log_dbg_dump,
152152
);
153153

154154
TRACE_EVENT(ath10k_wmi_cmd,
155-
TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len,
156-
int ret),
155+
TP_PROTO(struct ath10k *ar, int id, const void *buf, size_t buf_len),
157156

158-
TP_ARGS(ar, id, buf, buf_len, ret),
157+
TP_ARGS(ar, id, buf, buf_len),
159158

160159
TP_STRUCT__entry(
161160
__string(device, dev_name(ar->dev))
162161
__string(driver, dev_driver_string(ar->dev))
163162
__field(unsigned int, id)
164163
__field(size_t, buf_len)
165164
__dynamic_array(u8, buf, buf_len)
166-
__field(int, ret)
167165
),
168166

169167
TP_fast_assign(
170168
__assign_str(device, dev_name(ar->dev));
171169
__assign_str(driver, dev_driver_string(ar->dev));
172170
__entry->id = id;
173171
__entry->buf_len = buf_len;
174-
__entry->ret = ret;
175172
memcpy(__get_dynamic_array(buf), buf, buf_len);
176173
),
177174

178175
TP_printk(
179-
"%s %s id %d len %zu ret %d",
176+
"%s %s id %d len %zu",
180177
__get_str(driver),
181178
__get_str(device),
182179
__entry->id,
183-
__entry->buf_len,
184-
__entry->ret
180+
__entry->buf_len
185181
)
186182
);
187183

drivers/net/wireless/ath/ath10k/wmi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1741,8 +1741,8 @@ int ath10k_wmi_cmd_send_nowait(struct ath10k *ar, struct sk_buff *skb,
17411741
cmd_hdr->cmd_id = __cpu_to_le32(cmd);
17421742

17431743
memset(skb_cb, 0, sizeof(*skb_cb));
1744+
trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len);
17441745
ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb);
1745-
trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len, ret);
17461746

17471747
if (ret)
17481748
goto err_pull;

0 commit comments

Comments
 (0)