diff --git a/Kernel/FileSystem/FileDescriptor.cpp b/Kernel/FileSystem/FileDescriptor.cpp index f8483de195..c067c423a3 100644 --- a/Kernel/FileSystem/FileDescriptor.cpp +++ b/Kernel/FileSystem/FileDescriptor.cpp @@ -324,12 +324,6 @@ KResultOr FileDescriptor::mmap(Process& process, LinearAddress laddr, s if (m_file) return m_file->mmap(process, laddr, offset, size); - if (is_shared_memory()) { - if (!shared_memory()->vmo()) - return KResult(-ENODEV); - return process.allocate_region_with_vmo(laddr, size, *shared_memory()->vmo(), offset, shared_memory()->name(), true, true); - } - if (!is_fsfile()) return KResult(-ENODEV); diff --git a/Kernel/SharedMemory.cpp b/Kernel/SharedMemory.cpp index d489891512..b371566828 100644 --- a/Kernel/SharedMemory.cpp +++ b/Kernel/SharedMemory.cpp @@ -88,3 +88,10 @@ int SharedMemory::write(FileDescriptor&, const byte* data, int data_size) // FIXME: Implement. ASSERT_NOT_REACHED(); } + +KResultOr SharedMemory::mmap(Process& process, LinearAddress laddr, size_t offset, size_t size) +{ + if (!vmo()) + return KResult(-ENODEV); + return process.allocate_region_with_vmo(laddr, size, *vmo(), offset, name(), true, true); +} diff --git a/Kernel/SharedMemory.h b/Kernel/SharedMemory.h index 402d2acccb..ffbb7ac468 100644 --- a/Kernel/SharedMemory.h +++ b/Kernel/SharedMemory.h @@ -31,6 +31,7 @@ private: virtual String absolute_path(FileDescriptor&) const override; virtual const char* class_name() const override { return "SharedMemory"; } virtual bool is_shared_memory() const override { return true; } + virtual KResultOr mmap(Process&, LinearAddress, size_t offset, size_t size) override; SharedMemory(const String& name, uid_t, gid_t, mode_t);