mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-13 07:16:47 +00:00
Make the generic inode permisson check faster
This commit is contained in:
parent
b9ce3e64ad
commit
6de5be1ecc
@ -497,7 +497,7 @@ pub trait Inode: Any + Sync + Send {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used to check for read/write/execute permissions on a file.
|
/// Used to check for read/write/execute permissions on a file.
|
||||||
///
|
///
|
||||||
/// Similar to Linux, using "fsuid" here allows setting filesystem permissions
|
/// Similar to Linux, using "fsuid" here allows setting filesystem permissions
|
||||||
/// without changing the "normal" uids for other tasks.
|
/// without changing the "normal" uids for other tasks.
|
||||||
@ -512,16 +512,17 @@ pub trait Inode: Any + Sync + Send {
|
|||||||
|
|
||||||
perm =
|
perm =
|
||||||
perm.intersection(Permission::MAY_READ | Permission::MAY_WRITE | Permission::MAY_EXEC);
|
perm.intersection(Permission::MAY_READ | Permission::MAY_WRITE | Permission::MAY_EXEC);
|
||||||
let mode = self.mode().unwrap();
|
let metadata = self.metadata();
|
||||||
|
let mode = metadata.mode;
|
||||||
|
|
||||||
if self.metadata().uid == creds.fsuid() {
|
if metadata.uid == creds.fsuid() {
|
||||||
if (perm.may_read() && !mode.is_owner_readable())
|
if (perm.may_read() && !mode.is_owner_readable())
|
||||||
|| (perm.may_write() && !mode.is_owner_writable())
|
|| (perm.may_write() && !mode.is_owner_writable())
|
||||||
|| (perm.may_exec() && !mode.is_owner_executable())
|
|| (perm.may_exec() && !mode.is_owner_executable())
|
||||||
{
|
{
|
||||||
return_errno_with_message!(Errno::EACCES, "owner permission check failed");
|
return_errno_with_message!(Errno::EACCES, "owner permission check failed");
|
||||||
}
|
}
|
||||||
} else if self.metadata().gid == creds.fsgid() {
|
} else if metadata.gid == creds.fsgid() {
|
||||||
if (perm.may_read() && !mode.is_group_readable())
|
if (perm.may_read() && !mode.is_group_readable())
|
||||||
|| (perm.may_write() && !mode.is_group_writable())
|
|| (perm.may_write() && !mode.is_group_writable())
|
||||||
|| (perm.may_exec() && !mode.is_group_executable())
|
|| (perm.may_exec() && !mode.is_group_executable())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user