summaryrefslogtreecommitdiffstats
path: root/include/fileutils.h
diff options
context:
space:
mode:
authorSami Kerola2015-10-31 18:26:51 +0100
committerSami Kerola2015-11-22 21:55:34 +0100
commit3f684db0d93a86b3e9525c57e65a5b281c792a2e (patch)
treec861fe5ed281a7f27258399da536cee40a64b66a /include/fileutils.h
parenttests: update ZFS test (diff)
downloadkernel-qcow2-util-linux-3f684db0d93a86b3e9525c57e65a5b281c792a2e.tar.gz
kernel-qcow2-util-linux-3f684db0d93a86b3e9525c57e65a5b281c792a2e.tar.xz
kernel-qcow2-util-linux-3f684db0d93a86b3e9525c57e65a5b281c792a2e.zip
include/fileutils: add is_same_inode() check
Check if a file descriptor and path or stat structure are represent the same file. This function is needed for TACTOU avoidance. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'include/fileutils.h')
-rw-r--r--include/fileutils.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/fileutils.h b/include/fileutils.h
index be6d1f7f9..ba8da7fe6 100644
--- a/include/fileutils.h
+++ b/include/fileutils.h
@@ -4,6 +4,7 @@
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
+#include <sys/stat.h>
#include "c.h"
@@ -25,6 +26,17 @@ static inline FILE *xfmkstemp(char **tmpname, const char *dir, const char *prefi
return ret;
}
+static inline int is_same_inode(const int fd, const struct stat *st)
+{
+ struct stat f;
+
+ if (fstat(fd, &f) < 0)
+ return 0;
+ else if (f.st_dev != st->st_dev || f.st_ino != st->st_ino)
+ return 0;
+ return 1;
+}
+
extern int dup_fd_cloexec(int oldfd, int lowfd);
extern int get_fd_tabsize(void);