From: Zbigniew Jędrzejewski-Szmek Date: Thu, 15 Feb 2018 09:30:46 +0000 (+0100) Subject: udevadm: fix fd leak on oom X-Git-Tag: v238~98^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b11339179296c6ccd3a8c717d1d8d530ee61ebc;p=thirdparty%2Fsystemd.git udevadm: fix fd leak on oom Unlikely, but let's be correct. CID #1386003. --- diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c index 05ddcdf48b7..d979c1bc249 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;