mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
qcacmn: Typecast address before assigning in multicast enhancement path
Not typecasting 64bit value to 16bit value before assigning is causing corruption of nearby structure members. Typecasting this value fixes this corruption. Change-Id: Iddaf697eb90241f9948aeaafe7985b8c2ea63048
This commit is contained in:
parent
f96d9cf159
commit
0c201e23a3
1 changed files with 10 additions and 10 deletions
|
|
@ -4094,7 +4094,6 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf,
|
|||
struct dp_tx_seg_info_s *seg_info_head = NULL;
|
||||
struct dp_tx_seg_info_s *seg_info_tail = NULL;
|
||||
struct dp_tx_seg_info_s *seg_info_new;
|
||||
struct dp_tx_frag_info_s data_frag;
|
||||
qdf_dma_addr_t paddr_data;
|
||||
qdf_dma_addr_t paddr_mcbuf = 0;
|
||||
uint8_t empty_entry_mac[QDF_MAC_ADDR_SIZE] = {0};
|
||||
|
|
@ -4122,13 +4121,7 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf,
|
|||
return 1;
|
||||
}
|
||||
|
||||
paddr_data = qdf_nbuf_get_frag_paddr(nbuf, 0) + QDF_MAC_ADDR_SIZE;
|
||||
|
||||
/*preparing data fragment*/
|
||||
data_frag.vaddr = qdf_nbuf_data(nbuf) + QDF_MAC_ADDR_SIZE;
|
||||
data_frag.paddr_lo = (uint32_t)paddr_data;
|
||||
data_frag.paddr_hi = (((uint64_t) paddr_data) >> 32);
|
||||
data_frag.len = len - QDF_MAC_ADDR_SIZE;
|
||||
paddr_data = qdf_nbuf_mapped_paddr_get(nbuf) + QDF_MAC_ADDR_SIZE;
|
||||
|
||||
for (new_mac_idx = 0; new_mac_idx < new_mac_cnt; new_mac_idx++) {
|
||||
dstmac = newmac[new_mac_idx];
|
||||
|
|
@ -4195,10 +4188,17 @@ dp_tx_me_send_convert_ucast(struct cdp_vdev *vdev_handle, qdf_nbuf_t nbuf,
|
|||
seg_info_new->frags[0].vaddr = (uint8_t *)mc_uc_buf;
|
||||
seg_info_new->frags[0].paddr_lo = (uint32_t) paddr_mcbuf;
|
||||
seg_info_new->frags[0].paddr_hi =
|
||||
((uint64_t) paddr_mcbuf >> 32);
|
||||
(uint16_t)((uint64_t)paddr_mcbuf >> 32);
|
||||
seg_info_new->frags[0].len = QDF_MAC_ADDR_SIZE;
|
||||
|
||||
seg_info_new->frags[1] = data_frag;
|
||||
/*preparing data fragment*/
|
||||
seg_info_new->frags[1].vaddr =
|
||||
qdf_nbuf_data(nbuf) + QDF_MAC_ADDR_SIZE;
|
||||
seg_info_new->frags[1].paddr_lo = (uint32_t)paddr_data;
|
||||
seg_info_new->frags[1].paddr_hi =
|
||||
(uint16_t)(((uint64_t)paddr_data) >> 32);
|
||||
seg_info_new->frags[1].len = len - QDF_MAC_ADDR_SIZE;
|
||||
|
||||
seg_info_new->nbuf = nbuf_clone;
|
||||
seg_info_new->frag_cnt = 2;
|
||||
seg_info_new->total_len = len;
|
||||
|
|
|
|||
Loading…
Reference in a new issue