git: cb54c500d0e1 - main - touch: don't leak descriptor if fstat(2) fails
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 12 Mar 2022 10:43:28 UTC
The branch main has been updated by oshogbo:
URL: https://cgit.FreeBSD.org/src/commit/?id=cb54c500d0e1a2c52270b15c6db6a88ca3feb86a
commit cb54c500d0e1a2c52270b15c6db6a88ca3feb86a
Author: Mariusz Zaborski <oshogbo@FreeBSD.org>
AuthorDate: 2022-03-12 10:38:12 +0000
Commit: Mariusz Zaborski <oshogbo@FreeBSD.org>
CommitDate: 2022-03-12 10:38:12 +0000
touch: don't leak descriptor if fstat(2) fails
If fstat(2) fails the close(2) won't be called, which will leak the
file descriptor.
The idea was borrowed from OpenBSD, where similar patch
was applied for futimens(2).
MFC after: 1 week
---
usr.bin/touch/touch.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/usr.bin/touch/touch.c b/usr.bin/touch/touch.c
index 62f77d46e429..1594eacb67d0 100644
--- a/usr.bin/touch/touch.c
+++ b/usr.bin/touch/touch.c
@@ -177,11 +177,19 @@ main(int argc, char *argv[])
/* Create the file. */
fd = open(*argv,
O_WRONLY | O_CREAT, DEFFILEMODE);
- if (fd == -1 || fstat(fd, &sb) || close(fd)) {
+ if (fd == -1) {
rval = 1;
warn("%s", *argv);
continue;
}
+ if (fstat(fd, &sb) < 0) {
+ warn("%s", *argv);
+ rval = 1;
+ }
+ if (close(fd) < 0) {
+ warn("%s", *argv);
+ rval = 1;
+ }
/* If using the current time, we're done. */
if (!timeset)