fix(wifi): allouer 0x138 octets + ivars infra pour corriger le #PF CR2:0x1ac dans setGATEWAY_ADDRESS

Breakthroughs: panic wifip2pd -> IO80211Family::setGATEWAY_ADDRESS+0x10f lit [iface+0x128] (ivars IO80211InfraInterface) NULL car objet alloue a 0x128.
Modifications: QualcommWifi.cpp (alloc 0x138, bloc ivars infra zero a +0x128); docs Postmortem 29.
Validation: build_wifi.sh + kmutil OK; kext copie sur EFI, config.plist laisse a Enabled=false par l'utilisateur.
This commit is contained in:
Erwan committed 2026-10-20 09:03:04 +02:00
1 parent f7d58c049a
commit 057793b847
2 files changed
+17 -2

No files matched your search

+8 -2
View File
@@ -393,12 +393,12 @@ static void installSkywalkCustomVtable(IO80211SkywalkInterface *iface) {
}
static IO80211SkywalkInterface* createSkywalkInterface(void) {
void *mem = _ZN23IO80211SkywalkInterfacenwEm(0x128);
void *mem = _ZN23IO80211SkywalkInterfacenwEm(0x138);
if (!mem) {
IOLog("QualcommWifi: Erreur - operator new(IO80211SkywalkInterface) a echoue !\n");
return nullptr;
}
bzero(mem, 0x128);
bzero(mem, 0x138);
_ZN23IO80211SkywalkInterfaceC1EPK11OSMetaClass(mem, &_ZN23IO80211SkywalkInterface10gMetaClassE);
// Initialisation complète via IO80211SkywalkInterface::init() :
@@ -411,6 +411,12 @@ static IO80211SkywalkInterface* createSkywalkInterface(void) {
IOLog("QualcommWifi: IO80211SkywalkInterface::init() reussi (fPropertyTable + lock + ivars alloues) !\n");
}
// IO80211InfraInterface (taille 0x130) lit un pointeur d'ivars infra a +0x128 (ex: setGATEWAY_ADDRESS
// ecrit [ivars+0x1a8/0x1ac]). Fournir un bloc zero pour eviter le #PF CR2:0x1ac (INC-29).
static uint8_t sInfraIvars[0x800];
bzero(sInfraIvars, sizeof(sInfraIvars));
*(void **)((uint8_t *)mem + 0x128) = sInfraIvars;
installSkywalkCustomVtable((IO80211SkywalkInterface *)mem);
return (IO80211SkywalkInterface *)mem;
+9
View File
@@ -1288,3 +1288,12 @@ Ce document répertorie de manière exhaustive l'ensemble des anomalies, blocage
- Compilation `Release` sans aucun avertissement ni erreur (`./build_wifi.sh`).
- Liaison du symbole `_ZN20IO80211InfraProtocol10gMetaClassE` validée à 100% via `kmutil libraries`.
- Déploiement sur `/Volumes/EFI/EFI/OC/Kexts/QualcommWifi.kext` (MD5: `60519498eb033fd46db05b8e19635edf`).
---
### Postmortem 29 : Kernel panic `#PF CR2:0x1ac` dans `setGATEWAY_ADDRESS` après activation de la VTable infra (INC-28)
* **Symptôme** : freeze du bureau à l'affichage ; `Kernel-2026-10-20-085148.panic` : page fault `CR2: 0x1ac`, tâche `wifip2pd`, RIP dans `IO80211Family::setGATEWAY_ADDRESS + 0x10f`.
* **Cause racine** : `safeMetaCast` réussissant désormais, les requêtes `apple80211` empruntent le chemin `IO80211InfraInterface` (taille `0x130`) qui lit `[iface + 0x128]` (ivars infra) puis écrit à `+0x1a8/+0x1ac`. Notre objet n'étant alloué qu'à `0x128` octets, ce champ valait NULL.
* **Correctif** : allocation de `0x138` octets et pointeur `+0x128` vers un bloc d'ivars infra zéro de 0x800 octets.
* **Risque résiduel** : d'autres chemins infra (`[ivars+0x120]->+0x28->+0x18->+0x558`, etc.) peuvent encore déréférencer des champs non initialisés ; itérer sur les prochains rapports de panic.