mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
Kernel: Handle more error cases in sys$msync
This commit is contained in:
parent
60ba0e67fe
commit
49d6ad6633
Notes:
sideshowbarker
2024-07-17 23:16:06 +09:00
Author: https://github.com/Hendiadyoin1 Commit: https://github.com/SerenityOS/serenity/commit/49d6ad66338 Pull-request: https://github.com/SerenityOS/serenity/pull/10957 Reviewed-by: https://github.com/Dexesttp
|
@ -590,12 +590,27 @@ ErrorOr<FlatPtr> Process::sys$msyscall(Userspace<void*> address)
|
|||
return 0;
|
||||
}
|
||||
|
||||
ErrorOr<FlatPtr> Process::sys$msync(Userspace<void*> address, size_t size, [[maybe_unused]] int flags)
|
||||
ErrorOr<FlatPtr> Process::sys$msync(Userspace<void*> address, size_t size, int flags)
|
||||
{
|
||||
if ((flags & (MS_SYNC | MS_ASYNC | MS_INVALIDATE)) != flags)
|
||||
return EINVAL;
|
||||
|
||||
bool is_async = (flags & MS_ASYNC) == MS_ASYNC;
|
||||
bool is_sync = (flags & MS_SYNC) == MS_SYNC;
|
||||
if (is_sync == is_async)
|
||||
return EINVAL;
|
||||
|
||||
if (address.ptr() % PAGE_SIZE != 0)
|
||||
return EINVAL;
|
||||
|
||||
// Note: This is not specified
|
||||
size = Memory::page_round_up(size);
|
||||
|
||||
// FIXME: We probably want to sync all mappings in the address+size range.
|
||||
auto* region = address_space().find_region_from_range(Memory::VirtualRange { address.vaddr(), size });
|
||||
// All regions from address upto address+size shall be mapped
|
||||
if (!region)
|
||||
return EINVAL;
|
||||
return ENOMEM;
|
||||
|
||||
auto& vmobject = region->vmobject();
|
||||
if (!vmobject.is_shared_inode())
|
||||
|
@ -603,6 +618,7 @@ ErrorOr<FlatPtr> Process::sys$msync(Userspace<void*> address, size_t size, [[may
|
|||
|
||||
auto& inode_vmobject = static_cast<Memory::SharedInodeVMObject&>(vmobject);
|
||||
TRY(inode_vmobject.sync());
|
||||
// FIXME: If msync() causes any write to a file, the file's st_ctime and st_mtime fields shall be marked for update.
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue