summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Todd Frederick <tfred@google.com> 2022-03-26 02:54:17 +0000
committer Todd Frederick <tfred@google.com> 2022-03-29 15:53:36 +0000
commit621533f895b30ca281e79a7a7c03eefd352359b5 (patch)
treea97c4c3b3bce1642143ddf3f12c16ec8b5ead0df
parent171a64a823952b0ab210688a1d342e9882078400 (diff)
dumpstate: Close API FDs on exec
Set the external bugreport and screenshot FDs used in service API invocations as CLOEXEC to prevent them from being inherited by incident, which does not have SELinux permissions to access them. SELinux checks FDs inherited by a new process and reports audit events for unauthorized files. Bug: 218515584 Test: adb shell am broadcast -a com.android.internal.intent.action.BUGREPORT_REQUESTED -f 285212672 --ei android.intent.extra.BUGREPORT_TYPE 0 and check for SELinux denials Change-Id: I0b162f32fdff758953cf9262f85c55dc53525305 Merged-In: I69f420abf0c736149c2b03fb3ba47743dceff2d7
-rw-r--r--cmds/dumpstate/dumpstate.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index 24b201f8ab..890c15f895 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -2733,8 +2733,8 @@ void Dumpstate::DumpOptions::Initialize(BugreportMode bugreport_mode,
const android::base::unique_fd& screenshot_fd_in,
bool is_screenshot_requested) {
// Duplicate the fds because the passed in fds don't outlive the binder transaction.
- bugreport_fd.reset(dup(bugreport_fd_in.get()));
- screenshot_fd.reset(dup(screenshot_fd_in.get()));
+ bugreport_fd.reset(fcntl(bugreport_fd_in.get(), F_DUPFD_CLOEXEC, 0));
+ screenshot_fd.reset(fcntl(screenshot_fd_in.get(), F_DUPFD_CLOEXEC, 0));
SetOptionsFromMode(bugreport_mode, this, is_screenshot_requested);
}