mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
Kernel: Rename VMObject::clone() => try_clone()
And fix an unsafe dereference in SharedInodeVMObject::try_clone() to make it OOM-safe.
This commit is contained in:
parent
d85bce57b3
commit
f244a25f71
Notes:
sideshowbarker
2024-07-18 09:19:04 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/f244a25f71e
|
@ -245,7 +245,7 @@ KResultOr<Region*> VirtIOFrameBufferDevice::mmap(Process& process, FileDescripti
|
|||
if (m_userspace_mmap_region)
|
||||
return ENOMEM;
|
||||
|
||||
auto vmobject = m_are_writes_active ? m_framebuffer->vmobject().clone() : m_framebuffer_sink_vmobject;
|
||||
auto vmobject = m_are_writes_active ? m_framebuffer->vmobject().try_clone() : m_framebuffer_sink_vmobject;
|
||||
if (vmobject.is_null())
|
||||
return ENOMEM;
|
||||
|
||||
|
@ -267,7 +267,7 @@ void VirtIOFrameBufferDevice::deactivate_writes()
|
|||
m_are_writes_active = false;
|
||||
if (m_userspace_mmap_region) {
|
||||
auto* region = m_userspace_mmap_region.unsafe_ptr();
|
||||
auto vm_object = m_framebuffer_sink_vmobject->clone();
|
||||
auto vm_object = m_framebuffer_sink_vmobject->try_clone();
|
||||
VERIFY(vm_object);
|
||||
region->set_vmobject(vm_object.release_nonnull());
|
||||
region->remap();
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
namespace Kernel {
|
||||
|
||||
RefPtr<VMObject> AnonymousVMObject::clone()
|
||||
RefPtr<VMObject> AnonymousVMObject::try_clone()
|
||||
{
|
||||
// We need to acquire our lock so we copy a sane state
|
||||
ScopedSpinLock lock(m_lock);
|
||||
|
|
|
@ -25,7 +25,7 @@ public:
|
|||
static RefPtr<AnonymousVMObject> try_create_for_physical_range(PhysicalAddress paddr, size_t size);
|
||||
static RefPtr<AnonymousVMObject> try_create_with_physical_page(PhysicalPage& page);
|
||||
static RefPtr<AnonymousVMObject> try_create_with_physical_pages(NonnullRefPtrVector<PhysicalPage>);
|
||||
virtual RefPtr<VMObject> clone() override;
|
||||
virtual RefPtr<VMObject> try_clone() override;
|
||||
|
||||
RefPtr<PhysicalPage> allocate_committed_page(size_t);
|
||||
PageFaultResponse handle_cow_fault(size_t, VirtualAddress);
|
||||
|
|
|
@ -36,7 +36,7 @@ ContiguousVMObject::~ContiguousVMObject()
|
|||
{
|
||||
}
|
||||
|
||||
RefPtr<VMObject> ContiguousVMObject::clone()
|
||||
RefPtr<VMObject> ContiguousVMObject::try_clone()
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ private:
|
|||
explicit ContiguousVMObject(const ContiguousVMObject&);
|
||||
|
||||
virtual StringView class_name() const override { return "ContiguousVMObject"sv; }
|
||||
virtual RefPtr<VMObject> clone() override;
|
||||
virtual RefPtr<VMObject> try_clone() override;
|
||||
|
||||
ContiguousVMObject& operator=(const ContiguousVMObject&) = delete;
|
||||
ContiguousVMObject& operator=(ContiguousVMObject&&) = delete;
|
||||
|
|
|
@ -14,7 +14,7 @@ RefPtr<PrivateInodeVMObject> PrivateInodeVMObject::try_create_with_inode(Inode&
|
|||
return adopt_ref_if_nonnull(new (nothrow) PrivateInodeVMObject(inode, inode.size()));
|
||||
}
|
||||
|
||||
RefPtr<VMObject> PrivateInodeVMObject::clone()
|
||||
RefPtr<VMObject> PrivateInodeVMObject::try_clone()
|
||||
{
|
||||
return adopt_ref_if_nonnull(new (nothrow) PrivateInodeVMObject(*this));
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
virtual ~PrivateInodeVMObject() override;
|
||||
|
||||
static RefPtr<PrivateInodeVMObject> try_create_with_inode(Inode&);
|
||||
virtual RefPtr<VMObject> clone() override;
|
||||
virtual RefPtr<VMObject> try_clone() override;
|
||||
|
||||
private:
|
||||
virtual bool is_private_inode() const override { return true; }
|
||||
|
|
|
@ -100,7 +100,7 @@ OwnPtr<Region> Region::clone(Process& new_owner)
|
|||
if (vmobject().is_inode())
|
||||
VERIFY(vmobject().is_private_inode());
|
||||
|
||||
auto vmobject_clone = vmobject().clone();
|
||||
auto vmobject_clone = vmobject().try_clone();
|
||||
if (!vmobject_clone)
|
||||
return {};
|
||||
|
||||
|
|
|
@ -21,9 +21,9 @@ RefPtr<SharedInodeVMObject> SharedInodeVMObject::try_create_with_inode(Inode& in
|
|||
return vmobject;
|
||||
}
|
||||
|
||||
RefPtr<VMObject> SharedInodeVMObject::clone()
|
||||
RefPtr<VMObject> SharedInodeVMObject::try_clone()
|
||||
{
|
||||
return adopt_ref(*new SharedInodeVMObject(*this));
|
||||
return adopt_ref_if_nonnull(new SharedInodeVMObject(*this));
|
||||
}
|
||||
|
||||
SharedInodeVMObject::SharedInodeVMObject(Inode& inode, size_t size)
|
||||
|
|
|
@ -17,7 +17,7 @@ class SharedInodeVMObject final : public InodeVMObject {
|
|||
|
||||
public:
|
||||
static RefPtr<SharedInodeVMObject> try_create_with_inode(Inode&);
|
||||
virtual RefPtr<VMObject> clone() override;
|
||||
virtual RefPtr<VMObject> try_clone() override;
|
||||
|
||||
private:
|
||||
virtual bool is_shared_inode() const override { return true; }
|
||||
|
|
|
@ -32,7 +32,7 @@ class VMObject : public RefCounted<VMObject>
|
|||
public:
|
||||
virtual ~VMObject();
|
||||
|
||||
virtual RefPtr<VMObject> clone() = 0;
|
||||
virtual RefPtr<VMObject> try_clone() = 0;
|
||||
|
||||
virtual bool is_anonymous() const { return false; }
|
||||
virtual bool is_inode() const { return false; }
|
||||
|
|
Loading…
Reference in a new issue