fix potential use-after-frees of stack memory

`devname_value` is a local variable; if `property_get` succeeds, we'll
return a pointer to it. Returning a `std::string` instead sidesteps this
problem.

Bug: 190757198
Test: TreeHugger
Change-Id: If9ca733dd21128706f2a9f62e8460b1286631aa5
diff --git a/gnss/common/utils/default/include/GnssReplayUtils.h b/gnss/common/utils/default/include/GnssReplayUtils.h
index d7530f7..32c0e58 100644
--- a/gnss/common/utils/default/include/GnssReplayUtils.h
+++ b/gnss/common/utils/default/include/GnssReplayUtils.h
@@ -35,7 +35,7 @@
 namespace common {
 
 struct ReplayUtils {
-    static const char* getGnssPath();
+    static std::string getGnssPath();
 
     static std::string getDataFromDeviceFile(const std::string& command, int mMinIntervalMs);
 
diff --git a/gnss/common/utils/default/include/v2_1/GnssTemplate.h b/gnss/common/utils/default/include/v2_1/GnssTemplate.h
index e87a7f4..76024aa 100644
--- a/gnss/common/utils/default/include/v2_1/GnssTemplate.h
+++ b/gnss/common/utils/default/include/v2_1/GnssTemplate.h
@@ -161,11 +161,11 @@
 std::unique_ptr<V2_0::GnssLocation> GnssTemplate<T_IGnss>::getLocationFromHW() {
     if (!mHardwareModeChecked) {
         // default using /dev/gnss0
-        const char* gnss_dev_path = ReplayUtils::getGnssPath();
+        std::string gnss_dev_path = ReplayUtils::getGnssPath();
 
-        mGnssFd = open(gnss_dev_path, O_RDWR | O_NONBLOCK);
+        mGnssFd = open(gnss_dev_path.c_str(), O_RDWR | O_NONBLOCK);
         if (mGnssFd == -1) {
-            ALOGW("Failed to open %s errno: %d", gnss_dev_path, errno);
+            ALOGW("Failed to open %s errno: %d", gnss_dev_path.c_str(), errno);
         }
         mHardwareModeChecked = true;
     }