[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

i386 mmap beyond 4GB (PROT_WRITE)

On OpenBSD 3.6 i386, a mmap() call with offset near/above 4GB on a
regular file succeeds but, at least for writes, silently wraps around at
the 4GB border. Correctness of reads not tested.

We have taken a look at the kernel sources, but all functions/structures
we've found use 64-bit offset variables (off_t, voff_t).
 - Setup path: sys_mmap, uvm_mmap, uvm_map
 - Fault path: presumed uvn_get, uvm_pagelookup, uvn_io

(of course the vaddr_t-based "offset-within-the-mapping" calculations
are 32-bit, but the results get implicitly cast up to voff_t in all the
places we've seen).

Which suspects may we have missed?

Is this a "known can of worms", or probably a fixable issue?

Thanks for any help with this,