From: Yu Watanabe Date: Mon, 10 Apr 2023 00:55:22 +0000 (+0900) Subject: chase: use dir_fd_is_root() to check if fd points to the root directory X-Git-Tag: v254-rc1~776^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a6ef5ef70726c77e621341b4de12413e1864e934;p=thirdparty%2Fsystemd.git chase: use dir_fd_is_root() to check if fd points to the root directory As commented in dir_fd_is_root(), comparing inode is not enough to determine if we are at the root directory. --- diff --git a/src/basic/chase.c b/src/basic/chase.c index b8441aa28bb..f62c317026a 100644 --- a/src/basic/chase.c +++ b/src/basic/chase.c @@ -262,10 +262,16 @@ int chaseat(int dir_fd, const char *path, ChaseFlags flags, char **ret_path, int if (fstat(fd_parent, &st_parent) < 0) return -errno; - /* If we opened the same directory, that means we're at the host root directory, so + /* If we opened the same directory, that _may_ indicate that we're at the host root + * directory. Let's confirm that in more detail with dir_fd_is_root(). And if so, * going up won't change anything. */ - if (stat_inode_same(&st_parent, &st)) - continue; + if (stat_inode_same(&st_parent, &st)) { + r = dir_fd_is_root(fd); + if (r < 0) + return r; + if (r > 0) + continue; + } r = path_extract_directory(done, &parent); if (r >= 0 || r == -EDESTADDRREQ)