From 6b87378634e1575cf590b7558f19b40b012849c2 Mon Sep 17 00:00:00 2001
From: Brielle Broder <bbroder@google.com>
Date: Wed, 1 Aug 2018 09:43:47 -0700
Subject: New conditional for adding key/value pairs to maps.

When adding MultiDeviceKeys and their values into MultiDevice maps, make
sure the keys and values have not already been added. This ensures that
preexisting key/value pairs are not overridden.

PiperOrigin-RevId: 206942766
Change-Id: I9d85f38eb59ba59f0305e6614a52690608944981
---
 pkg/sentry/device/device.go | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'pkg/sentry')

diff --git a/pkg/sentry/device/device.go b/pkg/sentry/device/device.go
index a5514c72f..21fee8f8a 100644
--- a/pkg/sentry/device/device.go
+++ b/pkg/sentry/device/device.go
@@ -183,6 +183,14 @@ func (m *MultiDevice) Load(key MultiDeviceKey, value uint64) bool {
 		m.rcache = make(map[uint64]MultiDeviceKey)
 	}
 
+	if val, exists := m.cache[key]; exists && val != value {
+		return false
+	}
+	if k, exists := m.rcache[value]; exists && k != key {
+		// Should never happen.
+		panic("MultiDevice's caches are inconsistent")
+	}
+
 	// Cache value at key.
 	m.cache[key] = value
 
-- 
cgit v1.2.3