Libnetwork currently uses a very old version of github.com/armon/go-radix. When updating the dependency to a more current version, we found that the way it's used in the libnetwork code is not correct; while there's a proposed fix in the upstream repository, that fix has not been accepted (yet), as it would only prevent one possible scenario, but the library is not written for concurrent use; see armon/go-radix#14 (comment)
It seems like the only way to hit this issue is to be doing concurrent read/write operations without synchronization. This means a delete took place concurrently with a walk. This fix might avoid a particular race condition, but the library itself is not designed for concurrent read/write and there are likely other edge cases that are not handled.
We should look at how the library is used, and;
Libnetwork currently uses a very old version of github.com/armon/go-radix. When updating the dependency to a more current version, we found that the way it's used in the libnetwork code is not correct; while there's a proposed fix in the upstream repository, that fix has not been accepted (yet), as it would only prevent one possible scenario, but the library is not written for concurrent use; see armon/go-radix#14 (comment)
We should look at how the library is used, and;