diff --git a/arc/adbd/adbd.cc b/arc/adbd/adbd.cc
index 90f9b7c..0bfcf3f 100644
--- a/arc/adbd/adbd.cc
+++ b/arc/adbd/adbd.cc
@@ -150,10 +150,11 @@
   const base::ListValue* kernel_module_list = nullptr;
   // kernelModules are optional.
   if (config_root_dict->GetList("kernelModules", &kernel_module_list)) {
-    for (const auto* kernel_module_value : *kernel_module_list) {
+    for (const auto& kernel_module_value :
+         base::ValueReferenceAdapter(*kernel_module_list)) {
       AdbdConfigurationKernelModule module;
       const base::DictionaryValue* kernel_module_dict = nullptr;
-      if (!kernel_module_value->GetAsDictionary(&kernel_module_dict)) {
+      if (!kernel_module_value.GetAsDictionary(&kernel_module_dict)) {
         LOG(ERROR) << "kernelModules contains a non-dictionary";
         return false;
       }
@@ -164,9 +165,10 @@
       const base::ListValue* parameter_list = nullptr;
       if (kernel_module_dict->GetList("parameters", &parameter_list)) {
         // Parameters are optional.
-        for (const auto* parameter_value : *parameter_list) {
+        for (const auto& parameter_value :
+             base::ValueReferenceAdapter(*parameter_list)) {
           std::string parameter;
-          if (!parameter_value->GetAsString(&parameter)) {
+          if (!parameter_value.GetAsString(&parameter)) {
             LOG(ERROR) << "kernelModules.parameters contains a non-string";
             return false;
           }
diff --git a/authpolicy/policy/device_policy_encoder.cc b/authpolicy/policy/device_policy_encoder.cc
index 7d854c1..7230c0e 100644
--- a/authpolicy/policy/device_policy_encoder.cc
+++ b/authpolicy/policy/device_policy_encoder.cc
@@ -448,14 +448,15 @@
     if (!is_error) {
       proto->set_timezone(timezone);
 
-      for (const base::Value* entry : *intervals) {
+      for (const base::Value& entry : base::ValueReferenceAdapter(*intervals)) {
         is_error |=
-            !EncodeWeeklyTimeIntervalProto(*entry, proto->add_intervals());
+            !EncodeWeeklyTimeIntervalProto(entry, proto->add_intervals());
       }
 
-      for (const base::Value* entry : *ignored_policy_proto_tags) {
+      for (const base::Value& entry :
+           base::ValueReferenceAdapter(*ignored_policy_proto_tags)) {
         int tag = 0;
-        is_error |= !entry->GetAsInteger(&tag);
+        is_error |= !entry.GetAsInteger(&tag);
         proto->add_ignored_policy_proto_tags(tag);
       }
     }
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 2cb9f77..b4b2ec9 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -134,8 +134,8 @@
 brillo::Any GetJsonList(const base::ListValue& list) {
   std::vector<T> val;
   val.reserve(list.GetSize());
-  for (const base::Value* v : list)
-    val.push_back(JsonToAny(*v).Get<T>());
+  for (const base::Value& v : base::ValueReferenceAdapter(list))
+    val.push_back(JsonToAny(v).Get<T>());
   return val;
 }
 
diff --git a/buffet/dbus_conversion.cc b/buffet/dbus_conversion.cc
index 5c0ebd0..c7e849e 100644
--- a/buffet/dbus_conversion.cc
+++ b/buffet/dbus_conversion.cc
@@ -31,9 +31,9 @@
                       bool (base::Value::*fnc)(T*) const) {
   std::vector<T> result;
   result.reserve(list.GetSize());
-  for (const base::Value* v : list) {
+  for (const base::Value& v : base::ValueReferenceAdapter(list)) {
     T val;
-    CHECK((v->*fnc)(&val));
+    CHECK((v.*fnc)(&val));
     result.push_back(val);
   }
   return result;
@@ -42,9 +42,9 @@
 brillo::Any DictListToAny(const base::ListValue& list) {
   std::vector<brillo::VariantDictionary> result;
   result.reserve(list.GetSize());
-  for (const base::Value* v : list) {
+  for (const base::Value& v : base::ValueReferenceAdapter(list)) {
     const base::DictionaryValue* dict = nullptr;
-    CHECK(v->GetAsDictionary(&dict));
+    CHECK(v.GetAsDictionary(&dict));
     result.push_back(DictionaryToDBusVariantDictionary(*dict));
   }
   return result;
@@ -53,8 +53,8 @@
 brillo::Any ListListToAny(const base::ListValue& list) {
   std::vector<brillo::Any> result;
   result.reserve(list.GetSize());
-  for (const base::Value* v : list)
-    result.push_back(ValueToAny(*v));
+  for (const base::Value& v : base::ValueReferenceAdapter(list))
+    result.push_back(ValueToAny(v));
   return result;
 }
 
@@ -91,8 +91,8 @@
         break;
       }
       auto type = (*list->begin())->GetType();
-      for (const base::Value* v : *list)
-        CHECK_EQ(v->GetType(), type) << "Unsupported different type elements";
+      for (const base::Value& v : base::ValueReferenceAdapter(*list))
+        CHECK_EQ(v.GetType(), type) << "Unsupported different type elements";
 
       switch (type) {
         case base::Value::Type::BOOLEAN:
diff --git a/chromeos-dbus-bindings/generate_chromeos_dbus_bindings.cc b/chromeos-dbus-bindings/generate_chromeos_dbus_bindings.cc
index 40e170c..863d728 100644
--- a/chromeos-dbus-bindings/generate_chromeos_dbus_bindings.cc
+++ b/chromeos-dbus-bindings/generate_chromeos_dbus_bindings.cc
@@ -110,9 +110,9 @@
   base::ListValue* list = nullptr;  // Owned by |dict|.
   if (dict->GetListWithoutPathExpansion("ignore_interfaces", &list)) {
     config->ignore_interfaces.reserve(list->GetSize());
-    for (base::Value* item : *list) {
+    for (const base::Value& item : base::ValueReferenceAdapter(*list)) {
       std::string interface_name;
-      if (!item->GetAsString(&interface_name)) {
+      if (!item.GetAsString(&interface_name)) {
         LOG(ERROR) << "Invalid interface name in [ignore_interfaces] section";
         return false;
       }
diff --git a/run_oci/container_config_parser.cc b/run_oci/container_config_parser.cc
index 968614a..474f05d 100644
--- a/run_oci/container_config_parser.cc
+++ b/run_oci/container_config_parser.cc
@@ -106,9 +106,10 @@
       continue;
     CapSet caps;
     cap_value_t cap_value;
-    for (const auto* cap_name_value : *capset_list) {
+    for (const auto& cap_name_value :
+         base::ValueReferenceAdapter(*capset_list)) {
       std::string cap_name;
-      if (!cap_name_value->GetAsString(&cap_name)) {
+      if (!cap_name_value.GetAsString(&cap_name)) {
         LOG(ERROR) << "Capability list " << set_name
                    << " contains a non-string";
         return false;
diff --git a/webserver/webservd/config.cc b/webserver/webservd/config.cc
index 3ec285d..18718b6 100644
--- a/webserver/webservd/config.cc
+++ b/webserver/webservd/config.cc
@@ -138,10 +138,11 @@
 
   const base::ListValue* protocol_handlers = nullptr;  // Owned by |dict_value|
   if (dict_value->GetList(kProtocolHandlersKey, &protocol_handlers)) {
-    for (base::Value* handler_value : *protocol_handlers) {
+    for (const base::Value& handler_value :
+             base::ValueReferenceAdapter(*protocol_handlers)) {
       const base::DictionaryValue* handler_dict = nullptr;  // Owned by
                                                             // |dict_value|
-      if (!handler_value->GetAsDictionary(&handler_dict)) {
+      if (!handler_value.GetAsDictionary(&handler_dict)) {
         brillo::Error::AddTo(
             error,
             FROM_HERE,
