From 2a85ab00b30f1d3a3212fecfad1138cc2d54af3b Mon Sep 17 00:00:00 2001 From: Zhao Wei Liew Date: Wed, 31 Oct 2018 14:05:57 +0000 Subject: [PATCH] liblight: Fix potential fd leak Currently, when the value to be written to an LED file does not fit into the buffer, the opened file descriptor is not closed, leaking the file descriptor. Fix it by closing the file descriptor before returning. Change-Id: I1c46fcc35f560358b1f60e0fac45f4c5a42cd484 --- liblight/lights.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/liblight/lights.c b/liblight/lights.c index d5717488..9f605270 100644 --- a/liblight/lights.c +++ b/liblight/lights.c @@ -123,7 +123,10 @@ write_int(char const* path, int value) if (fd >= 0) { char buffer[20]; size_t bytes = snprintf(buffer, sizeof(buffer), "%d\n", value); - if(bytes >= sizeof(buffer)) return -EINVAL; + if (bytes >= sizeof(buffer)) { + close(fd); + return -EINVAL; + } ssize_t amt = write(fd, buffer, bytes); close(fd); return amt == -1 ? -errno : 0; @@ -146,7 +149,10 @@ write_double_int(char const* path, int value1, int value2) if (fd >= 0) { char buffer[20]; size_t bytes = snprintf(buffer, sizeof(buffer), "%d %d\n", value1, value2); - if(bytes >= sizeof(buffer)) return -EINVAL; + if (bytes >= sizeof(buffer)) { + close(fd); + return -EINVAL; + } ssize_t amt = write(fd, buffer, bytes); close(fd); return amt == -1 ? -errno : 0;