Я пытаюсь выяснить, как gVisor может предотвратить уязвимость PoC для грязной коровы.
, поэтому я читаю код в sentry в gVisor, и кажется, что madvise () в sentry имеет блокировку, поэтому часовой может избежать состояния гонки.
в pkg / sentry / mm / syscalls.go
// Decommit implements the semantics of Linux's madvise(MADV_DONTNEED).
func (mm *MemoryManager) Decommit(addr usermem.Addr, length uint64) error {
...
mm.mappingMu.RLock()
defer mm.mappingMu.RUnlock()
mm.activeMu.Lock()
defer mm.activeMu.Unlock()
...
Но я ожидаю, что будет структурная причина, по которой gVisor избежал грязной коровыУязвимость.
Итак, я посмотрел несколько видео и документов от gVisor, но они только продемонстрировали, что gVisor может предотвратить возникновение ситуации, которая записывается в файл только для чтения.
И, к сожалению, я не смог найтидругие причины, по которым они могут защитить файл «только для чтения» от кода эксплойта в этих видеороликах.
Означает ли это, что такая же проблема возникнет, как и в обычном докере, если у часового тоже будет состояние гонки в той же точке?
если это так, Sentry попытается записать в файл как корень, и я думаю, что возникнет та же проблема.
Или есть более фундаментальная причина, по которой я пропустил?