Udostępniona została wersja projektu Wifibox 0.10, która ma na celu rozwiązanie problemu wykorzystania w FreeBSD adapterów bezprzewodowych, dla których brakuje niezbędnych sterowników. Działanie problematycznych adapterów dla FreeBSD zapewniane jest przez uruchomienie systemu gościnnego z Linuxem, w którym ładowane są natywne dla Linuxa sterowniki urządzeń bezprzewodowych.
Instalacja systemu gościnnego z sterownikami jest zautomatyzowana, a wszystkie niezbędne komponenty są zorganizowane w gotowy pakiet wifibox, który uruchamia się przy starcie za pomocą dostarczanego usługi rc. Obejmuje to także właściwe zarządzanie przejściem w tryb uśpienia. Środowisko potencjalnie może być używane z dowolnymi kartami WiFi wspieranymi w Linuxie, ale testowano głównie na chipach Intel. Sprawdzono również poprawność działania na systemach z bezprzewodowymi chipami Qualcomm Atheros i AMD RZ608 (MediaTek MT7921K).
System gościnny uruchamiany jest za pomocą hipernadzoru Bhyve, w którym organizowane jest przekazywanie dostępu do karty bezprzewodowej. Wymagana jest maszyna z obsługą wirtualizacji sprzętowej (AMD-Vi lub Intel VT-d). Podstawą systemu gościnnego jest dystrybucja Alpine Linux, oparta na bibliotece systemowej Musl i zestawie narzędzi BusyBox. Rozmiar obrazu zajmuje około 30 MB na dysku i wymaga około 90 MB pamięci RAM.
Do podłączenia do sieci bezprzewodowej używany jest pakiet wpa_supplicant, a pliki konfiguracyjne są synchronizowane z ustawieniami z głównego środowiska FreeBSD. Tworzony przez wpa_supplicant zarządzający gniazdo Unix jest przekazywany do środowiska hosta, co pozwala na korzystanie z standardowych narzędzi FreeBSD do łączenia się i pracy z siecią bezprzewodową, w tym można używać narzędzi wpa_cli i wpa_gui (net/wpa_supplicant_gui).
W nowej wersji zmieniono mechanizm przekazywania WPA do głównego środowiska, co pozwala na działanie zarówno z wpa_supplicant, jak i z hostapd. Zredukowano wymaganą dla systemu gościnnego ilość pamięci. Wsparcie dla FreeBSD 13.0-RELEASE zostało zakończone.
Dodatkowo można zauważyć prace nad ulepszaniem proponowanych w FreeBSD sterowników dla kart bezprzewodowych na chipach Intel i Realtek. Przy wsparciu organizacji FreeBSD Foundation kontynuowany jest rozwój nowego sterownika iwlwifi, zawartego w systemie FreeBSD 13.1. Sterownik oparty jest na sterowniku z Linuxa oraz kodzie z podsystemu net80211 w Linuxie, wspiera standard 802.11ac i może być używany z nowymi chipami bezprzewodowymi Intel. Sterownik ładowany jest automatycznie podczas rozruchu w momencie wykrycia odpowiedniej karty bezprzewodowej. Działanie komponentów stosu bezprzewodowego Linuxa zapewniane jest za pomocą warstwy LinuxKPI. Wcześniej podobnie dla FreeBSD portowany był sterownik iwm.
Równolegle rozpoczęto rozwój sterowników rtw88 i rtw89 dla chipów bezprzewodowych Realtek RTW88 i RTW89, które również rozwijane są poprzez przeniesienie odpowiednich sterowników z Linuxa i działają z wykorzystaniem warstwy LinuxKPI. Sterownik rtw88 jest już gotowy do wstępnego testowania, natomiast sterownik rtw89 wciąż znajduje się w fazie rozwoju.
Ponadto można wspomnieć o publikacji szczegółów i gotowego eksploita, związanych z podatnością (CVE-2022-23088) w stosie bezprzewodowym FreeBSD, usuniętą w kwietniowej aktualizacji. Podatność pozwala na wykonanie własnego kodu na poziomie jądra poprzez wysłanie specjalnie sformatowanej ramki w momencie, gdy klient znajduje się w trybie skanowania sieci (na etapie przed przypisaniem SSID). Problem spowodowany jest przepełnieniem bufora w funkcji ieee80211_parse_beacon() podczas analizy ramek beacon przesyłanych przez punkt dostępowy. Przepełnienie było możliwe z powodu braku weryfikacji zgodności rzeczywistego rozmiaru danych i rozmiaru określonego w polu nagłówka. Problem występuje w wersjach FreeBSD wydanych od 2009 roku.

Wśród ostatnich zmian w FreeBSD, niezwiązanych z bezprzewodowym stosem: przeprowadzono optymalizację czasu rozruchu, która na systemie testowym została skrócona z 10 do 8 sekund; zrealizowano moduł GEOM gunion do przenoszenia na inny dysk zmian dokonywanych na dysku dostępnym w trybie tylko do odczytu; dla API kryptograficznego jądra przygotowano prymitywy kryptograficzne XChaCha20-Poly1305 AEAD i curve25519, niezbędne dla sterownika. VPN WireGuard.
Źródło: opennet.ru
