Parcourir la source

Kernel: Don't crash if unable to map ramdisk inside kernel address space

Jean-Baptiste Boric il y a 4 ans
Parent
commit
346e0f4dac

+ 4 - 1
Kernel/Storage/RamdiskController.cpp

@@ -70,7 +70,10 @@ RamdiskController::RamdiskController()
         if (used_memory_range.type == UsedMemoryRangeType::BootModule) {
             size_t length = page_round_up(used_memory_range.end.get()) - used_memory_range.start.get();
             auto region = MemoryManager::the().allocate_kernel_region(used_memory_range.start, length, "Ramdisk", Region::Access::Read | Region::Access::Write);
-            m_devices.append(RamdiskDevice::create(*this, move(region), 6, count));
+            if (!region)
+                dmesgln("RamdiskController: Failed to allocate kernel region of size {}", length);
+            else
+                m_devices.append(RamdiskDevice::create(*this, region.release_nonnull(), 6, count));
             count++;
         }
     }

+ 2 - 2
Kernel/Storage/RamdiskDevice.cpp

@@ -32,12 +32,12 @@
 
 namespace Kernel {
 
-NonnullRefPtr<RamdiskDevice> RamdiskDevice::create(const RamdiskController& controller, OwnPtr<Region>&& region, int major, int minor)
+NonnullRefPtr<RamdiskDevice> RamdiskDevice::create(const RamdiskController& controller, NonnullOwnPtr<Region>&& region, int major, int minor)
 {
     return adopt(*new RamdiskDevice(controller, move(region), major, minor));
 }
 
-RamdiskDevice::RamdiskDevice(const RamdiskController& controller, OwnPtr<Region>&& region, int major, int minor)
+RamdiskDevice::RamdiskDevice(const RamdiskController& controller, NonnullOwnPtr<Region>&& region, int major, int minor)
     : StorageDevice(controller, major, minor, 512, region->size() / 512)
     , m_region(move(region))
 {

+ 3 - 3
Kernel/Storage/RamdiskDevice.h

@@ -37,8 +37,8 @@ class RamdiskDevice final : public StorageDevice {
     friend class RamdiskController;
     AK_MAKE_ETERNAL
 public:
-    static NonnullRefPtr<RamdiskDevice> create(const RamdiskController&, OwnPtr<Region>&& region, int major, int minor);
-    RamdiskDevice(const RamdiskController&, OwnPtr<Region>&&, int major, int minor);
+    static NonnullRefPtr<RamdiskDevice> create(const RamdiskController&, NonnullOwnPtr<Region>&& region, int major, int minor);
+    RamdiskDevice(const RamdiskController&, NonnullOwnPtr<Region>&&, int major, int minor);
     virtual ~RamdiskDevice() override;
 
     // ^StorageDevice
@@ -55,7 +55,7 @@ public:
 
     Lock m_lock { "RamdiskDevice" };
 
-    OwnPtr<Region> m_region;
+    NonnullOwnPtr<Region> m_region;
 };
 
 }