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
This commit is contained in:
Tao Bao 2019-01-16 09:29:17 -08:00
parent 21cfc8b6f4
commit b549243b27
4 changed files with 4 additions and 4 deletions

View file

@ -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.

View file

@ -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();

View file

@ -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. */

View file

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