weaveworks / weave

Simple, resilient multi-host containers networking and more.
https://www.weave.works
Apache License 2.0
6.62k stars 671 forks source link

clock: protect field access with lock to avoid possible data race #3984

Open yanke-xu opened 1 year ago

yanke-xu commented 1 year ago

Fixed inconsistency and also potential data race in weave/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go: f.waiter is read/written 4 times in weave/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go; 3 out of 4 times it is protected by f.fakeClock.lock/f,lock; 1 out of 4 times it is read without a Lock, which is in func C on L317. A data race may happen when C() and other func like Stop() are called in parallel.

In order to avoid potential data race here, I use f.fakeClock.lock.RLock(); defer f.fakeClock.lock.RUnlock() to make sure that all usages of items is in critical section.

yanke-xu commented 1 year ago

I don't know whether it is accurate, so I 'm looking forward to your reply.