From ca4525462d01f24ea466c563c18104f1be17032e Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Thu, 28 Jul 2022 14:16:07 +0200 Subject: [PATCH] Return right number of bytes written for addrspace. --- src/scheme/proc.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index 23d7f9c..d2ddacf 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -755,7 +755,11 @@ impl Scheme for ProcScheme { }, Operation::AddrSpace { addrspace } => { let mut chunks = buf.array_chunks::<{mem::size_of::()}>().copied().map(usize::from_ne_bytes); - let mut next = || chunks.next().ok_or(Error::new(EINVAL)); + let mut words_read = 0; + let mut next = || { + words_read += 1; + chunks.next().ok_or(Error::new(EINVAL)) + }; match next()? { op @ ADDRSPACE_OP_MMAP | op @ ADDRSPACE_OP_TRANSFER => { @@ -770,7 +774,7 @@ impl Scheme for ProcScheme { let (scheme, number) = extract_scheme_number(fd)?; - return scheme.kfmap(number, &addrspace, &Map { offset, size: page_count * PAGE_SIZE, address: page.start_address().data(), flags }, op == ADDRSPACE_OP_TRANSFER); + scheme.kfmap(number, &addrspace, &Map { offset, size: page_count * PAGE_SIZE, address: page.start_address().data(), flags }, op == ADDRSPACE_OP_TRANSFER)?; } ADDRSPACE_OP_MUNMAP => { let (page, page_count) = crate::syscall::validate_region(next()?, next()?)?; @@ -785,7 +789,7 @@ impl Scheme for ProcScheme { } _ => return Err(Error::new(EINVAL)), } - Ok(0) + Ok(words_read * mem::size_of::()) } Operation::Regs(kind) => match kind { RegsKind::Float => {