Check if member io_residual is non-negative. If it is negative, the call to memset() will fail. In that case return FALSE.
* device/dev_pager.c (device_pager_data_request_done): Check if member io_residual is non-negative. ((device_pager_data_request_done) (memset) (io_residual): Cast to size_t. --- device/dev_pager.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/device/dev_pager.c b/device/dev_pager.c index a5dba3f..8aaa022 100644 --- a/device/dev_pager.c +++ b/device/dev_pager.c @@ -424,8 +424,11 @@ boolean_t device_pager_data_request_done(io_req_t ior) if (ior->io_residual) { if (device_pager_debug) printf("(device_pager)data_request_done: r: 0x%lx\n", ior->io_residual); - memset((&ior->io_data[ior->io_count - ior->io_residual]), 0, - (unsigned) ior->io_residual); + if (ior->io_residual >= 0) + memset((&ior->io_data[ior->io_count - ior->io_residual]), 0, + (size_t) ior->io_residual); + else + return FALSE; } } else { size_read = ior->io_count - ior->io_residual; -- 1.8.1.4