1 votes

Obtention de l'erreur "ssid bytes size out of range" sur Android 10 si le WiFi est activé

J'ai un OnePlus 7 Pro qui a été mis à jour vers Android 10. Depuis lors, le téléphone redémarre de manière aléatoire. Il semble que cela soit lié au WiFi puisque les redémarrages aléatoires ne se produisent presque jamais lorsque le WiFi est désactivé (qu'il soit connecté à un réseau ou non).

Logcat :

Error: AndroidRuntime

*** FATAL EXCEPTION IN SYSTEM PROCESS: ClientModeImpl
java.lang.IllegalArgumentException: ssid bytes size out of range: 64
    at com.android.server.wifi.util.NativeUtil.decodeSsid(NativeUtil.java:278)
    at com.android.server.wifi.WifiScoreCard.computeHashLong(WifiScoreCard.java:588)
    at com.android.server.wifi.WifiScoreCard.access$100(WifiScoreCard.java:63)
    at com.android.server.wifi.WifiScoreCard$PerBssid.<init>(WifiScoreCard.java:380)
    at com.android.server.wifi.WifiScoreCard.lookupBssid(WifiScoreCard.java:530)
    at com.android.server.wifi.WifiCandidates.add(WifiCandidates.java:374)
    at com.android.server.wifi.WifiCandidates.add(WifiCandidates.java:393)
    at com.android.server.wifi.WifiNetworkSelector.lambda$selectNetwork$0$WifiNetworkSelector(WifiNetworkSelector.java:911)
    at com.android.server.wifi.-$$Lambda$WifiNetworkSelector$Z7htivbXF5AzGeTh0ZNbtUXC_0Q.onConnectable(Unknown Source:15)
    at com.android.server.wifi.SavedNetworkEvaluator.evaluateNetworks(SavedNetworkEvaluator.java:279)
    at com.android.server.wifi.WifiNetworkSelector.selectNetwork(WifiNetworkSelector.java:900)
    at com.android.server.wifi.WifiConnectivityManager.handleScanResults(WifiConnectivityManager.java:342)
    at com.android.server.wifi.WifiConnectivityManager.access$900(WifiConnectivityManager.java:73)
    at com.android.server.wifi.WifiConnectivityManager$AllSingleScanListener.onResults(WifiConnectivityManager.java:425)
    at android.net.wifi.WifiScanner$ServiceHandler.handleMessage(WifiScanner.java:1429)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.os.HandlerThread.run(HandlerThread.java:67)

PID: 28683
TID: 28862

The following error message says:

FATAL EXCEPTION: main
Process: com.google.android.gms.persistent, PID: 30417
DeadSystemException: The system died; earlier logs will point to the root cause

Le problème est constant et la même erreur s'affiche à chaque fois que le système se bloque ou redémarre.

Pourquoi, et comment résoudre ce problème ?

0voto

Andrew T. Points 12017

Le message d'erreur est provoqué par les SSID contenant plus de 32 octets.

Selon le Wikipedia ,

Contrairement aux identifiants de base des ensembles de services, les SSID sont généralement personnalisables. Ces SSID peuvent avoir une longueur de zéro à 32 octets (32 octets) et sont, par commodité, généralement dans une langue naturelle, comme l'anglais. Les normes 802.11 antérieures à l'édition 2012 ne définissaient pas de codage/représentation particulier pour les SSID, qui devaient être traités et manipulés comme une séquence arbitraire de 0 à 32 octets non limitée à des caractères imprimables. La norme IEEE 802.11-2012 définit une balise indiquant que le SSID est codé en UTF-8 et que, lors de son interprétation, il peut contenir n'importe quel caractère latin de base non ISO. Les piles de réseaux sans fil doivent toujours être préparées à gérer des valeurs arbitraires dans le champ SSID.

Notez que la limite est de 32 octets, et non de 32 caractères. Alors que chaque caractère dans ASCII est de 1 octet, les caractères en UTF-8 peut prendre jusqu'à 4 octets. Exemple :

  1. Test était composé de 4 caractères et 4 octets .
  2. était composé de 3 caractères mais 9 octets .

Si les SSID incriminés sont sous votre contrôle, la solution la plus simple consiste à réduire leur taille en octets (longueur).


Le contrôle du côté Android qui produit ce message d'erreur a été ajouté sur Avril 2019 qui se situe entre Android 9 (août 2018) et Android 10 (septembre 2019).

NativeUtil : Effectuer des vérifications de plage sur la taille des octets ssid

NativeUtil.encodeSsid/decodeSsid devrait effectuer des vérifications d'intervalle parce que la l'entrée/sortie provient d'interfaces binder/hwbinder qui supposent que le que le ssid n'est pas malformé (c'est à dire dans la plage de taille imposée par la spécification).

La plupart des appelants de ces méthodes traitent déjà les exceptions IllegalArgumentException (y compris la liste des réseaux cachés intégrée à WifiCondControl). Cela devrait résoudre le problème signalé d'un SSID caché. caché ajouté avec une taille > 32 provoquant un crash dans wificond.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X