mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 17:58:18 +03:00
BXVGADevice+MBVGADevice: Correctly check page-aligned mmaps
In ab14b0ac64
, mmap was changed so that
the size of the region is aligned before it was passed to the device
driver. The previous logic would assert when the framebuffer size was
not a multiple of the page size. I've also taken the liberty of
returning an error on mmap failure rather than asserting.
This commit is contained in:
parent
f2decb6665
commit
985ce3b701
Notes:
sideshowbarker
2024-07-18 22:48:15 +09:00
Author: https://github.com/petelliott Commit: https://github.com/SerenityOS/serenity/commit/985ce3b7010 Pull-request: https://github.com/SerenityOS/serenity/pull/5139
@ -177,8 +177,11 @@ KResultOr<Region*> BXVGADevice::mmap(Process& process, FileDescription&, const R
|
|||||||
REQUIRE_PROMISE(video);
|
REQUIRE_PROMISE(video);
|
||||||
if (!shared)
|
if (!shared)
|
||||||
return ENODEV;
|
return ENODEV;
|
||||||
ASSERT(offset == 0);
|
if (offset != 0)
|
||||||
ASSERT(range.size() == framebuffer_size_in_bytes());
|
return ENXIO;
|
||||||
|
if (range.size() != PAGE_ROUND_UP(framebuffer_size_in_bytes()))
|
||||||
|
return EOVERFLOW;
|
||||||
|
|
||||||
auto vmobject = AnonymousVMObject::create_for_physical_range(m_framebuffer_address, framebuffer_size_in_bytes());
|
auto vmobject = AnonymousVMObject::create_for_physical_range(m_framebuffer_address, framebuffer_size_in_bytes());
|
||||||
if (!vmobject)
|
if (!vmobject)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
@ -56,8 +56,11 @@ KResultOr<Region*> MBVGADevice::mmap(Process& process, FileDescription&, const R
|
|||||||
REQUIRE_PROMISE(video);
|
REQUIRE_PROMISE(video);
|
||||||
if (!shared)
|
if (!shared)
|
||||||
return ENODEV;
|
return ENODEV;
|
||||||
ASSERT(offset == 0);
|
if (offset != 0)
|
||||||
ASSERT(range.size() == framebuffer_size_in_bytes());
|
return ENXIO;
|
||||||
|
if (range.size() != PAGE_ROUND_UP(framebuffer_size_in_bytes()))
|
||||||
|
return EOVERFLOW;
|
||||||
|
|
||||||
auto vmobject = AnonymousVMObject::create_for_physical_range(m_framebuffer_address, framebuffer_size_in_bytes());
|
auto vmobject = AnonymousVMObject::create_for_physical_range(m_framebuffer_address, framebuffer_size_in_bytes());
|
||||||
if (!vmobject)
|
if (!vmobject)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
Loading…
Reference in New Issue
Block a user