Files
firmware/src
Jonathan BennettandClaude e6ed4b5f6a AdminModule: trust from == 0 only when the dispatcher reports a local origin (#12242)
AdminModule treats from == 0 as a local client, skipping the admin_key and
session-passkey checks. That trust rested entirely on every ingress path
dropping from == 0 (RadioLibInterface, MQTT downlink, UDP multicast and
frame injection all do). Make the handler check it itself:

- MeshModule gains a static currentRequestSource, set by callModules()
  alongside currentRequest, so modules can see the RxSource of the packet
  they are handling.
- AdminModule drops a from == 0 payload unless callModules() is dispatching
  that exact packet with RX_SRC_USER or RX_SRC_LOCAL. It fails closed for a
  radio source, for no dispatch context, and for a context that belongs to
  another packet. The drop is silent (no NAK to a forged sender).

Tests: AdminModuleTestShim::handleReceivedProtobuf now runs the handler
inside a dispatch context (default RX_SRC_USER, the phone client existing
suites stand in for), plus handleWithDispatchContext() for the negative
cases. test_admin_session_repro adds six cases: from == 0 via RX_SRC_RADIO,
with no context, and with another packet's context are rejected, both
directly and through MeshModule::callModules(); the phone-client controls
still apply the setter. With the gate removed, the four rejection cases fail.


Claude-Session: https://claude.ai/code/session_01Y1BYe4ahUHxyhw3nGTX67D

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-03 03:33:35 +00:00
..
2026-08-20 12:28:57 +00:00
2026-10-14 15:18:24 +00:00
2026-01-29 05:56:19 -06:00
2026-02-19 07:16:33 -06:00
2026-05-11 11:46:13 -05:00
…
2026-10-14 15:18:24 +00:00
2026-07-01 19:01:27 -05:00
2026-07-16 18:57:50 -05:00
…