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;
}