diff --git a/Kernel/FileSystem/File.h b/Kernel/FileSystem/File.h index 36d468f442..f21ffc2d60 100644 --- a/Kernel/FileSystem/File.h +++ b/Kernel/FileSystem/File.h @@ -63,7 +63,6 @@ public: virtual bool is_seekable() const { return false; } virtual bool is_inode() const { return false; } - virtual bool is_shared_memory() const { return false; } virtual bool is_fifo() const { return false; } virtual bool is_device() const { return false; } virtual bool is_tty() const { return false; } diff --git a/Kernel/FileSystem/FileDescription.cpp b/Kernel/FileSystem/FileDescription.cpp index a17a6ee930..067941d09d 100644 --- a/Kernel/FileSystem/FileDescription.cpp +++ b/Kernel/FileSystem/FileDescription.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -244,25 +243,6 @@ KResult FileDescription::truncate(off_t length) return m_file->truncate(length); } -bool FileDescription::is_shared_memory() const -{ - return m_file->is_shared_memory(); -} - -SharedMemory* FileDescription::shared_memory() -{ - if (!is_shared_memory()) - return nullptr; - return static_cast(m_file.ptr()); -} - -const SharedMemory* FileDescription::shared_memory() const -{ - if (!is_shared_memory()) - return nullptr; - return static_cast(m_file.ptr()); -} - bool FileDescription::is_fifo() const { return m_file->is_fifo(); diff --git a/Kernel/FileSystem/FileDescription.h b/Kernel/FileSystem/FileDescription.h index 2879cdcfb6..29f144aee4 100644 --- a/Kernel/FileSystem/FileDescription.h +++ b/Kernel/FileSystem/FileDescription.h @@ -18,7 +18,6 @@ class MasterPTY; class Process; class Region; class CharacterDevice; -class SharedMemory; class FileDescription : public RefCounted { public: @@ -87,10 +86,6 @@ public: FIFO::Direction fifo_direction() { return m_fifo_direction; } void set_fifo_direction(Badge, FIFO::Direction direction) { m_fifo_direction = direction; } - bool is_shared_memory() const; - SharedMemory* shared_memory(); - const SharedMemory* shared_memory() const; - Optional& generator_cache() { return m_generator_cache; } void set_original_inode(Badge, NonnullRefPtr&& inode) { m_inode = move(inode); } diff --git a/Kernel/FileSystem/SharedMemory.cpp b/Kernel/FileSystem/SharedMemory.cpp deleted file mode 100644 index ad4b131939..0000000000 --- a/Kernel/FileSystem/SharedMemory.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include -#include -#include -#include -#include - -Lockable>>& shared_memories() -{ - static Lockable>>* map; - if (!map) - map = new Lockable>>; - return *map; -} - -KResultOr> SharedMemory::open(const String& name, int flags, mode_t mode) -{ - UNUSED_PARAM(flags); - LOCKER(shared_memories().lock()); - auto it = shared_memories().resource().find(name); - if (it != shared_memories().resource().end()) { - auto shared_memory = it->value; - // FIXME: Improved access checking. - if (shared_memory->uid() != current->process().uid()) - return KResult(-EACCES); - return *shared_memory; - } - auto shared_memory = adopt(*new SharedMemory(name, current->process().uid(), current->process().gid(), mode)); - shared_memories().resource().set(name, shared_memory.ptr()); - return shared_memory; -} - -KResult SharedMemory::unlink(const String& name) -{ - LOCKER(shared_memories().lock()); - auto it = shared_memories().resource().find(name); - if (it == shared_memories().resource().end()) - return KResult(-ENOENT); - shared_memories().resource().remove(it); - return KSuccess; -} - -SharedMemory::SharedMemory(const String& name, uid_t uid, gid_t gid, mode_t mode) - : m_name(name) - , m_uid(uid) - , m_gid(gid) - , m_mode(mode) -{ -} - -SharedMemory::~SharedMemory() -{ -} - -KResult SharedMemory::truncate(int length) -{ - if (!length) { - m_vmobject = nullptr; - return KSuccess; - } - - if (!m_vmobject) { - m_vmobject = AnonymousVMObject::create_with_size(length); - return KSuccess; - } - - // FIXME: Support truncation. - ASSERT_NOT_REACHED(); - return KResult(-ENOTIMPL); -} - -String SharedMemory::absolute_path(const FileDescription&) const -{ - return String::format("shm:%u", this); -} - -int SharedMemory::read(FileDescription&, u8* buffer, int buffer_size) -{ - UNUSED_PARAM(buffer); - UNUSED_PARAM(buffer_size); - // FIXME: Implement. - ASSERT_NOT_REACHED(); -} - -int SharedMemory::write(FileDescription&, const u8* data, int data_size) -{ - UNUSED_PARAM(data); - UNUSED_PARAM(data_size); - // FIXME: Implement. - ASSERT_NOT_REACHED(); -} - -KResultOr SharedMemory::mmap(Process& process, FileDescription&, VirtualAddress vaddr, size_t offset, size_t size, int prot) -{ - if (!vmobject()) - return KResult(-ENODEV); - return process.allocate_region_with_vmobject(vaddr, size, *vmobject(), offset, name(), prot); -} diff --git a/Kernel/FileSystem/SharedMemory.h b/Kernel/FileSystem/SharedMemory.h deleted file mode 100644 index f81c329695..0000000000 --- a/Kernel/FileSystem/SharedMemory.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -class AnonymousVMObject; - -class SharedMemory : public File { -public: - static KResultOr> open(const String& name, int flags, mode_t); - static KResult unlink(const String& name); - virtual ~SharedMemory() override; - - const String& name() const { return m_name; } - virtual KResult truncate(off_t) override; - AnonymousVMObject* vmobject() { return m_vmobject.ptr(); } - const AnonymousVMObject* vmobject() const { return m_vmobject.ptr(); } - uid_t uid() const { return m_uid; } - gid_t gid() const { return m_gid; } - -private: - // ^File - virtual bool can_read(const FileDescription&) const override { return true; } - virtual bool can_write(const FileDescription&) const override { return true; } - virtual int read(FileDescription&, u8*, int) override; - virtual int write(FileDescription&, const u8*, int) override; - virtual String absolute_path(const FileDescription&) const override; - virtual const char* class_name() const override { return "SharedMemory"; } - virtual bool is_shared_memory() const override { return true; } - virtual KResultOr mmap(Process&, FileDescription&, VirtualAddress, size_t offset, size_t size, int prot) override; - - SharedMemory(const String& name, uid_t, gid_t, mode_t); - - String m_name; - uid_t m_uid { 0 }; - gid_t m_gid { 0 }; - mode_t m_mode { 0 }; - RefPtr m_vmobject; -}; diff --git a/Kernel/Makefile b/Kernel/Makefile index 53fedf078f..f6a253e22c 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -50,7 +50,6 @@ OBJS = \ FileSystem/InodeFile.o \ FileSystem/InodeWatcher.o \ FileSystem/ProcFS.o \ - FileSystem/SharedMemory.o \ FileSystem/TmpFS.o \ FileSystem/VirtualFileSystem.o \ Heap/SlabAllocator.o \ diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 521c210927..a644e81a32 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -3320,28 +3319,6 @@ int Process::sys$rename(const char* oldpath, const char* newpath) return VFS::the().rename(StringView(oldpath), StringView(newpath), current_directory()); } -int Process::sys$shm_open(const char* name, int flags, mode_t mode) -{ - if (!validate_read_str(name)) - return -EFAULT; - int fd = alloc_fd(); - if (fd < 0) - return fd; - auto shm_or_error = SharedMemory::open(String(name), flags, mode); - if (shm_or_error.is_error()) - return shm_or_error.error(); - auto description = FileDescription::create(shm_or_error.value()); - m_fds[fd].set(move(description), FD_CLOEXEC); - return fd; -} - -int Process::sys$shm_unlink(const char* name) -{ - if (!validate_read_str(name)) - return -EFAULT; - return SharedMemory::unlink(String(name)); -} - int Process::sys$ftruncate(int fd, off_t length) { auto* description = file_description(fd); diff --git a/Kernel/Process.h b/Kernel/Process.h index 1bf6923c52..55811c4e44 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -108,8 +108,6 @@ public: int sys$dump_backtrace(); int sys$gettid(); int sys$donate(int tid); - int sys$shm_open(const char* name, int flags, mode_t); - int sys$shm_unlink(const char* name); int sys$ftruncate(int fd, off_t); pid_t sys$setsid(); pid_t sys$getsid(pid_t); diff --git a/Kernel/Syscall.h b/Kernel/Syscall.h index 58942d1d31..1aa340160b 100644 --- a/Kernel/Syscall.h +++ b/Kernel/Syscall.h @@ -107,8 +107,8 @@ typedef u32 socklen_t; __ENUMERATE_SYSCALL(gettid) \ __ENUMERATE_SYSCALL(donate) \ __ENUMERATE_SYSCALL(rename) \ - __ENUMERATE_SYSCALL(shm_open) \ - __ENUMERATE_SYSCALL(shm_unlink) \ + __ENUMERATE_REMOVED_SYSCALL(shm_open) \ + __ENUMERATE_REMOVED_SYSCALL(shm_unlink) \ __ENUMERATE_SYSCALL(ftruncate) \ __ENUMERATE_SYSCALL(systrace) \ __ENUMERATE_SYSCALL(exit_thread) \ diff --git a/Libraries/LibC/mman.cpp b/Libraries/LibC/mman.cpp index 8ee60929e9..3b08420931 100644 --- a/Libraries/LibC/mman.cpp +++ b/Libraries/LibC/mman.cpp @@ -45,18 +45,6 @@ int set_mmap_name(void* addr, size_t size, const char* name) __RETURN_WITH_ERRNO(rc, rc, -1); } -int shm_open(const char* name, int flags, mode_t mode) -{ - int rc = syscall(SC_shm_open, name, flags, mode); - __RETURN_WITH_ERRNO(rc, rc, -1); -} - -int shm_unlink(const char* name) -{ - int rc = syscall(SC_shm_unlink, name); - __RETURN_WITH_ERRNO(rc, rc, -1); -} - int madvise(void* address, size_t size, int advice) { int rc = syscall(SC_madvise, address, size, advice); diff --git a/Libraries/LibC/mman.h b/Libraries/LibC/mman.h index ca937b23b4..86c020c11c 100644 --- a/Libraries/LibC/mman.h +++ b/Libraries/LibC/mman.h @@ -29,8 +29,6 @@ void* mmap_with_name(void* addr, size_t, int prot, int flags, int fd, off_t, con int munmap(void*, size_t); int mprotect(void*, size_t, int prot); int set_mmap_name(void*, size_t, const char*); -int shm_open(const char* name, int flags, mode_t); -int shm_unlink(const char* name); int madvise(void*, size_t, int advice); __END_DECLS