diff --git a/src/mesh/Router.cpp b/src/mesh/Router.cpp index 6cecf4a0e..11d45a12c 100644 --- a/src/mesh/Router.cpp +++ b/src/mesh/Router.cpp @@ -369,10 +369,14 @@ ErrorCode Router::send(meshtastic_MeshPacket *p) } fixPriority(p); // Before encryption, fix the priority if it's unset - if (!applyPositionPrecisionForChannel(*p, p->channel)) { - LOG_ERROR("Dropping malformed position packet before send"); - packetPool.release(p); - return meshtastic_Routing_Error_BAD_REQUEST; + // Position precision is an originator-only privacy policy. Relays keep + // p->from as the original sender, so do not rewrite their POSITION_APP payload. + if (isFromUs(p)) { + if (!applyPositionPrecisionForChannel(*p, p->channel)) { + LOG_ERROR("Dropping malformed position packet before send"); + packetPool.release(p); + return meshtastic_Routing_Error_BAD_REQUEST; + } } // If the packet is not yet encrypted, do so now