From: Lennart Poettering Date: Fri, 5 Sep 2025 12:12:37 +0000 (+0200) Subject: chase: mask away CHASE_MUST_BE_REGULAR in chase_openat() X-Git-Tag: v259-rc1~503^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be1117f712904b6a16b05db946d71e09ee3a5519;p=thirdparty%2Fsystemd.git chase: mask away CHASE_MUST_BE_REGULAR in chase_openat() We pin the parent directory of the specified directory via CHASE_PARENT, but if we do that we really should mask off CHASE_MUST_BE_REGULAR, because a parent dir of course is a dir, nothing else. The CHASE_MUST_BE_REGULAR after all should apply to the file created in that dir, not to the parent. --- diff --git a/src/basic/chase.c b/src/basic/chase.c index ddef1944874..af9bc7b823b 100644 --- a/src/basic/chase.c +++ b/src/basic/chase.c @@ -796,7 +796,7 @@ int chase_and_open( /* xopen_flags = */ 0, MODE_INVALID); - r = chase(path, root, CHASE_PARENT|chase_flags, &p, &path_fd); + r = chase(path, root, (CHASE_PARENT|chase_flags)&~CHASE_MUST_BE_REGULAR, &p, &path_fd); if (r < 0) return r; assert(path_fd >= 0); @@ -1001,7 +1001,7 @@ int chase_and_openat( /* xopen_flags = */ 0, MODE_INVALID); - r = chaseat(dir_fd, path, chase_flags|CHASE_PARENT, &p, &path_fd); + r = chaseat(dir_fd, path, (chase_flags|CHASE_PARENT)&~CHASE_MUST_BE_REGULAR, &p, &path_fd); if (r < 0) return r;