@@ -89,9 +89,9 @@ sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode,
8989 do {
9090 cp ++ ;
9191 } while (* cp == '/' );
92- parentfd = open ("/" , O_RDONLY |O_NONBLOCK );
92+ parentfd = open ("/" , O_RDONLY |O_NONBLOCK | O_DIRECTORY );
9393 } else {
94- parentfd = open ("." , O_RDONLY |O_NONBLOCK );
94+ parentfd = open ("." , O_RDONLY |O_NONBLOCK | O_DIRECTORY );
9595 }
9696 if (parentfd == -1 ) {
9797 if (!quiet )
@@ -118,7 +118,7 @@ sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode,
118118 memcpy (name , cp , len );
119119 name [len ] = '\0' ;
120120reopen :
121- dfd = openat (parentfd , name , O_RDONLY |O_NONBLOCK , 0 );
121+ dfd = openat (parentfd , name , O_RDONLY |O_NONBLOCK | O_DIRECTORY , 0 );
122122 if (dfd == -1 ) {
123123 if (errno != ENOENT ) {
124124 if (!quiet ) {
@@ -128,7 +128,8 @@ sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode,
128128 goto bad ;
129129 }
130130 if (mkdirat (parentfd , name , mode ) == 0 ) {
131- dfd = openat (parentfd , name , O_RDONLY |O_NONBLOCK |O_NOFOLLOW , 0 );
131+ dfd = openat (parentfd , name ,
132+ O_RDONLY |O_NONBLOCK |O_DIRECTORY |O_NOFOLLOW , 0 );
132133 if (dfd == -1 ) {
133134 if (!quiet ) {
134135 sudo_warn (U_ ("unable to open %.*s" ),
0 commit comments