Este post les viene de mano de mi amigo H3R3T1C (lfdomingez).

 

Buenas amigos, con la actualización hacia el kernel 4.0, Taehee Yoo le agregó el soporte para enviar un tipo de “beacon” (paquete de wifi) que mantiene la comunicación en el modo AP de las tarjetas Realtek. Luego de actualizar a dicha versión me ocurrió que cuando utilizaba hostapd para crear un AP el kernel arrojaba un error de manejo de puntero nulo, por lo que la estabilidad del sistema caía en picada. Luego de analizar el módulo que incluía el error, en lo cual estuve tiempo en mis vacaciones gg; el problema final radicaba en que el método que se utilizaba para enviar un paquete no hacía uso de uno de los parámetros de dicha función, pero solamente para dichas tarjetas Realtek conectadas por el bus USB, pero todas las demás que se conectan a través del bus PCI o PCI-Express si hacen uso de éste e intentaba hacer uso de un puntero nulo y ahí es cuando el kernel KRASH!!!!!
Luego de generar el parche, el cual es:

 

--- a/drivers/net/wireless/rtlwifi/core.c
+++ b/drivers/net/wireless/rtlwifi/core.c
@@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct ieee80211_hw *hw,
{
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
+ struct rtl_tcb_desc tcb_desc;

- if (skb)
- rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL);
+ if (skb) {
+ memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
+ rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, &tcb_desc);
+ }
}

static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,

 

Luego contacto con Larry Finger, el cual es el encargado por Realtek de mantener los drivers para Linux, el cual me avala el parche y luego lo propongo como solución en el BugZilla del kernel (https://bugzilla.kernel.org/show_bug.cgi?id=97441). Luego Kalle Valo, al ver que Larry Finger daba el visto bueno, lo sube a la rama master del kernel (https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=7c62940165e9ae4004ce4e6b5117330bab94df68), para que luego el parche salga aplicado a partir de la versión 4.2.1.

Para aquellos que tengan este problema y no puedan obtener el kernel 4.2.1, pueden aplicar el parche y compilar el kernel siguiendo guías realizadas aquí mismo en humanOS.