stat-util: make sure inode_type_to_string() handles anonymous inodes in a reasonable way

This commit is contained in:
Lennart Poettering 2024-03-12 10:45:24 +01:00
parent 1c248d7fb7
commit 7cff2b79f0
2 changed files with 18 additions and 0 deletions

View file

@ -535,6 +535,8 @@ const char* inode_type_to_string(mode_t m) {
return "sock";
}
/* Note anonmyous inodes in the kernel will have a zero type. Hence fstat() of an eventfd() will
* return an .st_mode where we'll return NULL here! */
return NULL;
}

View file

@ -3,6 +3,7 @@
#include <fcntl.h>
#include <linux/magic.h>
#include <sched.h>
#include <sys/eventfd.h>
#include <unistd.h>
#include "alloc-util.h"
@ -195,6 +196,21 @@ TEST(inode_type_from_string) {
assert_se(inode_type_from_string(inode_type_to_string(*m)) == *m);
}
TEST(anonymous_inode) {
_cleanup_close_ int fd = -EBADF;
fd = eventfd(0, EFD_CLOEXEC);
assert_se(fd >= 0);
/* Verify that we handle anonymous inodes correctly, i.e. those which have no file type */
struct stat st;
assert_se(fstat(fd, &st) >= 0);
assert_se((st.st_mode & S_IFMT) == 0);
assert_se(!inode_type_to_string(st.st_mode));
}
TEST(fd_verify_linked) {
_cleanup_(rm_rf_physical_and_freep) char *t = NULL;
_cleanup_close_ int tfd = -EBADF, fd = -EBADF;