From 7d28688f960c8fde445558c6c1d4f9446d314882 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Sat, 8 Feb 2020 16:38:56 -0800 Subject: [PATCH 1/3] snapshotctl_log dir readable by dumpstate Set snapshotctl_log as 0755 so that it is readable by dumpstate. Test: bugreport Bug: 148818798 Change-Id: I6ff52cf0a2e928c74df31aa054ae780f919d6eb0 --- rootdir/init.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rootdir/init.rc b/rootdir/init.rc index d6ce0d227..80db5a792 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -611,7 +611,7 @@ on post-fs-data mkdir /data/misc/installd 0700 root root mkdir /data/misc/apexdata 0711 root root mkdir /data/misc/apexrollback 0700 root root - mkdir /data/misc/snapshotctl_log 0770 root root + mkdir /data/misc/snapshotctl_log 0755 root root # create location to store pre-reboot information mkdir /data/misc/prereboot 0700 system system From bdf93248a30d5deccd493b8e38a3056eb4e87eff Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Sat, 8 Feb 2020 16:44:08 -0800 Subject: [PATCH 2/3] snapshotctl logs readable by dumpstate Set persistent logs for snapshotctl to 0644 so that they are readable by dumpstate. Not using mode field in open() because it is masked by umask. Directly use fchmod instead. Test: reboot and take bugreport Bug: 148818798 Change-Id: I515f8fd1345fcfb82aa2a1ec0c95da4b6921c039 --- fs_mgr/libsnapshot/snapshotctl.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/fs_mgr/libsnapshot/snapshotctl.cpp b/fs_mgr/libsnapshot/snapshotctl.cpp index d724be390..e35ad4b2d 100644 --- a/fs_mgr/libsnapshot/snapshotctl.cpp +++ b/fs_mgr/libsnapshot/snapshotctl.cpp @@ -61,7 +61,16 @@ class FileLogger { ss << kLogFilePath << "snapshotctl." << Now() << ".log"; fd_.reset(TEMP_FAILURE_RETRY( open(ss.str().c_str(), - O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW | O_SYNC, 0660))); + O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW | O_SYNC, 0644))); + if (fd_ == -1) { + PLOG(ERROR) << "Cannot open persistent log " << ss.str(); + return; + } + // Explicitly chmod again because mode in open() may be masked by umask. + if (fchmod(fd_.get(), 0644) == -1) { + PLOG(ERROR) << "Cannot chmod 0644 persistent log " << ss.str(); + return; + } } // Copy-contuctor needed to be converted to std::function. FileLogger(const FileLogger& other) { fd_.reset(dup(other.fd_)); } @@ -108,7 +117,8 @@ bool MergeCmdHandler(int argc, char** argv) { // 'snapshotctl merge' is stripped away from arguments to // Logger. - android::base::InitLogging(argv, MergeCmdLogger(argc - 2, argv + 2)); + android::base::InitLogging(argv); + android::base::SetLogger(MergeCmdLogger(argc - 2, argv + 2)); auto state = SnapshotManager::New()->InitiateMergeAndWait(); From faa49d1d0052e074606d88cc56638b573d6e5fb0 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Sat, 8 Feb 2020 16:38:39 -0800 Subject: [PATCH 3/3] libsnapshot callstack files readable by dumpstate Set callstack logs as 0644 so that they are readable by dumpstate. Test: take OTA, cancel, delete /data/misc/update_engine/prefs/* manually, retrigger OTA (so that callstack is logged), then re-take bug report Bug: 148818798 Change-Id: I598e484b57dcd3ce6ed7bb483aee57ce2ba881e7 --- fs_mgr/libsnapshot/snapshot.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp index a937b433f..ba53615fb 100644 --- a/fs_mgr/libsnapshot/snapshot.cpp +++ b/fs_mgr/libsnapshot/snapshot.cpp @@ -232,7 +232,12 @@ bool SnapshotManager::RemoveAllUpdateState(LockedFile* lock) { LOG(WARNING) << callstack_str.c_str(); std::stringstream path; path << "/data/misc/snapshotctl_log/libsnapshot." << Now() << ".log"; - android::base::WriteStringToFile(callstack_str.c_str(), path.str()); + std::string path_str = path.str(); + android::base::WriteStringToFile(callstack_str.c_str(), path_str); + if (chmod(path_str.c_str(), 0644) == -1) { + PLOG(WARNING) << "Unable to chmod 0644 " + << ", file maybe dropped from bugreport:" << path_str; + } #endif if (!RemoveAllSnapshots(lock)) {