kernel/vm: Adjust kernel permissions check in vm_area_for.

Areas in the kernel address space generally won't have B_KERNEL_AREA.
Instead we should check if the area in question has user permissions
at all. If it doesn't, then return an error. If the address space
isn't the kernel one, then we don't bother with this check, as
all areas in the user address space should be returned even if
they don't have permissions or are a "kernel" area.
This commit is contained in:
Augustin Cavalier 2025-01-13 14:52:38 -05:00
parent 43b96dabf2
commit c125a32508

View File

@ -3463,8 +3463,8 @@ vm_area_for(addr_t address, bool kernel)
VMArea* area = locker.AddressSpace()->LookupArea(address); VMArea* area = locker.AddressSpace()->LookupArea(address);
if (area != NULL) { if (area != NULL) {
if (!kernel && (area->protection & (B_READ_AREA | B_WRITE_AREA)) == 0 if (!kernel && team == VMAddressSpace::KernelID()
&& (area->protection & B_KERNEL_AREA) != 0) && (area->protection & (B_READ_AREA | B_WRITE_AREA | B_CLONEABLE_AREA)) == 0)
return B_ERROR; return B_ERROR;
return area->id; return area->id;