Executive Summary #
| Issue date | 2026-01-20 |
| Severity | major |
| Impact | Temporary uncontrolled flight, breach of bubble fence, collision or crash |
| Affected software | Skybrush firmware up to and including version 20251017 |
| Status | Patched in Skybrush firmware version 20260110 |
A logic error has been identified in how ArduCopter processes GPS Time of Week (ToW) information found in UBX messages to define its internal clock time. During the transition around Sunday 00:00:00 UTC a race condition between two incoming UBX messages may cause a temporary internal time rollback of around one week.
For drone show operators using Skybrush firmware, this causes the onboard “show clock” to roll back to the start of the show, triggering immediate repositioning commands towards the takeoff positions that violate physical constraints for the short time window during which the internal timestamp is reported incorrectly. These commands may result in a bubble geofence breach and may also cause the aircraft to move unexpectedly, land in place or disarm, depending on the configuration of the bubble fence.
Technical Details #
Bug description #
The bug originates in the U-blox GPS driver of ArduCopter (in version 4.6.3, but other versions may also be affected) that can potentially cause AP_GPS::time_epoch_usec() return an incorrect timestamp around the GPS timestamp rollover (every week on Sunday around midnight UTC). The race condition appears when a NAV-PVT message is received first after the rollover, then state.time_week_ms gets updated in the local state but the week number remains the same because NAV-PVT does not contain the week number at all. Therefore the time reported by AP_GPS::time_epoch_usec() rolls back with around a week for a short period of time (typically half a second or so), until the first UBX message with the correct week number arrives and the overall time signal gets corrected again.
There are also other places in the code where state.time_week and state.time_week_ms are not updated in tandem; updating time_week only while keeping time_week_ms as-is can also potentially be problematic.
Consequences #
Skybrush firmware (up to and including version 20251017) trusted the timestamp recorded by ArduCopter and did not explicitly check for the case outlined above, causing the internal show clock to suddenly roll back to the start of the show. The show trajectory evaluator then commands the drone to change its desired position to the takeoff position corresponding to this new bad timestamp, which creates a spike in the calculated error between the actual and desired positions, potentially triggering the bubble fence if the firmware parameters are set up strictly (e.g., zero timeout for large position drifts in the bubble fence settings). If the bubble fence action is set to disarm, it is possible that many or all drones fall from the sky right after the UTC Sunday midnight rollover. If drones do not disarm but the error spike is long enough, drones might start to fly back towards their takeoff positions unexpectedly.
Affected versions #
-
As the time of writing, the latest stable ArduCopter version is 4.6.3, which is affected by this bug. The issue was confirmed by the ArduPilot developers and a permanent fix was already implemented and merged in this pull request.
-
Skybrush firmware is affected up to and including version 20251017. A workaround was implemented in this commit on 2025-12-09. The first stable release with the workaround is Skybrush firmware version 20260110.
Mitigation and resolution #
Suggested immediate actions #
We recommend not to fly shows that span across the Sunday 00:00:00 UTC window until the firmware of your drones is updated.
Update firmware. Flash all flight controllers with Skybrush firmware 20260110 or higher.
Temporary workaround (if update is impossible) #
Schedule show times to conclude at least 10 minutes prior to Sunday 00:00:00 UTC or start the show 10 minutes after Sunday 00:00:00 UTC.
Set the timeout of bubble fence to at least 1 second and do not set disarm action on breach (NOT RECOMMENDED for public shows).
Contact & support #
For technical inquiries regarding this bulletin, please contact us on our Discord channel.
Cover image generated by Google Gemini