Marek Kwaczynski 81a358f52e mtk: mac80211: fix CSA crash with dynamic VLAN
When using dynamic VLAN (AP_VLAN) on 5 GHz, CSA finalize may call
_ieee80211_sta_cap_rx_bw() with a non-NULL chandef whose ->chan is NULL.
This leads to a NULL pointer dereference at chandef->chan->band and a
kernel panic.

Avoid the crash by validating chandef->chan before accessing the band and
fall back to the existing non-chandef path when the channel pointer is not
available during CSA.

Trace:
Unable to handle kernel read from unreadable memory at virtual address 0000000000000000
Internal error: Oops: 0000000096000005 [#1] SMP
CPU: 0 PID: 59 Comm: kworker/u4:2
Workqueue: events_unbound wiphy_delayed_work_pending [cfg80211]
Hardware name: Edgecore EAP111 (DT)
pc : _ieee80211_sta_cap_rx_bw+0x14/0xcc [mac80211]
lr : _ieee80211_sta_cur_vht_bw+0x20/0xb0 [mac80211]

Call trace:
  _ieee80211_sta_cap_rx_bw+0x14/0xcc [mac80211]
  ieee80211_iter_chan_contexts_atomic+0x260/0xf38 [mac80211]
  ieee80211_link_unreserve_chanctx+0x430/0xab8 [mac80211]
  ieee80211_link_use_reserved_context+0xac/0xf4 [mac80211]
  ieee80211_nan_func_terminated+0x3f8c/0x4f00 [mac80211]
  ieee80211_csa_finalize_work+0x2c/0x34 [mac80211]
  wiphy_delayed_work_pending+0x298/0x3bc [cfg80211]
  process_one_work+0x178/0x2f0
  worker_thread+0x2e8/0x4d4
  kthread+0xdc/0xe0
  ret_from_fork+0x10/0x20

  Kernel panic - not syncing: Oops: Fatal exception

Fixes: WIFI-15312

Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
2026-01-24 09:23:58 +01:00
2022-01-31 07:01:31 +01:00
2021-05-04 13:51:23 +02:00
2023-10-03 07:22:31 +02:00
2024-02-29 08:48:14 -08:00
2022-10-19 17:04:14 -07:00

OpenWiFi AP NOS

OpenWrt-based access point network operating system (AP NOS) for TIP OpenWiFi. Read more at openwifi.tip.build.

Building

Setting up your build machine

Building requires a recent Linux installation. Older systems without Python 3.7 will have trouble. See this guide for details: https://openwrt.org/docs/guide-developer/toolchain/beginners-build-guide

Install build packages on Debian/Ubuntu (or see above guide for other systems):

sudo apt install build-essential libncurses5-dev gawk git libssl-dev gettext zlib1g-dev swig unzip time rsync python3 python3-setuptools python3-yaml

Doing a native build on Linux

Use ./build.sh <target>, or follow the manual steps below:

  1. Clone and set up the tree. This will create an openwrt/ directory.
./setup.py --setup    # for subsequent builds, use --rebase instead
  1. Select the profile and base package selection. This setup will install the feeds and packages and generate the .config file.
cd openwrt
./scripts/gen_config.py linksys_ea8300
  1. Build the tree (replace -j 8 with the number of cores to use).
make -j 8 V=s

Build output

The build results are located in the openwrt/bin/ directory:

Type Path
Firmware images openwrt/bin/targets/<target>/<subtarget>/
Kernel modules openwrt/bin/targets/<target>/<subtarget>/packages/
Package binaries openwrt/bin/packages/<platform>/<feed>/

Developer Notes

Branching model

  • main - Stable dev branch
  • next - Integration branch
  • staging-* - Feature/bug branches
  • release/v#.#.# - Release branches (major.minor.patch)

Repository structure

Build files:

  • Makefile - Calls Docker environment per target
  • dock-run.sh - Dockerized build environment
  • docker/Dockerfile - Dockerfile for build image
  • build.sh - Build script
  • setup.py - Clone and set up the tree
  • config.yml - Specifies OpenWrt version and patches to apply

Directories:

  • feeds/ - OpenWiFi feeds
  • patches/ - OpenWiFi patches applied during builds
  • profiles/ - Per-target kernel configs, packages, and feeds

uCentral packages

AP-NOS packages implementing the uCentral protocol include the following repositories (refer to the ucentral feed for a full list):

Description
No description provided
Readme BSD-3-Clause 210 MiB
Languages
C 85.8%
Shell 4.9%
Makefile 3.8%
Roff 2.8%
UnrealScript 1.3%
Other 1.2%