Hi,
I am using openbsd 6.8 on a raspberry pi 4. I have a problem and wonder if
this is an arm
or arm64 specific bug.
In my code I am creating an uvm_object and mapping it in kernel memory
using uvm_map.
uvm_map returns an address which is not aligned with PAGE_SIZE and later
when I call
uvm_unmap it panics because uvm_unmap checks for memory to be page aligned.
This is a summary of the code that creates the map:
struct uvm_object * the_uvm_object = uao_create(memory_size, 0);
uao_reference(the_uvm_object);
uvm_map(kernel_map, (vaddr_t *)&memory, round_page(memory_size),
the_uvm_object,
0, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
MAP_INHERIT_SHARED, MADV_NORMAL, 0));
memory now points to an address which has 0x004 in its lower 12 bits! Later
I do this:
uvm_unmap(kernel_map, memory, memory + memory_size);
And uvm_unmap panics. Note: memory_size is a multiple of PAGE_SIZE in my
code.
I have seen similar code patterns around in the kernel code, so I am a bit
surprised that
my code receives a non aligned address from uvm_map and all the other
instances do.
Am I missing something or is this a bug?
Thanks,
Alessandro