Kernel: Don't crash if unable to map ramdisk inside kernel address space
This commit is contained in:
parent
436ca2491d
commit
346e0f4dac
Notes:
sideshowbarker
2024-07-18 20:43:25 +09:00
Author: https://github.com/boricj Commit: https://github.com/SerenityOS/serenity/commit/346e0f4dacf Pull-request: https://github.com/SerenityOS/serenity/pull/6156
3 changed files with 9 additions and 6 deletions
|
@ -70,7 +70,10 @@ RamdiskController::RamdiskController()
|
||||||
if (used_memory_range.type == UsedMemoryRangeType::BootModule) {
|
if (used_memory_range.type == UsedMemoryRangeType::BootModule) {
|
||||||
size_t length = page_round_up(used_memory_range.end.get()) - used_memory_range.start.get();
|
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);
|
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++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,12 +32,12 @@
|
||||||
|
|
||||||
namespace Kernel {
|
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));
|
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)
|
: StorageDevice(controller, major, minor, 512, region->size() / 512)
|
||||||
, m_region(move(region))
|
, m_region(move(region))
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,8 +37,8 @@ class RamdiskDevice final : public StorageDevice {
|
||||||
friend class RamdiskController;
|
friend class RamdiskController;
|
||||||
AK_MAKE_ETERNAL
|
AK_MAKE_ETERNAL
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<RamdiskDevice> create(const RamdiskController&, OwnPtr<Region>&& region, int major, int minor);
|
static NonnullRefPtr<RamdiskDevice> create(const RamdiskController&, NonnullOwnPtr<Region>&& region, int major, int minor);
|
||||||
RamdiskDevice(const RamdiskController&, OwnPtr<Region>&&, int major, int minor);
|
RamdiskDevice(const RamdiskController&, NonnullOwnPtr<Region>&&, int major, int minor);
|
||||||
virtual ~RamdiskDevice() override;
|
virtual ~RamdiskDevice() override;
|
||||||
|
|
||||||
// ^StorageDevice
|
// ^StorageDevice
|
||||||
|
@ -55,7 +55,7 @@ public:
|
||||||
|
|
||||||
Lock m_lock { "RamdiskDevice" };
|
Lock m_lock { "RamdiskDevice" };
|
||||||
|
|
||||||
OwnPtr<Region> m_region;
|
NonnullOwnPtr<Region> m_region;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue