Check or read from potentially invalid virtual address catching GP/page faults

Hello,

I've been working on a personal project, where I must handle potentially invalid information in scenario similar to a kernel panic. When I detect an erroneous condition, I try to dump certain structures, following pointers whenever possible.

So far I've implemented a test similar to those built in the copyin/copyout functions, using the MAX_USER_ADDRESS. On amd64, however, addresses like 0xdeadbeefdeadbeef would still fall within the range of kernel addresses assumed as "valid".

  1. Is there any fault-tolerant way to test for the true validity of a given virtual address? ie. it can be read/accessed. kernacc is not working for me in certain cases, because it only searches for kernel_map pmaps, which is not going to work, say, for boot memory pages.
  2. Is there any arch-independent helper API to "examine" an address and dump its information in a similar way to ddb? How does ddb implement the override for the general protection fault handler when accessing unmapped memory?
  3. 121212

I could foresee questions about why do I actually need to do this, but I would appreciate it if we could just stick to providing answers disregarding of any subjective opinions. I have reasons to do this rather unorthodox checking and do not intend to waste anyone's time submitting my patch, for now. I'm just learning more about the vm internals.

Thanks!
 
Back
Top