From b549243b2716c293d0a1be45fe28088b0150789d Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Wed, 16 Jan 2019 09:29:17 -0800 Subject: Use O_CLOEXEC at a few places. Found these FDs unintentionally propagated into forked processes (e.g. updater) during my local debugging. Use O_CLOEXEC to avoid that. Test: Dump open FDs in updater process. Test: Sideload a package on taimen (which uses framebuffer). Test: Run graphics test on taimen. Change-Id: I1fb65dd4a103c47d28b15973def9e9359c251ca3 --- minui/events.cpp | 2 +- minui/graphics_adf.cpp | 2 +- minui/graphics_drm.cpp | 2 +- minui/graphics_fbdev.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/minui/events.cpp b/minui/events.cpp index d94e97723..30f8d50a2 100644 --- a/minui/events.cpp +++ b/minui/events.cpp @@ -66,7 +66,7 @@ int ev_init(ev_callback input_cb, bool allow_touch_inputs) { dirent* de; while ((de = readdir(dir))) { if (strncmp(de->d_name, "event", 5)) continue; - int fd = openat(dirfd(dir), de->d_name, O_RDONLY); + int fd = openat(dirfd(dir), de->d_name, O_RDONLY | O_CLOEXEC); if (fd == -1) continue; // Use unsigned long to match ioctl's parameter type. diff --git a/minui/graphics_adf.cpp b/minui/graphics_adf.cpp index 9eea497d6..10cd60709 100644 --- a/minui/graphics_adf.cpp +++ b/minui/graphics_adf.cpp @@ -101,7 +101,7 @@ int MinuiBackendAdf::DeviceInit(adf_device* dev) { err = adf_device_attach(dev, eng_id, intf_id); if (err < 0 && err != -EALREADY) return err; - intf_fd = adf_interface_open(dev, intf_id, O_RDWR); + intf_fd = adf_interface_open(dev, intf_id, O_RDWR | O_CLOEXEC); if (intf_fd < 0) return intf_fd; err = InterfaceInit(); diff --git a/minui/graphics_drm.cpp b/minui/graphics_drm.cpp index 765e2625a..7b2eed15d 100644 --- a/minui/graphics_drm.cpp +++ b/minui/graphics_drm.cpp @@ -285,7 +285,7 @@ GRSurface* MinuiBackendDrm::Init() { /* Consider DRM devices in order. */ for (int i = 0; i < DRM_MAX_MINOR; i++) { auto dev_name = android::base::StringPrintf(DRM_DEV_NAME, DRM_DIR_NAME, i); - android::base::unique_fd fd(open(dev_name.c_str(), O_RDWR)); + android::base::unique_fd fd(open(dev_name.c_str(), O_RDWR | O_CLOEXEC)); if (fd == -1) continue; /* We need dumb buffers. */ diff --git a/minui/graphics_fbdev.cpp b/minui/graphics_fbdev.cpp index 8d9c9741d..2584017d6 100644 --- a/minui/graphics_fbdev.cpp +++ b/minui/graphics_fbdev.cpp @@ -56,7 +56,7 @@ void MinuiBackendFbdev::SetDisplayedFramebuffer(size_t n) { } GRSurface* MinuiBackendFbdev::Init() { - android::base::unique_fd fd(open("/dev/graphics/fb0", O_RDWR)); + android::base::unique_fd fd(open("/dev/graphics/fb0", O_RDWR | O_CLOEXEC)); if (fd == -1) { perror("cannot open fb0"); return nullptr; -- cgit v1.2.3