summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsilby <silby@FreeBSD.org>2005-01-17 07:56:28 +0000
committersilby <silby@FreeBSD.org>2005-01-17 07:56:28 +0000
commitce62b5450ee0ff724bac229c5eda1bed4d2b2aff (patch)
tree17f0703535ba0288eb80daebff19b80829c7b69c
parent6cc4b6c220d4e49fad2881c7dc754fa560248ef8 (diff)
downloadFreeBSD-src-ce62b5450ee0ff724bac229c5eda1bed4d2b2aff.zip
FreeBSD-src-ce62b5450ee0ff724bac229c5eda1bed4d2b2aff.tar.gz
Rearrange the kninit calls for both directions of a pipe so that
they both happen before pipe backing allocation occurs. Previously, a pipe memory shortage would cause a panic due to a KNOTE call on an uninitialized si_note. Reported by: Peter Holm MFC after: 1 week
-rw-r--r--sys/kern/sys_pipe.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index 7833f20..267670c 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -351,6 +351,9 @@ pipe(td, uap)
rpipe = &pp->pp_rpipe;
wpipe = &pp->pp_wpipe;
+ knlist_init(&rpipe->pipe_sel.si_note, PIPE_MTX(rpipe));
+ knlist_init(&wpipe->pipe_sel.si_note, PIPE_MTX(wpipe));
+
/* Only the forward direction pipe is backed by default */
if (pipe_create(rpipe, 1) || pipe_create(wpipe, 0)) {
pipeclose(rpipe);
@@ -565,7 +568,6 @@ pipe_create(pipe, backing)
/* If we're not backing this pipe, no need to do anything. */
error = 0;
}
- knlist_init(&pipe->pipe_sel.si_note, PIPE_MTX(pipe));
return (error);
}
OpenPOWER on IntegriCloud