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

This commit is contained in:
Jean-Baptiste Boric 2021-04-06 17:15:20 +02:00 committed by Andreas Kling
parent 436ca2491d
commit 346e0f4dac
Notes: sideshowbarker 2024-07-18 20:43:25 +09:00
3 changed files with 9 additions and 6 deletions

View File

@ -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++;
}
}

View File

@ -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))
{

View File

@ -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;
};
}