From d939cacf6bb5b85a3d0a54f416c40b1e8f2a4add Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 27 Apr 2020 00:50:34 -0400 Subject: [PATCH] kernel: Add assert in IOBuffer::SetVecs() that the passed length is the actual length. These are, at present, triggered on rare invocations of vfs_read_pages. See #15912. --- src/system/kernel/device_manager/IORequest.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/system/kernel/device_manager/IORequest.cpp b/src/system/kernel/device_manager/IORequest.cpp index 1c0ae43139..f638979af7 100644 --- a/src/system/kernel/device_manager/IORequest.cpp +++ b/src/system/kernel/device_manager/IORequest.cpp @@ -126,6 +126,14 @@ IOBuffer::SetVecs(generic_size_t firstVecOffset, const generic_io_vec* vecs, fLength = length; fPhysical = (flags & B_PHYSICAL_IO_REQUEST) != 0; fUser = !fPhysical && IS_USER_ADDRESS(vecs[0].base); + +#if KDEBUG + generic_size_t actualLength = 0; + for (size_t i = 0; i < fVecCount; i++) + actualLength += fVecs[i].length; + + ASSERT(actualLength == fLength); +#endif }