debug: trace EINVAL in AddrSpace kwriteoff mmap handler
This commit is contained in:
+18
-3
@@ -1316,15 +1316,25 @@ impl ContextHandle {
|
||||
op @ ADDRSPACE_OP_MMAP | op @ ADDRSPACE_OP_TRANSFER => {
|
||||
let fd = next()??;
|
||||
let offset = next()??;
|
||||
let page_span = crate::syscall::validate_region(next()??, next()??)?;
|
||||
let flags = MapFlags::from_bits(next()??).ok_or(Error::new(EINVAL))?;
|
||||
let addr_raw = next()??;
|
||||
let size_raw = next()??;
|
||||
let flags_raw = next()??;
|
||||
info!("AS:MMAP fd={} off={} addr={:#x} size={:#x} flags={:#x}", fd, offset, addr_raw, size_raw, flags_raw);
|
||||
let page_span = crate::syscall::validate_region(addr_raw, size_raw)?;
|
||||
let flags = match MapFlags::from_bits(flags_raw) {
|
||||
Some(f) => f,
|
||||
None => {
|
||||
info!("AS:MMAP MapFlags::from_bits FAILED");
|
||||
return Err(Error::new(EINVAL));
|
||||
}
|
||||
};
|
||||
|
||||
if fd == !0 {
|
||||
if op == ADDRSPACE_OP_TRANSFER {
|
||||
return Err(Error::new(EOPNOTSUPP));
|
||||
}
|
||||
|
||||
return MemoryScheme::fmap_anonymous(
|
||||
let res = MemoryScheme::fmap_anonymous(
|
||||
&addrspace,
|
||||
&Map {
|
||||
offset,
|
||||
@@ -1335,6 +1345,11 @@ impl ContextHandle {
|
||||
false,
|
||||
token,
|
||||
);
|
||||
match res {
|
||||
Ok(a) => { info!("AS:MMAP fmap_anonymous ok addr={:#x}", a); }
|
||||
Err(ref e) => { info!("AS:MMAP fmap_anonymous ERR errno={}", e.errno); }
|
||||
};
|
||||
return res;
|
||||
} else {
|
||||
let (scheme, number) = extract_scheme_number(fd, token)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user