From: Sami Kerola Date: Sat, 31 Oct 2015 17:26:51 +0000 (+0000) Subject: include/fileutils: add is_same_inode() check X-Git-Tag: v2.28-rc1~248^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f684db0d93a86b3e9525c57e65a5b281c792a2e;p=thirdparty%2Futil-linux.git 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 --- diff --git a/include/fileutils.h b/include/fileutils.h index be6d1f7f9b..ba8da7fe60 100644 --- a/include/fileutils.h +++ b/include/fileutils.h @@ -4,6 +4,7 @@ #include #include #include +#include #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);