Implement mkdirat

Linux's variant uses the syscall as intended. Redox's variant uses fpath to build a path to pass to mkdir from the file descriptor plus the file name, which isn't atomic due to the fpath lookup being subject to TOCTOU when paired with mkdir.
This commit is contained in:
Connor-GH
2026-01-08 17:56:49 -06:00
parent d5bf6db1b6
commit 75ca2cf29e
4 changed files with 34 additions and 1 deletions
+5 -1
View File
@@ -502,8 +502,12 @@ impl Pal for Sys {
e_raw(unsafe { syscall!(LSEEK, fildes, offset, whence) }).map(|o| o as off_t)
}
fn mkdirat(dir_fildes: c_int, path: CStr, mode: mode_t) -> Result<()> {
e_raw(unsafe { syscall!(MKDIRAT, dir_fildes, path.as_ptr(), mode) }).map(|_| ())
}
fn mkdir(path: CStr, mode: mode_t) -> Result<()> {
e_raw(unsafe { syscall!(MKDIRAT, AT_FDCWD, path.as_ptr(), mode) }).map(|_| ())
Sys::mkdirat(AT_FDCWD, path, mode)
}
fn mknodat(dir_fildes: c_int, path: CStr, mode: mode_t, dev: dev_t) -> Result<()> {