From 2f39cf31f05e6423fa4063867cea61ae0917469b Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 4 Jul 2005 18:39:16 +0000 Subject: [PATCH] The pipe code was not properly handling kernel space writes. Such writes can be made by the journaling code when journaling to a pipe. --- sys/kern/sys_pipe.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 08ee98d789..1e9f1b58ac 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -17,7 +17,7 @@ * are met. * * $FreeBSD: src/sys/kern/sys_pipe.c,v 1.60.2.13 2002/08/05 15:05:15 des Exp $ - * $DragonFly: src/sys/kern/sys_pipe.c,v 1.29 2005/06/22 01:33:21 dillon Exp $ + * $DragonFly: src/sys/kern/sys_pipe.c,v 1.30 2005/07/04 18:39:16 dillon Exp $ */ /* @@ -644,8 +644,13 @@ pipe_build_write_buffer(wpipe, uio) if (size > wpipe->pipe_buffer.size) size = wpipe->pipe_buffer.size; - error = xio_init_ubuf(&wpipe->pipe_map, uio->uio_iov->iov_base, - size, XIOF_READ); + if (uio->uio_segflg == UIO_SYSSPACE) { + error = xio_init_kbuf(&wpipe->pipe_map, uio->uio_iov->iov_base, + size); + } else { + error = xio_init_ubuf(&wpipe->pipe_map, uio->uio_iov->iov_base, + size, XIOF_READ); + } wpipe->pipe_buffer.out = 0; if (error) return(error); -- 2.41.0