Browse Source

qcacld-3.0: Do not log pktlog event when monitor mode is ON

In case of Monitor mode, headroom of skb, which originally
contains rx_desc data, is overwritten by radio tap header.

Host pulls skb data by radio tap header and the same skb is
passed on to packet log function which expects payload to
point to skb-> data and end up in wrong access.

Moreover, pktlog is meant to log rx_desc information which is
already overwritten by radio header and hence pkt logging is
of no use in this case.

CRs-Fixed: 2159130
Change-Id: Id19c0371a0ed31c70ada788fc2b396a8b1eac1f1
Poddar, Siddarth 7 years ago
parent
commit
4bbe4fc724
1 changed files with 14 additions and 1 deletions
  1. 14 1
      core/dp/txrx/ol_rx.c

+ 14 - 1
core/dp/txrx/ol_rx.c

@@ -144,7 +144,12 @@ void ol_rx_send_pktlog_event(struct ol_txrx_pdev_t *pdev,
 {
 	struct ol_rx_remote_data data;
 
-	if (!pktlog_bit)
+	/**
+	 * pktlog is meant to log rx_desc information which is
+	 * already overwritten by radio header when monitor mode is ON.
+	 * Therefore, Do not log pktlog event when monitor mode is ON.
+	 */
+	if (!pktlog_bit || (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE))
 		return;
 
 	data.msdu = msdu;
@@ -161,6 +166,14 @@ void ol_rx_send_pktlog_event(struct ol_txrx_pdev_t *pdev,
 {
 	struct ol_rx_remote_data data;
 
+	/**
+	 * pktlog is meant to log rx_desc information which is
+	 * already overwritten by radio header when monitor mode is ON.
+	 * Therefore, Do not log pktlog event when monitor mode is ON.
+	 */
+	if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
+		return;
+
 	data.msdu = msdu;
 	if (peer)
 		data.mac_id = peer->vdev->mac_id;