diff --git a/Kernel/CoreDump.cpp b/Kernel/CoreDump.cpp index 1fa97bfcce..3652c88b19 100644 --- a/Kernel/CoreDump.cpp +++ b/Kernel/CoreDump.cpp @@ -245,11 +245,8 @@ ByteBuffer CoreDump::create_notes_regions_data() const info.program_header_index = region_index++; memory_region_info_buffer.append((void*)&info, sizeof(info)); - - auto name = region->name(); - if (name.is_null()) - name = String::empty(); - memory_region_info_buffer.append(name.characters(), name.length() + 1); + // NOTE: The region name *is* null-terminated, so the following is ok: + memory_region_info_buffer.append(region->name().characters_without_null_termination(), region->name().length() + 1); regions_data += memory_region_info_buffer; } diff --git a/Kernel/KBuffer.h b/Kernel/KBuffer.h index f49dd51d88..f9ffd3999a 100644 --- a/Kernel/KBuffer.h +++ b/Kernel/KBuffer.h @@ -27,7 +27,7 @@ namespace Kernel { class KBufferImpl : public RefCounted { public: - static RefPtr try_create_with_size(size_t size, Region::Access access, const char* name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + static RefPtr try_create_with_size(size_t size, Region::Access access, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { auto region = MM.allocate_kernel_region(page_round_up(size), name, access, strategy); if (!region) @@ -35,7 +35,7 @@ public: return adopt_ref_if_nonnull(new KBufferImpl(region.release_nonnull(), size, strategy)); } - static RefPtr try_create_with_bytes(ReadonlyBytes bytes, Region::Access access, const char* name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + static RefPtr try_create_with_bytes(ReadonlyBytes bytes, Region::Access access, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { auto region = MM.allocate_kernel_region(page_round_up(bytes.size()), name, access, strategy); if (!region) @@ -45,12 +45,12 @@ public: return adopt_ref_if_nonnull(new KBufferImpl(region.release_nonnull(), bytes.size(), strategy)); } - static RefPtr create_with_size(size_t size, Region::Access access, const char* name, AllocationStrategy strategy = AllocationStrategy::Reserve) + static RefPtr create_with_size(size_t size, Region::Access access, StringView name, AllocationStrategy strategy = AllocationStrategy::Reserve) { return try_create_with_size(size, access, name, strategy); } - static RefPtr copy(const void* data, size_t size, Region::Access access, const char* name) + static RefPtr copy(const void* data, size_t size, Region::Access access, StringView name) { auto buffer = create_with_size(size, access, name, AllocationStrategy::AllocateNow); if (!buffer) @@ -104,7 +104,7 @@ public: { } - [[nodiscard]] static OwnPtr try_create_with_size(size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, const char* name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + [[nodiscard]] static OwnPtr try_create_with_size(size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { auto impl = KBufferImpl::try_create_with_size(size, access, name, strategy); if (!impl) @@ -112,7 +112,7 @@ public: return adopt_own(*new KBuffer(impl.release_nonnull())); } - [[nodiscard]] static OwnPtr try_create_with_bytes(ReadonlyBytes bytes, Region::Access access = Region::Access::Read | Region::Access::Write, const char* name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + [[nodiscard]] static OwnPtr try_create_with_bytes(ReadonlyBytes bytes, Region::Access access = Region::Access::Read | Region::Access::Write, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { auto impl = KBufferImpl::try_create_with_bytes(bytes, access, name, strategy); if (!impl) @@ -120,12 +120,12 @@ public: return adopt_own(*new KBuffer(impl.release_nonnull())); } - [[nodiscard]] static KBuffer create_with_size(size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, const char* name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) + [[nodiscard]] static KBuffer create_with_size(size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, StringView name = "KBuffer", AllocationStrategy strategy = AllocationStrategy::Reserve) { return KBuffer(KBufferImpl::create_with_size(size, access, name, strategy)); } - [[nodiscard]] static KBuffer copy(const void* data, size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, const char* name = "KBuffer") + [[nodiscard]] static KBuffer copy(const void* data, size_t size, Region::Access access = Region::Access::Read | Region::Access::Write, StringView name = "KBuffer") { return KBuffer(KBufferImpl::copy(data, size, access, name)); } @@ -146,7 +146,7 @@ public: [[nodiscard]] const KBufferImpl& impl() const { return *m_impl; } [[nodiscard]] RefPtr take_impl() { return move(m_impl); } - KBuffer(const ByteBuffer& buffer, Region::Access access = Region::Access::Read | Region::Access::Write, const char* name = "KBuffer") + KBuffer(const ByteBuffer& buffer, Region::Access access = Region::Access::Read | Region::Access::Write, StringView name = "KBuffer") : m_impl(KBufferImpl::copy(buffer.data(), buffer.size(), access, name)) { } diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index 9f556b2502..1dddb431e5 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -156,13 +156,14 @@ KResultOr Process::sys$mmap(Userspace u if (!is_user_range(VirtualAddress(addr), page_round_up(size))) return EFAULT; - String name; + OwnPtr name; if (params.name.characters) { if (params.name.length > PATH_MAX) return ENAMETOOLONG; - name = copy_string_from_user(params.name); - if (name.is_null()) - return EFAULT; + auto name_or_error = try_copy_kstring_from_user(params.name); + if (name_or_error.is_error()) + return name_or_error.error(); + name = name_or_error.release_value(); } if (size == 0) @@ -213,7 +214,7 @@ KResultOr Process::sys$mmap(Userspace u if (map_anonymous) { auto strategy = map_noreserve ? AllocationStrategy::None : AllocationStrategy::Reserve; - auto region_or_error = space().allocate_region(range.value(), !name.is_null() ? name : "mmap", prot, strategy); + auto region_or_error = space().allocate_region(range.value(), {}, prot, strategy); if (region_or_error.is_error()) return region_or_error.error().error(); region = region_or_error.value(); @@ -253,8 +254,7 @@ KResultOr Process::sys$mmap(Userspace u region->set_shared(true); if (map_stack) region->set_stack(true); - if (!name.is_null()) - region->set_name(name); + region->set_name(move(name)); PerformanceManager::add_mmap_perf_event(*this, *region); @@ -480,9 +480,10 @@ KResultOr Process::sys$set_mmap_name(Userspace PATH_MAX) return ENAMETOOLONG; - auto name = copy_string_from_user(params.name); - if (name.is_null()) - return EFAULT; + auto name_or_error = try_copy_kstring_from_user(params.name); + if (name_or_error.is_error()) + return name_or_error.error(); + auto name = name_or_error.release_value(); auto range_or_error = expand_range_to_page_boundaries((FlatPtr)params.addr, params.size); if (range_or_error.is_error()) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index e08ea0a2d9..3939d0d82b 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -67,7 +67,11 @@ Thread::Thread(NonnullRefPtr process, NonnullOwnPtr kernel_stac m_tid = Process::allocate_pid().value(); } - m_kernel_stack_region->set_name(String::formatted("Kernel stack (thread {})", m_tid.value())); + { + // FIXME: Go directly to KString + auto string = String::formatted("Kernel stack (thread {})", m_tid.value()); + m_kernel_stack_region->set_name(KString::try_create(string)); + } { ScopedSpinLock lock(g_tid_map_lock); diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index 4ea8b9bd39..0c24693355 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -456,7 +456,7 @@ PageFaultResponse MemoryManager::handle_page_fault(const PageFault& fault) return region->handle_fault(fault, lock); } -OwnPtr MemoryManager::allocate_contiguous_kernel_region(size_t size, String name, Region::Access access, size_t physical_alignment, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_contiguous_kernel_region(size_t size, StringView name, Region::Access access, size_t physical_alignment, Region::Cacheable cacheable) { VERIFY(!(size % PAGE_SIZE)); ScopedSpinLock lock(s_mm_lock); @@ -464,10 +464,10 @@ OwnPtr MemoryManager::allocate_contiguous_kernel_region(size_t size, Str if (!range.has_value()) return {}; auto vmobject = ContiguousVMObject::create_with_size(size, physical_alignment); - return allocate_kernel_region_with_vmobject(range.value(), vmobject, move(name), access, cacheable); + return allocate_kernel_region_with_vmobject(range.value(), vmobject, name, access, cacheable); } -OwnPtr MemoryManager::allocate_kernel_region(size_t size, String name, Region::Access access, AllocationStrategy strategy, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_kernel_region(size_t size, StringView name, Region::Access access, AllocationStrategy strategy, Region::Cacheable cacheable) { VERIFY(!(size % PAGE_SIZE)); auto vm_object = AnonymousVMObject::create_with_size(size, strategy); @@ -477,10 +477,10 @@ OwnPtr MemoryManager::allocate_kernel_region(size_t size, String name, R auto range = kernel_page_directory().range_allocator().allocate_anywhere(size); if (!range.has_value()) return {}; - return allocate_kernel_region_with_vmobject(range.value(), vm_object.release_nonnull(), move(name), access, cacheable); + return allocate_kernel_region_with_vmobject(range.value(), vm_object.release_nonnull(), name, access, cacheable); } -OwnPtr MemoryManager::allocate_kernel_region(PhysicalAddress paddr, size_t size, String name, Region::Access access, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_kernel_region(PhysicalAddress paddr, size_t size, StringView name, Region::Access access, Region::Cacheable cacheable) { auto vm_object = AnonymousVMObject::create_for_physical_range(paddr, size); if (!vm_object) @@ -490,10 +490,10 @@ OwnPtr MemoryManager::allocate_kernel_region(PhysicalAddress paddr, size auto range = kernel_page_directory().range_allocator().allocate_anywhere(size); if (!range.has_value()) return {}; - return allocate_kernel_region_with_vmobject(range.value(), *vm_object, move(name), access, cacheable); + return allocate_kernel_region_with_vmobject(range.value(), *vm_object, name, access, cacheable); } -OwnPtr MemoryManager::allocate_kernel_region_identity(PhysicalAddress paddr, size_t size, String name, Region::Access access, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_kernel_region_identity(PhysicalAddress paddr, size_t size, StringView name, Region::Access access, Region::Cacheable cacheable) { auto vm_object = AnonymousVMObject::create_for_physical_range(paddr, size); if (!vm_object) @@ -503,26 +503,26 @@ OwnPtr MemoryManager::allocate_kernel_region_identity(PhysicalAddress pa auto range = kernel_page_directory().identity_range_allocator().allocate_specific(VirtualAddress(paddr.get()), size); if (!range.has_value()) return {}; - return allocate_kernel_region_with_vmobject(range.value(), *vm_object, move(name), access, cacheable); + return allocate_kernel_region_with_vmobject(range.value(), *vm_object, name, access, cacheable); } -OwnPtr MemoryManager::allocate_kernel_region_with_vmobject(const Range& range, VMObject& vmobject, String name, Region::Access access, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_kernel_region_with_vmobject(const Range& range, VMObject& vmobject, StringView name, Region::Access access, Region::Cacheable cacheable) { ScopedSpinLock lock(s_mm_lock); - auto region = Region::create_kernel_only(range, vmobject, 0, move(name), access, cacheable); + auto region = Region::create_kernel_only(range, vmobject, 0, KString::try_create(name), access, cacheable); if (region) region->map(kernel_page_directory()); return region; } -OwnPtr MemoryManager::allocate_kernel_region_with_vmobject(VMObject& vmobject, size_t size, String name, Region::Access access, Region::Cacheable cacheable) +OwnPtr MemoryManager::allocate_kernel_region_with_vmobject(VMObject& vmobject, size_t size, StringView name, Region::Access access, Region::Cacheable cacheable) { VERIFY(!(size % PAGE_SIZE)); ScopedSpinLock lock(s_mm_lock); auto range = kernel_page_directory().range_allocator().allocate_anywhere(size); if (!range.has_value()) return {}; - return allocate_kernel_region_with_vmobject(range.value(), vmobject, move(name), access, cacheable); + return allocate_kernel_region_with_vmobject(range.value(), vmobject, name, access, cacheable); } bool MemoryManager::commit_user_physical_pages(size_t page_count) diff --git a/Kernel/VM/MemoryManager.h b/Kernel/VM/MemoryManager.h index 90607958a1..6251f726df 100644 --- a/Kernel/VM/MemoryManager.h +++ b/Kernel/VM/MemoryManager.h @@ -144,12 +144,12 @@ public: void deallocate_user_physical_page(const PhysicalPage&); void deallocate_supervisor_physical_page(const PhysicalPage&); - OwnPtr allocate_contiguous_kernel_region(size_t, String name, Region::Access access, size_t physical_alignment = PAGE_SIZE, Region::Cacheable = Region::Cacheable::Yes); - OwnPtr allocate_kernel_region(size_t, String name, Region::Access access, AllocationStrategy strategy = AllocationStrategy::Reserve, Region::Cacheable = Region::Cacheable::Yes); - OwnPtr allocate_kernel_region(PhysicalAddress, size_t, String name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); - OwnPtr allocate_kernel_region_identity(PhysicalAddress, size_t, String name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); - OwnPtr allocate_kernel_region_with_vmobject(VMObject&, size_t, String name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); - OwnPtr allocate_kernel_region_with_vmobject(const Range&, VMObject&, String name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_contiguous_kernel_region(size_t, StringView name, Region::Access access, size_t physical_alignment = PAGE_SIZE, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_kernel_region(size_t, StringView name, Region::Access access, AllocationStrategy strategy = AllocationStrategy::Reserve, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_kernel_region(PhysicalAddress, size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_kernel_region_identity(PhysicalAddress, size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_kernel_region_with_vmobject(VMObject&, size_t, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); + OwnPtr allocate_kernel_region_with_vmobject(const Range&, VMObject&, StringView name, Region::Access access, Region::Cacheable = Region::Cacheable::Yes); unsigned user_physical_pages() const { return m_user_physical_pages; } unsigned user_physical_pages_used() const { return m_user_physical_pages_used; } diff --git a/Kernel/VM/Region.cpp b/Kernel/VM/Region.cpp index 95a8b465d4..9a4b375ecd 100644 --- a/Kernel/VM/Region.cpp +++ b/Kernel/VM/Region.cpp @@ -19,7 +19,7 @@ namespace Kernel { -Region::Region(const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, String name, Region::Access access, Cacheable cacheable, bool shared) +Region::Region(const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, OwnPtr name, Region::Access access, Cacheable cacheable, bool shared) : PurgeablePageRanges(vmobject) , m_range(range) , m_offset_in_vmobject(offset_in_vmobject) @@ -84,7 +84,7 @@ OwnPtr Region::clone(Process& new_owner) // Create a new region backed by the same VMObject. auto region = Region::create_user_accessible( - &new_owner, m_range, m_vmobject, m_offset_in_vmobject, m_name, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared); + &new_owner, m_range, m_vmobject, m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared); if (m_vmobject->is_anonymous()) region->copy_purgeable_page_ranges(*this); region->set_mmap(m_mmap); @@ -103,7 +103,7 @@ OwnPtr Region::clone(Process& new_owner) // Set up a COW region. The parent (this) region becomes COW as well! remap(); auto clone_region = Region::create_user_accessible( - &new_owner, m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared); + &new_owner, m_range, vmobject_clone.release_nonnull(), m_offset_in_vmobject, m_name ? m_name->try_clone() : OwnPtr {}, access(), m_cacheable ? Cacheable::Yes : Cacheable::No, m_shared); if (m_vmobject->is_anonymous()) clone_region->copy_purgeable_page_ranges(*this); if (m_stack) { @@ -208,7 +208,7 @@ size_t Region::amount_shared() const return bytes; } -NonnullOwnPtr Region::create_user_accessible(Process* owner, const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, String name, Region::Access access, Cacheable cacheable, bool shared) +NonnullOwnPtr Region::create_user_accessible(Process* owner, const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, OwnPtr name, Region::Access access, Cacheable cacheable, bool shared) { auto region = adopt_own(*new Region(range, move(vmobject), offset_in_vmobject, move(name), access, cacheable, shared)); if (owner) @@ -216,7 +216,7 @@ NonnullOwnPtr Region::create_user_accessible(Process* owner, const Range return region; } -NonnullOwnPtr Region::create_kernel_only(const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, String name, Region::Access access, Cacheable cacheable) +NonnullOwnPtr Region::create_kernel_only(const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, OwnPtr name, Region::Access access, Cacheable cacheable) { return adopt_own(*new Region(range, move(vmobject), offset_in_vmobject, move(name), access, cacheable, false)); } diff --git a/Kernel/VM/Region.h b/Kernel/VM/Region.h index ecbe758179..f741bb9ee3 100644 --- a/Kernel/VM/Region.h +++ b/Kernel/VM/Region.h @@ -8,11 +8,11 @@ #include #include -#include #include #include #include #include +#include #include #include #include @@ -50,8 +50,8 @@ public: Yes, }; - static NonnullOwnPtr create_user_accessible(Process*, const Range&, NonnullRefPtr, size_t offset_in_vmobject, String name, Region::Access access, Cacheable, bool shared); - static NonnullOwnPtr create_kernel_only(const Range&, NonnullRefPtr, size_t offset_in_vmobject, String name, Region::Access access, Cacheable = Cacheable::Yes); + static NonnullOwnPtr create_user_accessible(Process*, const Range&, NonnullRefPtr, size_t offset_in_vmobject, OwnPtr name, Region::Access access, Cacheable, bool shared); + static NonnullOwnPtr create_kernel_only(const Range&, NonnullRefPtr, size_t offset_in_vmobject, OwnPtr name, Region::Access access, Cacheable = Cacheable::Yes); ~Region(); @@ -67,10 +67,10 @@ public: bool has_been_executable() const { return m_access & Access::HasBeenExecutable; } bool is_cacheable() const { return m_cacheable; } - const String& name() const { return m_name; } + StringView name() const { return m_name ? m_name->view() : StringView {}; } Region::Access access() const { return static_cast(m_access); } - void set_name(String name) { m_name = move(name); } + void set_name(OwnPtr name) { m_name = move(name); } const VMObject& vmobject() const { return *m_vmobject; } VMObject& vmobject() { return *m_vmobject; } @@ -226,7 +226,7 @@ public: void set_syscall_region(bool b) { m_syscall_region = b; } private: - Region(const Range&, NonnullRefPtr, size_t offset_in_vmobject, String, Region::Access access, Cacheable, bool shared); + Region(const Range&, NonnullRefPtr, size_t offset_in_vmobject, OwnPtr, Region::Access access, Cacheable, bool shared); bool do_remap_vmobject_page_range(size_t page_index, size_t page_count); @@ -254,7 +254,7 @@ private: Range m_range; size_t m_offset_in_vmobject { 0 }; NonnullRefPtr m_vmobject; - String m_name; + OwnPtr m_name; u8 m_access { Region::None }; bool m_shared : 1 { false }; bool m_cacheable : 1 { false }; diff --git a/Kernel/VM/Space.cpp b/Kernel/VM/Space.cpp index 2efa71f6f2..f5d75c8018 100644 --- a/Kernel/VM/Space.cpp +++ b/Kernel/VM/Space.cpp @@ -47,7 +47,7 @@ Optional Space::allocate_range(VirtualAddress vaddr, size_t size, size_t Region& Space::allocate_split_region(const Region& source_region, const Range& range, size_t offset_in_vmobject) { auto& region = add_region(Region::create_user_accessible( - m_process, range, source_region.vmobject(), offset_in_vmobject, source_region.name(), source_region.access(), source_region.is_cacheable() ? Region::Cacheable::Yes : Region::Cacheable::No, source_region.is_shared())); + m_process, range, source_region.vmobject(), offset_in_vmobject, KString::try_create(source_region.name()), source_region.access(), source_region.is_cacheable() ? Region::Cacheable::Yes : Region::Cacheable::No, source_region.is_shared())); region.set_syscall_region(source_region.is_syscall_region()); region.set_mmap(source_region.is_mmap()); region.set_stack(source_region.is_stack()); @@ -59,19 +59,19 @@ Region& Space::allocate_split_region(const Region& source_region, const Range& r return region; } -KResultOr Space::allocate_region(const Range& range, const String& name, int prot, AllocationStrategy strategy) +KResultOr Space::allocate_region(Range const& range, StringView name, int prot, AllocationStrategy strategy) { VERIFY(range.is_valid()); auto vmobject = AnonymousVMObject::create_with_size(range.size(), strategy); if (!vmobject) return ENOMEM; - auto region = Region::create_user_accessible(m_process, range, vmobject.release_nonnull(), 0, name, prot_to_region_access_flags(prot), Region::Cacheable::Yes, false); + auto region = Region::create_user_accessible(m_process, range, vmobject.release_nonnull(), 0, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, false); if (!region->map(page_directory())) return ENOMEM; return &add_region(move(region)); } -KResultOr Space::allocate_region_with_vmobject(const Range& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, const String& name, int prot, bool shared) +KResultOr Space::allocate_region_with_vmobject(Range const& range, NonnullRefPtr vmobject, size_t offset_in_vmobject, StringView name, int prot, bool shared) { VERIFY(range.is_valid()); size_t end_in_vmobject = offset_in_vmobject + range.size(); @@ -88,7 +88,7 @@ KResultOr Space::allocate_region_with_vmobject(const Range& range, Nonn return EINVAL; } offset_in_vmobject &= PAGE_MASK; - auto& region = add_region(Region::create_user_accessible(m_process, range, move(vmobject), offset_in_vmobject, name, prot_to_region_access_flags(prot), Region::Cacheable::Yes, shared)); + auto& region = add_region(Region::create_user_accessible(m_process, range, move(vmobject), offset_in_vmobject, KString::try_create(name), prot_to_region_access_flags(prot), Region::Cacheable::Yes, shared)); if (!region.map(page_directory())) { // FIXME: What is an appropriate error code here, really? return ENOMEM; diff --git a/Kernel/VM/Space.h b/Kernel/VM/Space.h index 87e0665125..a83746fad5 100644 --- a/Kernel/VM/Space.h +++ b/Kernel/VM/Space.h @@ -35,8 +35,8 @@ public: Optional allocate_range(VirtualAddress, size_t, size_t alignment = PAGE_SIZE); - KResultOr allocate_region_with_vmobject(const Range&, NonnullRefPtr, size_t offset_in_vmobject, const String& name, int prot, bool shared); - KResultOr allocate_region(const Range&, const String& name, int prot = PROT_READ | PROT_WRITE, AllocationStrategy strategy = AllocationStrategy::Reserve); + KResultOr allocate_region_with_vmobject(const Range&, NonnullRefPtr, size_t offset_in_vmobject, StringView name, int prot, bool shared); + KResultOr allocate_region(const Range&, StringView name, int prot = PROT_READ | PROT_WRITE, AllocationStrategy strategy = AllocationStrategy::Reserve); bool deallocate_region(Region& region); OwnPtr take_region(Region& region);