From 1b11339179296c6ccd3a8c717d1d8d530ee61ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 15 Feb 2018 10:30:46 +0100 Subject: [PATCH] udevadm: fix fd leak on oom Unlikely, but let's be correct. CID #1386003. --- src/udev/udevadm-trigger.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c index 05ddcdf48b..d979c1bc24 100644 --- a/src/udev/udevadm-trigger.c +++ b/src/udev/udevadm-trigger.c @@ -42,7 +42,7 @@ static int exec_list(struct udev_enumerate *udev_enumerate, const char *action, udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(udev_enumerate)) { char filename[UTIL_PATH_SIZE]; const char *syspath; - int fd; + _cleanup_close_ int fd = -1; syspath = udev_list_entry_get_name(entry); if (verbose) @@ -54,14 +54,15 @@ static int exec_list(struct udev_enumerate *udev_enumerate, const char *action, fd = open(filename, O_WRONLY|O_CLOEXEC); if (fd < 0) continue; + if (settle_set) { r = set_put_strdup(settle_set, syspath); if (r < 0) return log_oom(); } + if (write(fd, action, strlen(action)) < 0) log_debug_errno(errno, "error writing '%s' to '%s': %m", action, filename); - close(fd); } return 0;