diff --git a/sys/dev/raid/hptmv/hptproc.c b/sys/dev/raid/hptmv/hptproc.c --- a/sys/dev/raid/hptmv/hptproc.c +++ b/sys/dev/raid/hptmv/hptproc.c @@ -294,14 +294,18 @@ return -EINVAL; } - ke_area = kmalloc(piop->nInBufferSize+piop->nOutBufferSize, M_DEVBUF, M_NOWAIT); + ke_area = kmalloc(piop->nInBufferSize+piop->nOutBufferSize, M_DEVBUF, M_NOWAIT | M_ZERO); if (ke_area == NULL) { KdPrintE(("Couldn't allocate kernel mem.\n")); return -EINVAL; } - if (piop->nInBufferSize) - copyin((void*)(ULONG_PTR)piop->lpInBuffer, ke_area, piop->nInBufferSize); + if (piop->nInBufferSize) { + if (copyin((void*)(ULONG_PTR)piop->lpInBuffer, ke_area, piop->nInBufferSize)) { + kfree(ke_area, M_DEVBUF); + return -EFAULT; + } + } /* * call kernel handler.