diff --git a/Makefile.am b/Makefile.am
index 2c6aedc..0ef7221 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -57,7 +57,8 @@
 	elog_meta.cpp \
 	elog_serialize.cpp \
 	sdjournal.cpp \
-	extensions.cpp
+	extensions.cpp \
+	util.cpp
 
 # Be sure to build needed files before compiling
 BUILT_SOURCES = \
diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index db80757..9db6df8 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -17,6 +17,8 @@
 
 #include "data_interface.hpp"
 
+#include "util.hpp"
+
 #include <fstream>
 #include <xyz/openbmc_project/State/OperatingSystem/Status/server.hpp>
 
@@ -225,35 +227,10 @@
     return std::string{};
 }
 
-/**
- * @brief Return a value found in the /etc/os-release file
- *
- * @param[in] key - The key name, like "VERSION"
- *
- * @return std::optional<std::string> - The value
- */
-std::optional<std::string> getOSReleaseValue(const std::string& key)
-{
-    std::ifstream versionFile{BMC_VERSION_FILE};
-    std::string line;
-    std::string keyPattern{key + '='};
-
-    while (std::getline(versionFile, line))
-    {
-        if (line.find(keyPattern) != std::string::npos)
-        {
-            auto pos = line.find_first_of('"') + 1;
-            auto value = line.substr(pos, line.find_last_of('"') - pos);
-            return value;
-        }
-    }
-
-    return std::nullopt;
-}
-
 void DataInterface::readBMCFWVersion()
 {
-    _bmcFWVersion = getOSReleaseValue("VERSION").value_or("");
+    _bmcFWVersion =
+        phosphor::logging::util::getOSReleaseValue("VERSION").value_or("");
 }
 
 void DataInterface::readServerFWVersion()
@@ -263,7 +240,8 @@
 
 void DataInterface::readBMCFWVersionID()
 {
-    _bmcFWVersionID = getOSReleaseValue("VERSION_ID").value_or("");
+    _bmcFWVersionID =
+        phosphor::logging::util::getOSReleaseValue("VERSION_ID").value_or("");
 }
 
 void DataInterface::readMotherboardCCIN()
diff --git a/log_manager.cpp b/log_manager.cpp
index cbfe434..bcc94a5 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -6,6 +6,7 @@
 #include "elog_meta.hpp"
 #include "elog_serialize.hpp"
 #include "extensions.hpp"
+#include "util.hpp"
 
 #include <poll.h>
 #include <sys/inotify.h>
@@ -739,27 +740,14 @@
 
 std::string Manager::readFWVersion()
 {
-    std::string version;
-    std::ifstream versionFile{BMC_VERSION_FILE};
-    std::string line;
-    static constexpr auto VERSION_ID = "VERSION_ID=";
+    auto version = util::getOSReleaseValue("VERSION_ID");
 
-    while (std::getline(versionFile, line))
-    {
-        if (line.find(VERSION_ID) != std::string::npos)
-        {
-            auto pos = line.find_first_of('"') + 1;
-            version = line.substr(pos, line.find_last_of('"') - pos);
-            break;
-        }
-    }
-
-    if (version.empty())
+    if (!version)
     {
         log<level::ERR>("Unable to read BMC firmware version");
     }
 
-    return version;
+    return version.value_or("");
 }
 
 void Manager::create(const std::string& message, Entry::Level severity,
diff --git a/test/Makefile.am b/test/Makefile.am
index ab1378a..b14c0ae 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -54,6 +54,7 @@
 	$(top_builddir)/elog-process-metadata.o \
 	$(top_builddir)/sdjournal.o \
 	$(top_builddir)/extensions.o \
+	$(top_builddir)/util.o \
 	$(CODE_COVERAGE_LIBS)
 
 remote_logging_test_ldadd = \
@@ -120,6 +121,7 @@
 	$(top_builddir)/elog-process-metadata.o \
 	$(top_builddir)/elog_serialize.o \
 	$(top_builddir)/log_manager.o \
+	$(top_builddir)/util.o \
 	$(top_builddir)/xyz/openbmc_project/Logging/Internal/Manager/server.o
 extensions_test_LDFLAGS = $(test_ldflags)
 
diff --git a/util.cpp b/util.cpp
new file mode 100644
index 0000000..a89e754
--- /dev/null
+++ b/util.cpp
@@ -0,0 +1,46 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "config.h"
+
+#include "util.hpp"
+
+namespace phosphor::logging::util
+{
+
+std::optional<std::string> getOSReleaseValue(const std::string& key)
+{
+    std::ifstream versionFile{BMC_VERSION_FILE};
+    std::string line;
+    std::string keyPattern{key + '='};
+
+    while (std::getline(versionFile, line))
+    {
+        if (line.substr(0, keyPattern.size()).find(keyPattern) !=
+            std::string::npos)
+        {
+            // If the value isn't surrounded by quotes, then pos will be
+            // npos + 1 = 0, and the 2nd arg to substr() will be npos
+            // which means get the rest of the string.
+            auto value = line.substr(keyPattern.size());
+            std::size_t pos = value.find_first_of('"') + 1;
+            return value.substr(pos, value.find_last_of('"') - pos);
+        }
+    }
+
+    return std::nullopt;
+}
+
+} // namespace phosphor::logging::util
diff --git a/util.hpp b/util.hpp
new file mode 100644
index 0000000..c348916
--- /dev/null
+++ b/util.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <fstream>
+#include <optional>
+#include <string>
+
+namespace phosphor::logging::util
+{
+
+/**
+ * @brief Return a value found in the /etc/os-release file
+ *
+ * @param[in] key - The key name, like "VERSION"
+ *
+ * @return std::optional<std::string> - The value
+ */
+std::optional<std::string> getOSReleaseValue(const std::string& key);
+
+} // namespace phosphor::logging::util
