From 583ae3e55da03f0f1d80f6067cf74471bdeda180 Mon Sep 17 00:00:00 2001 From: Alessio Balsini Date: Wed, 23 Mar 2022 18:27:59 +0000 Subject: [PATCH] FUSE-BPF: use both ro and persist properties persist.sys.fuse.bpf.enable and ro.fuse.bpf.enabled are both used to decide if FUSE-BPF must be enabled or not. - ro.fuse.bpf.enabled is a read-only property that is set in the device makefile and would allow dogfooding devices to turn the feature on/off. - persist.sys.fuse.bpf.enable is a system property that overrides ro.fuse.bpf.enabled and can only be set manually during the development to simplify the testing of FUSE-BPF, mostly to compare if those tests that are failing with FUSE-BPF were failing also without the feature. Bug: 202785178 Test: adb logcat | grep "FuseDaemon" | grep BPF Ignore-AOSP-First: FUSE-BPF is not available in AOSP Signed-off-by: Alessio Balsini Change-Id: I23f9d27172907f6c72c73bea22e4a7e0ac643888 --- Utils.cpp | 10 ++++++++++ Utils.h | 3 ++- model/EmulatedVolume.cpp | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Utils.cpp b/Utils.cpp index ba6afd8..e8049ed 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -1765,5 +1765,15 @@ std::pair OpenDirInProcfs(std::string_vie return {std::move(fd), std::move(linkPath)}; } +bool IsFuseBpfEnabled() { + std::string bpf_override = android::base::GetProperty("persist.sys.fuse.bpf.override", ""); + if (bpf_override == "true") { + return true; + } else if (bpf_override == "false") { + return false; + } + return base::GetBoolProperty("ro.fuse.bpf.enabled", false); +} + } // namespace vold } // namespace android diff --git a/Utils.h b/Utils.h index 71eb5eb..429669b 100644 --- a/Utils.h +++ b/Utils.h @@ -37,7 +37,6 @@ namespace vold { static const char* kVoldAppDataIsolationEnabled = "persist.sys.vold_app_data_isolation_enabled"; static const char* kExternalStorageSdcardfs = "external_storage.sdcardfs.enabled"; -static const char* kFuseBpfEnabled = "persist.sys.fuse.bpf.override"; static constexpr std::chrono::seconds kUntrustedFsckSleepTime(45); @@ -206,6 +205,8 @@ status_t UnmountUserFuse(userid_t userId, const std::string& absolute_lower_path status_t PrepareAndroidDirs(const std::string& volumeRoot); +bool IsFuseBpfEnabled(); + // Open a given directory as an FD, and return that and the corresponding procfs virtual // symlink path that can be used in any API that accepts a path string. Path stays valid until // the directory FD is closed. diff --git a/model/EmulatedVolume.cpp b/model/EmulatedVolume.cpp index 7c8a4e0..270d097 100644 --- a/model/EmulatedVolume.cpp +++ b/model/EmulatedVolume.cpp @@ -49,7 +49,7 @@ EmulatedVolume::EmulatedVolume(const std::string& rawPath, int userId) mRawPath = rawPath; mLabel = "emulated"; mFuseMounted = false; - mFuseBpfEnabled = base::GetBoolProperty(kFuseBpfEnabled, false); + mFuseBpfEnabled = IsFuseBpfEnabled(); mUseSdcardFs = IsSdcardfsUsed(); mAppDataIsolationEnabled = base::GetBoolProperty(kVoldAppDataIsolationEnabled, false); } @@ -61,7 +61,7 @@ EmulatedVolume::EmulatedVolume(const std::string& rawPath, dev_t device, const s mRawPath = rawPath; mLabel = fsUuid; mFuseMounted = false; - mFuseBpfEnabled = base::GetBoolProperty(kFuseBpfEnabled, false); + mFuseBpfEnabled = IsFuseBpfEnabled(); mUseSdcardFs = IsSdcardfsUsed(); mAppDataIsolationEnabled = base::GetBoolProperty(kVoldAppDataIsolationEnabled, false); }