From 62d426d9b712552731bea4ceb0a296ffcd7a704e Mon Sep 17 00:00:00 2001 From: Marsman1996 Date: Thu, 17 Jul 2025 14:16:49 +0800 Subject: [PATCH] Add check for empty directory and more forms of root directory in `rmdir` --- kernel/src/syscall/rmdir.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/kernel/src/syscall/rmdir.rs b/kernel/src/syscall/rmdir.rs index c278b5182..52c2a73b8 100644 --- a/kernel/src/syscall/rmdir.rs +++ b/kernel/src/syscall/rmdir.rs @@ -19,15 +19,18 @@ pub(super) fn sys_rmdirat( path_addr: Vaddr, ctx: &Context, ) -> Result { - let path_addr = ctx.user_space().read_cstring(path_addr, MAX_FILENAME_LEN)?; + let path = ctx.user_space().read_cstring(path_addr, MAX_FILENAME_LEN)?; debug!("dirfd = {}, path_addr = {:?}", dirfd, path_addr); let (dir_dentry, name) = { - let path_addr = path_addr.to_string_lossy(); - if path_addr == "/" { + let path = path.to_string_lossy(); + if path.is_empty() { + return_errno_with_message!(Errno::ENOENT, "path is empty"); + } + if path.trim_end_matches('/').is_empty() { return_errno_with_message!(Errno::EBUSY, "is root directory"); } - let fs_path = FsPath::new(dirfd, path_addr.as_ref())?; + let fs_path = FsPath::new(dirfd, path.as_ref())?; ctx.posix_thread .fs() .resolver()