From 1431b6188573526a0ff7f1408cecf381e627751e Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 6 Jul 2018 10:30:52 -0400 Subject: [PATCH] idualwifi7260: Properly enable the SINGLE_FRAME flag. I did this correctly in the original commit, but then inverted the logic in my C89 fixes commit by mistake ... whoops. It seems to cause double-frees even with mbuf refcounting (though they do occur later on), so leave it fully disabled for now. --- src/add-ons/kernel/drivers/network/wlan/Jamfile | 2 ++ .../drivers/network/wlan/idualwifi7260/dev/iwm/if_iwm.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/wlan/Jamfile b/src/add-ons/kernel/drivers/network/wlan/Jamfile index 08188ca7ca..2ab5e30a16 100644 --- a/src/add-ons/kernel/drivers/network/wlan/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/Jamfile @@ -19,4 +19,6 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network wlan wavelanwifi ; # FreeBSD 11.1 drivers SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi3945 ; SubInclude HAIKU_TOP src add-ons kernel drivers network wlan iprowifi4965 ; + +# FreeBSD 11.2 drivers SubInclude HAIKU_TOP src add-ons kernel drivers network wlan idualwifi7260 ; diff --git a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/iwm/if_iwm.c b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/iwm/if_iwm.c index 823c2f3005..ac388f164e 100644 --- a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/iwm/if_iwm.c +++ b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/iwm/if_iwm.c @@ -1437,8 +1437,10 @@ iwm_nic_rx_init(struct iwm_softc *sc) IWM_WRITE(sc, IWM_FH_MEM_RCSR_CHNL0_CONFIG_REG, IWM_FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL | IWM_FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY | /* HW bug */ - /* Haiku doesn't support mbuf refcounts, are required for multiframe */ - /* IWM_FH_RCSR_CHNL0_RX_CONFIG_SINGLE_FRAME_MSK | */ +#ifdef __HAIKU__ + /* multi-frame RX seems to cause UAFs and double-frees */ + IWM_FH_RCSR_CHNL0_RX_CONFIG_SINGLE_FRAME_MSK | +#endif IWM_FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL | IWM_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K | (IWM_RX_RB_TIMEOUT << IWM_FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS) |