]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
include/fileutils: add is_same_inode() check
authorSami Kerola <kerolasa@iki.fi>
Sat, 31 Oct 2015 17:26:51 +0000 (17:26 +0000)
committerSami Kerola <kerolasa@iki.fi>
Sun, 22 Nov 2015 20:55:34 +0000 (20:55 +0000)
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>
include/fileutils.h

index be6d1f7f9b094761dc151c73ad6f3ca1a6ac3840..ba8da7fe60137d8d8f023001ebc295db96c7aadc 100644 (file)
@@ -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);