1 /*- 2 * SPDX-License-Identifier: BSD-4-Clause 3 * 4 * Copyright (c) 1996 John S. Dyson 5 * Copyright (c) 2012 Giovanni Trematerra 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice immediately at the beginning of the file, without modification, 13 * this list of conditions, and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. Absolutely no warranty of function or purpose is made by the author 18 * John S. Dyson. 19 * 4. Modifications may be freely made to this file if the above conditions 20 * are met. 21 */ 22 23 /* 24 * This file contains a high-performance replacement for the socket-based 25 * pipes scheme originally used in FreeBSD/4.4Lite. It does not support 26 * all features of sockets, but does do everything that pipes normally 27 * do. 28 */ 29 30 /* 31 * This code has two modes of operation, a small write mode and a large 32 * write mode. The small write mode acts like conventional pipes with 33 * a kernel buffer. If the buffer is less than PIPE_MINDIRECT, then the 34 * "normal" pipe buffering is done. If the buffer is between PIPE_MINDIRECT 35 * and PIPE_SIZE in size, the sending process pins the underlying pages in 36 * memory, and the receiving process copies directly from these pinned pages 37 * in the sending process. 38 * 39 * If the sending process receives a signal, it is possible that it will 40 * go away, and certainly its address space can change, because control 41 * is returned back to the user-mode side. In that case, the pipe code 42 * arranges to copy the buffer supplied by the user process, to a pageable 43 * kernel buffer, and the receiving process will grab the data from the 44 * pageable kernel buffer. Since signals don't happen all that often, 45 * the copy operation is normally eliminated. 46 * 47 * The constant PIPE_MINDIRECT is chosen to make sure that buffering will 48 * happen for small transfers so that the system will not spend all of 49 * its time context switching. 50 * 51 * In order to limit the resource use of pipes, two sysctls exist: 52 * 53 * kern.ipc.maxpipekva - This is a hard limit on the amount of pageable 54 * address space available to us in pipe_map. This value is normally 55 * autotuned, but may also be loader tuned. 56 * 57 * kern.ipc.pipekva - This read-only sysctl tracks the current amount of 58 * memory in use by pipes. 59 * 60 * Based on how large pipekva is relative to maxpipekva, the following 61 * will happen: 62 * 63 * 0% - 50%: 64 * New pipes are given 16K of memory backing, pipes may dynamically 65 * grow to as large as 64K where needed. 66 * 50% - 75%: 67 * New pipes are given 4K (or PAGE_SIZE) of memory backing, 68 * existing pipes may NOT grow. 69 * 75% - 100%: 70 * New pipes are given 4K (or PAGE_SIZE) of memory backing, 71 * existing pipes will be shrunk down to 4K whenever possible. 72 * 73 * Resizing may be disabled by setting kern.ipc.piperesizeallowed=0. If 74 * that is set, the only resize that will occur is the 0 -> SMALL_PIPE_SIZE 75 * resize which MUST occur for reverse-direction pipes when they are 76 * first used. 77 * 78 * Additional information about the current state of pipes may be obtained 79 * from kern.ipc.pipes, kern.ipc.pipefragretry, kern.ipc.pipeallocfail, 80 * and kern.ipc.piperesizefail. 81 * 82 * Locking rules: There are two locks present here: A mutex, used via 83 * PIPE_LOCK, and a flag, used via pipelock(). All locking is done via 84 * the flag, as mutexes can not persist over uiomove. The mutex 85 * exists only to guard access to the flag, and is not in itself a 86 * locking mechanism. Also note that there is only a single mutex for 87 * both directions of a pipe. 88 * 89 * As pipelock() may have to sleep before it can acquire the flag, it 90 * is important to reread all data after a call to pipelock(); everything 91 * in the structure may have changed. 92 */ 93 94 #include <sys/cdefs.h> 95 __FBSDID("$FreeBSD$"); 96 97 #include <sys/param.h> 98 #include <sys/systm.h> 99 #include <sys/conf.h> 100 #include <sys/fcntl.h> 101 #include <sys/file.h> 102 #include <sys/filedesc.h> 103 #include <sys/filio.h> 104 #include <sys/kernel.h> 105 #include <sys/lock.h> 106 #include <sys/mutex.h> 107 #include <sys/ttycom.h> 108 #include <sys/stat.h> 109 #include <sys/malloc.h> 110 #include <sys/poll.h> 111 #include <sys/selinfo.h> 112 #include <sys/signalvar.h> 113 #include <sys/syscallsubr.h> 114 #include <sys/sysctl.h> 115 #include <sys/sysproto.h> 116 #include <sys/pipe.h> 117 #include <sys/proc.h> 118 #include <sys/vnode.h> 119 #include <sys/uio.h> 120 #include <sys/user.h> 121 #include <sys/event.h> 122 123 #include <security/mac/mac_framework.h> 124 125 #include <vm/vm.h> 126 #include <vm/vm_param.h> 127 #include <vm/vm_object.h> 128 #include <vm/vm_kern.h> 129 #include <vm/vm_extern.h> 130 #include <vm/pmap.h> 131 #include <vm/vm_map.h> 132 #include <vm/vm_page.h> 133 #include <vm/uma.h> 134 135 /* 136 * Use this define if you want to disable *fancy* VM things. Expect an 137 * approx 30% decrease in transfer rate. This could be useful for 138 * NetBSD or OpenBSD. 139 */ 140 /* #define PIPE_NODIRECT */ 141 142 #define PIPE_PEER(pipe) \ 143 (((pipe)->pipe_state & PIPE_NAMED) ? (pipe) : ((pipe)->pipe_peer)) 144 145 /* 146 * interfaces to the outside world 147 */ 148 static fo_rdwr_t pipe_read; 149 static fo_rdwr_t pipe_write; 150 static fo_truncate_t pipe_truncate; 151 static fo_ioctl_t pipe_ioctl; 152 static fo_poll_t pipe_poll; 153 static fo_kqfilter_t pipe_kqfilter; 154 static fo_stat_t pipe_stat; 155 static fo_close_t pipe_close; 156 static fo_chmod_t pipe_chmod; 157 static fo_chown_t pipe_chown; 158 static fo_fill_kinfo_t pipe_fill_kinfo; 159 160 struct fileops pipeops = { 161 .fo_read = pipe_read, 162 .fo_write = pipe_write, 163 .fo_truncate = pipe_truncate, 164 .fo_ioctl = pipe_ioctl, 165 .fo_poll = pipe_poll, 166 .fo_kqfilter = pipe_kqfilter, 167 .fo_stat = pipe_stat, 168 .fo_close = pipe_close, 169 .fo_chmod = pipe_chmod, 170 .fo_chown = pipe_chown, 171 .fo_sendfile = invfo_sendfile, 172 .fo_fill_kinfo = pipe_fill_kinfo, 173 .fo_flags = DFLAG_PASSABLE 174 }; 175 176 static void filt_pipedetach(struct knote *kn); 177 static void filt_pipedetach_notsup(struct knote *kn); 178 static int filt_pipenotsup(struct knote *kn, long hint); 179 static int filt_piperead(struct knote *kn, long hint); 180 static int filt_pipewrite(struct knote *kn, long hint); 181 182 static struct filterops pipe_nfiltops = { 183 .f_isfd = 1, 184 .f_detach = filt_pipedetach_notsup, 185 .f_event = filt_pipenotsup 186 }; 187 static struct filterops pipe_rfiltops = { 188 .f_isfd = 1, 189 .f_detach = filt_pipedetach, 190 .f_event = filt_piperead 191 }; 192 static struct filterops pipe_wfiltops = { 193 .f_isfd = 1, 194 .f_detach = filt_pipedetach, 195 .f_event = filt_pipewrite 196 }; 197 198 /* 199 * Default pipe buffer size(s), this can be kind-of large now because pipe 200 * space is pageable. The pipe code will try to maintain locality of 201 * reference for performance reasons, so small amounts of outstanding I/O 202 * will not wipe the cache. 203 */ 204 #define MINPIPESIZE (PIPE_SIZE/3) 205 #define MAXPIPESIZE (2*PIPE_SIZE/3) 206 207 static long amountpipekva; 208 static int pipefragretry; 209 static int pipeallocfail; 210 static int piperesizefail; 211 static int piperesizeallowed = 1; 212 213 SYSCTL_LONG(_kern_ipc, OID_AUTO, maxpipekva, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, 214 &maxpipekva, 0, "Pipe KVA limit"); 215 SYSCTL_LONG(_kern_ipc, OID_AUTO, pipekva, CTLFLAG_RD, 216 &amountpipekva, 0, "Pipe KVA usage"); 217 SYSCTL_INT(_kern_ipc, OID_AUTO, pipefragretry, CTLFLAG_RD, 218 &pipefragretry, 0, "Pipe allocation retries due to fragmentation"); 219 SYSCTL_INT(_kern_ipc, OID_AUTO, pipeallocfail, CTLFLAG_RD, 220 &pipeallocfail, 0, "Pipe allocation failures"); 221 SYSCTL_INT(_kern_ipc, OID_AUTO, piperesizefail, CTLFLAG_RD, 222 &piperesizefail, 0, "Pipe resize failures"); 223 SYSCTL_INT(_kern_ipc, OID_AUTO, piperesizeallowed, CTLFLAG_RW, 224 &piperesizeallowed, 0, "Pipe resizing allowed"); 225 226 static void pipeinit(void *dummy __unused); 227 static void pipeclose(struct pipe *cpipe); 228 static void pipe_free_kmem(struct pipe *cpipe); 229 static void pipe_create(struct pipe *pipe, int backing); 230 static void pipe_paircreate(struct thread *td, struct pipepair **p_pp); 231 static __inline int pipelock(struct pipe *cpipe, int catch); 232 static __inline void pipeunlock(struct pipe *cpipe); 233 #ifndef PIPE_NODIRECT 234 static int pipe_build_write_buffer(struct pipe *wpipe, struct uio *uio); 235 static void pipe_destroy_write_buffer(struct pipe *wpipe); 236 static int pipe_direct_write(struct pipe *wpipe, struct uio *uio); 237 static void pipe_clone_write_buffer(struct pipe *wpipe); 238 #endif 239 static int pipespace(struct pipe *cpipe, int size); 240 static int pipespace_new(struct pipe *cpipe, int size); 241 242 static int pipe_zone_ctor(void *mem, int size, void *arg, int flags); 243 static int pipe_zone_init(void *mem, int size, int flags); 244 static void pipe_zone_fini(void *mem, int size); 245 246 static uma_zone_t pipe_zone; 247 static struct unrhdr *pipeino_unr; 248 static dev_t pipedev_ino; 249 250 SYSINIT(vfs, SI_SUB_VFS, SI_ORDER_ANY, pipeinit, NULL); 251 252 static void 253 pipeinit(void *dummy __unused) 254 { 255 256 pipe_zone = uma_zcreate("pipe", sizeof(struct pipepair), 257 pipe_zone_ctor, NULL, pipe_zone_init, pipe_zone_fini, 258 UMA_ALIGN_PTR, 0); 259 KASSERT(pipe_zone != NULL, ("pipe_zone not initialized")); 260 pipeino_unr = new_unrhdr(1, INT32_MAX, NULL); 261 KASSERT(pipeino_unr != NULL, ("pipe fake inodes not initialized")); 262 pipedev_ino = devfs_alloc_cdp_inode(); 263 KASSERT(pipedev_ino > 0, ("pipe dev inode not initialized")); 264 } 265 266 static int 267 pipe_zone_ctor(void *mem, int size, void *arg, int flags) 268 { 269 struct pipepair *pp; 270 struct pipe *rpipe, *wpipe; 271 272 KASSERT(size == sizeof(*pp), ("pipe_zone_ctor: wrong size")); 273 274 pp = (struct pipepair *)mem; 275 276 /* 277 * We zero both pipe endpoints to make sure all the kmem pointers 278 * are NULL, flag fields are zero'd, etc. We timestamp both 279 * endpoints with the same time. 280 */ 281 rpipe = &pp->pp_rpipe; 282 bzero(rpipe, sizeof(*rpipe)); 283 vfs_timestamp(&rpipe->pipe_ctime); 284 rpipe->pipe_atime = rpipe->pipe_mtime = rpipe->pipe_ctime; 285 286 wpipe = &pp->pp_wpipe; 287 bzero(wpipe, sizeof(*wpipe)); 288 wpipe->pipe_ctime = rpipe->pipe_ctime; 289 wpipe->pipe_atime = wpipe->pipe_mtime = rpipe->pipe_ctime; 290 291 rpipe->pipe_peer = wpipe; 292 rpipe->pipe_pair = pp; 293 wpipe->pipe_peer = rpipe; 294 wpipe->pipe_pair = pp; 295 296 /* 297 * Mark both endpoints as present; they will later get free'd 298 * one at a time. When both are free'd, then the whole pair 299 * is released. 300 */ 301 rpipe->pipe_present = PIPE_ACTIVE; 302 wpipe->pipe_present = PIPE_ACTIVE; 303 304 /* 305 * Eventually, the MAC Framework may initialize the label 306 * in ctor or init, but for now we do it elswhere to avoid 307 * blocking in ctor or init. 308 */ 309 pp->pp_label = NULL; 310 311 return (0); 312 } 313 314 static int 315 pipe_zone_init(void *mem, int size, int flags) 316 { 317 struct pipepair *pp; 318 319 KASSERT(size == sizeof(*pp), ("pipe_zone_init: wrong size")); 320 321 pp = (struct pipepair *)mem; 322 323 mtx_init(&pp->pp_mtx, "pipe mutex", NULL, MTX_DEF | MTX_NEW); 324 return (0); 325 } 326 327 static void 328 pipe_zone_fini(void *mem, int size) 329 { 330 struct pipepair *pp; 331 332 KASSERT(size == sizeof(*pp), ("pipe_zone_fini: wrong size")); 333 334 pp = (struct pipepair *)mem; 335 336 mtx_destroy(&pp->pp_mtx); 337 } 338 339 static void 340 pipe_paircreate(struct thread *td, struct pipepair **p_pp) 341 { 342 struct pipepair *pp; 343 struct pipe *rpipe, *wpipe; 344 345 *p_pp = pp = uma_zalloc(pipe_zone, M_WAITOK); 346 #ifdef MAC 347 /* 348 * The MAC label is shared between the connected endpoints. As a 349 * result mac_pipe_init() and mac_pipe_create() are called once 350 * for the pair, and not on the endpoints. 351 */ 352 mac_pipe_init(pp); 353 mac_pipe_create(td->td_ucred, pp); 354 #endif 355 rpipe = &pp->pp_rpipe; 356 wpipe = &pp->pp_wpipe; 357 358 knlist_init_mtx(&rpipe->pipe_sel.si_note, PIPE_MTX(rpipe)); 359 knlist_init_mtx(&wpipe->pipe_sel.si_note, PIPE_MTX(wpipe)); 360 361 /* Only the forward direction pipe is backed by default */ 362 pipe_create(rpipe, 1); 363 pipe_create(wpipe, 0); 364 365 rpipe->pipe_state |= PIPE_DIRECTOK; 366 wpipe->pipe_state |= PIPE_DIRECTOK; 367 } 368 369 void 370 pipe_named_ctor(struct pipe **ppipe, struct thread *td) 371 { 372 struct pipepair *pp; 373 374 pipe_paircreate(td, &pp); 375 pp->pp_rpipe.pipe_state |= PIPE_NAMED; 376 *ppipe = &pp->pp_rpipe; 377 } 378 379 void 380 pipe_dtor(struct pipe *dpipe) 381 { 382 struct pipe *peer; 383 ino_t ino; 384 385 ino = dpipe->pipe_ino; 386 peer = (dpipe->pipe_state & PIPE_NAMED) != 0 ? dpipe->pipe_peer : NULL; 387 funsetown(&dpipe->pipe_sigio); 388 pipeclose(dpipe); 389 if (peer != NULL) { 390 funsetown(&peer->pipe_sigio); 391 pipeclose(peer); 392 } 393 if (ino != 0 && ino != (ino_t)-1) 394 free_unr(pipeino_unr, ino); 395 } 396 397 /* 398 * The pipe system call for the DTYPE_PIPE type of pipes. If we fail, let 399 * the zone pick up the pieces via pipeclose(). 400 */ 401 int 402 kern_pipe(struct thread *td, int fildes[2], int flags, struct filecaps *fcaps1, 403 struct filecaps *fcaps2) 404 { 405 struct file *rf, *wf; 406 struct pipe *rpipe, *wpipe; 407 struct pipepair *pp; 408 int fd, fflags, error; 409 410 pipe_paircreate(td, &pp); 411 rpipe = &pp->pp_rpipe; 412 wpipe = &pp->pp_wpipe; 413 error = falloc_caps(td, &rf, &fd, flags, fcaps1); 414 if (error) { 415 pipeclose(rpipe); 416 pipeclose(wpipe); 417 return (error); 418 } 419 /* An extra reference on `rf' has been held for us by falloc_caps(). */ 420 fildes[0] = fd; 421 422 fflags = FREAD | FWRITE; 423 if ((flags & O_NONBLOCK) != 0) 424 fflags |= FNONBLOCK; 425 426 /* 427 * Warning: once we've gotten past allocation of the fd for the 428 * read-side, we can only drop the read side via fdrop() in order 429 * to avoid races against processes which manage to dup() the read 430 * side while we are blocked trying to allocate the write side. 431 */ 432 finit(rf, fflags, DTYPE_PIPE, rpipe, &pipeops); 433 error = falloc_caps(td, &wf, &fd, flags, fcaps2); 434 if (error) { 435 fdclose(td, rf, fildes[0]); 436 fdrop(rf, td); 437 /* rpipe has been closed by fdrop(). */ 438 pipeclose(wpipe); 439 return (error); 440 } 441 /* An extra reference on `wf' has been held for us by falloc_caps(). */ 442 finit(wf, fflags, DTYPE_PIPE, wpipe, &pipeops); 443 fdrop(wf, td); 444 fildes[1] = fd; 445 fdrop(rf, td); 446 447 return (0); 448 } 449 450 #ifdef COMPAT_FREEBSD10 451 /* ARGSUSED */ 452 int 453 freebsd10_pipe(struct thread *td, struct freebsd10_pipe_args *uap __unused) 454 { 455 int error; 456 int fildes[2]; 457 458 error = kern_pipe(td, fildes, 0, NULL, NULL); 459 if (error) 460 return (error); 461 462 td->td_retval[0] = fildes[0]; 463 td->td_retval[1] = fildes[1]; 464 465 return (0); 466 } 467 #endif 468 469 int 470 sys_pipe2(struct thread *td, struct pipe2_args *uap) 471 { 472 int error, fildes[2]; 473 474 if (uap->flags & ~(O_CLOEXEC | O_NONBLOCK)) 475 return (EINVAL); 476 error = kern_pipe(td, fildes, uap->flags, NULL, NULL); 477 if (error) 478 return (error); 479 error = copyout(fildes, uap->fildes, 2 * sizeof(int)); 480 if (error) { 481 (void)kern_close(td, fildes[0]); 482 (void)kern_close(td, fildes[1]); 483 } 484 return (error); 485 } 486 487 /* 488 * Allocate kva for pipe circular buffer, the space is pageable 489 * This routine will 'realloc' the size of a pipe safely, if it fails 490 * it will retain the old buffer. 491 * If it fails it will return ENOMEM. 492 */ 493 static int 494 pipespace_new(cpipe, size) 495 struct pipe *cpipe; 496 int size; 497 { 498 caddr_t buffer; 499 int error, cnt, firstseg; 500 static int curfail = 0; 501 static struct timeval lastfail; 502 503 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), ("pipespace: pipe mutex locked")); 504 KASSERT(!(cpipe->pipe_state & PIPE_DIRECTW), 505 ("pipespace: resize of direct writes not allowed")); 506 retry: 507 cnt = cpipe->pipe_buffer.cnt; 508 if (cnt > size) 509 size = cnt; 510 511 size = round_page(size); 512 buffer = (caddr_t) vm_map_min(pipe_map); 513 514 error = vm_map_find(pipe_map, NULL, 0, 515 (vm_offset_t *) &buffer, size, 0, VMFS_ANY_SPACE, 516 VM_PROT_ALL, VM_PROT_ALL, 0); 517 if (error != KERN_SUCCESS) { 518 if ((cpipe->pipe_buffer.buffer == NULL) && 519 (size > SMALL_PIPE_SIZE)) { 520 size = SMALL_PIPE_SIZE; 521 pipefragretry++; 522 goto retry; 523 } 524 if (cpipe->pipe_buffer.buffer == NULL) { 525 pipeallocfail++; 526 if (ppsratecheck(&lastfail, &curfail, 1)) 527 printf("kern.ipc.maxpipekva exceeded; see tuning(7)\n"); 528 } else { 529 piperesizefail++; 530 } 531 return (ENOMEM); 532 } 533 534 /* copy data, then free old resources if we're resizing */ 535 if (cnt > 0) { 536 if (cpipe->pipe_buffer.in <= cpipe->pipe_buffer.out) { 537 firstseg = cpipe->pipe_buffer.size - cpipe->pipe_buffer.out; 538 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], 539 buffer, firstseg); 540 if ((cnt - firstseg) > 0) 541 bcopy(cpipe->pipe_buffer.buffer, &buffer[firstseg], 542 cpipe->pipe_buffer.in); 543 } else { 544 bcopy(&cpipe->pipe_buffer.buffer[cpipe->pipe_buffer.out], 545 buffer, cnt); 546 } 547 } 548 pipe_free_kmem(cpipe); 549 cpipe->pipe_buffer.buffer = buffer; 550 cpipe->pipe_buffer.size = size; 551 cpipe->pipe_buffer.in = cnt; 552 cpipe->pipe_buffer.out = 0; 553 cpipe->pipe_buffer.cnt = cnt; 554 atomic_add_long(&amountpipekva, cpipe->pipe_buffer.size); 555 return (0); 556 } 557 558 /* 559 * Wrapper for pipespace_new() that performs locking assertions. 560 */ 561 static int 562 pipespace(cpipe, size) 563 struct pipe *cpipe; 564 int size; 565 { 566 567 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, 568 ("Unlocked pipe passed to pipespace")); 569 return (pipespace_new(cpipe, size)); 570 } 571 572 /* 573 * lock a pipe for I/O, blocking other access 574 */ 575 static __inline int 576 pipelock(cpipe, catch) 577 struct pipe *cpipe; 578 int catch; 579 { 580 int error; 581 582 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); 583 while (cpipe->pipe_state & PIPE_LOCKFL) { 584 cpipe->pipe_state |= PIPE_LWANT; 585 error = msleep(cpipe, PIPE_MTX(cpipe), 586 catch ? (PRIBIO | PCATCH) : PRIBIO, 587 "pipelk", 0); 588 if (error != 0) 589 return (error); 590 } 591 cpipe->pipe_state |= PIPE_LOCKFL; 592 return (0); 593 } 594 595 /* 596 * unlock a pipe I/O lock 597 */ 598 static __inline void 599 pipeunlock(cpipe) 600 struct pipe *cpipe; 601 { 602 603 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); 604 KASSERT(cpipe->pipe_state & PIPE_LOCKFL, 605 ("Unlocked pipe passed to pipeunlock")); 606 cpipe->pipe_state &= ~PIPE_LOCKFL; 607 if (cpipe->pipe_state & PIPE_LWANT) { 608 cpipe->pipe_state &= ~PIPE_LWANT; 609 wakeup(cpipe); 610 } 611 } 612 613 void 614 pipeselwakeup(cpipe) 615 struct pipe *cpipe; 616 { 617 618 PIPE_LOCK_ASSERT(cpipe, MA_OWNED); 619 if (cpipe->pipe_state & PIPE_SEL) { 620 selwakeuppri(&cpipe->pipe_sel, PSOCK); 621 if (!SEL_WAITING(&cpipe->pipe_sel)) 622 cpipe->pipe_state &= ~PIPE_SEL; 623 } 624 if ((cpipe->pipe_state & PIPE_ASYNC) && cpipe->pipe_sigio) 625 pgsigio(&cpipe->pipe_sigio, SIGIO, 0); 626 KNOTE_LOCKED(&cpipe->pipe_sel.si_note, 0); 627 } 628 629 /* 630 * Initialize and allocate VM and memory for pipe. The structure 631 * will start out zero'd from the ctor, so we just manage the kmem. 632 */ 633 static void 634 pipe_create(pipe, backing) 635 struct pipe *pipe; 636 int backing; 637 { 638 639 if (backing) { 640 /* 641 * Note that these functions can fail if pipe map is exhausted 642 * (as a result of too many pipes created), but we ignore the 643 * error as it is not fatal and could be provoked by 644 * unprivileged users. The only consequence is worse performance 645 * with given pipe. 646 */ 647 if (amountpipekva > maxpipekva / 2) 648 (void)pipespace_new(pipe, SMALL_PIPE_SIZE); 649 else 650 (void)pipespace_new(pipe, PIPE_SIZE); 651 } 652 653 pipe->pipe_ino = -1; 654 } 655 656 /* ARGSUSED */ 657 static int 658 pipe_read(fp, uio, active_cred, flags, td) 659 struct file *fp; 660 struct uio *uio; 661 struct ucred *active_cred; 662 struct thread *td; 663 int flags; 664 { 665 struct pipe *rpipe; 666 int error; 667 int nread = 0; 668 int size; 669 670 rpipe = fp->f_data; 671 PIPE_LOCK(rpipe); 672 ++rpipe->pipe_busy; 673 error = pipelock(rpipe, 1); 674 if (error) 675 goto unlocked_error; 676 677 #ifdef MAC 678 error = mac_pipe_check_read(active_cred, rpipe->pipe_pair); 679 if (error) 680 goto locked_error; 681 #endif 682 if (amountpipekva > (3 * maxpipekva) / 4) { 683 if (!(rpipe->pipe_state & PIPE_DIRECTW) && 684 (rpipe->pipe_buffer.size > SMALL_PIPE_SIZE) && 685 (rpipe->pipe_buffer.cnt <= SMALL_PIPE_SIZE) && 686 (piperesizeallowed == 1)) { 687 PIPE_UNLOCK(rpipe); 688 pipespace(rpipe, SMALL_PIPE_SIZE); 689 PIPE_LOCK(rpipe); 690 } 691 } 692 693 while (uio->uio_resid) { 694 /* 695 * normal pipe buffer receive 696 */ 697 if (rpipe->pipe_buffer.cnt > 0) { 698 size = rpipe->pipe_buffer.size - rpipe->pipe_buffer.out; 699 if (size > rpipe->pipe_buffer.cnt) 700 size = rpipe->pipe_buffer.cnt; 701 if (size > uio->uio_resid) 702 size = uio->uio_resid; 703 704 PIPE_UNLOCK(rpipe); 705 error = uiomove( 706 &rpipe->pipe_buffer.buffer[rpipe->pipe_buffer.out], 707 size, uio); 708 PIPE_LOCK(rpipe); 709 if (error) 710 break; 711 712 rpipe->pipe_buffer.out += size; 713 if (rpipe->pipe_buffer.out >= rpipe->pipe_buffer.size) 714 rpipe->pipe_buffer.out = 0; 715 716 rpipe->pipe_buffer.cnt -= size; 717 718 /* 719 * If there is no more to read in the pipe, reset 720 * its pointers to the beginning. This improves 721 * cache hit stats. 722 */ 723 if (rpipe->pipe_buffer.cnt == 0) { 724 rpipe->pipe_buffer.in = 0; 725 rpipe->pipe_buffer.out = 0; 726 } 727 nread += size; 728 #ifndef PIPE_NODIRECT 729 /* 730 * Direct copy, bypassing a kernel buffer. 731 */ 732 } else if ((size = rpipe->pipe_map.cnt) && 733 (rpipe->pipe_state & PIPE_DIRECTW)) { 734 if (size > uio->uio_resid) 735 size = (u_int) uio->uio_resid; 736 737 PIPE_UNLOCK(rpipe); 738 error = uiomove_fromphys(rpipe->pipe_map.ms, 739 rpipe->pipe_map.pos, size, uio); 740 PIPE_LOCK(rpipe); 741 if (error) 742 break; 743 nread += size; 744 rpipe->pipe_map.pos += size; 745 rpipe->pipe_map.cnt -= size; 746 if (rpipe->pipe_map.cnt == 0) { 747 rpipe->pipe_state &= ~(PIPE_DIRECTW|PIPE_WANTW); 748 wakeup(rpipe); 749 } 750 #endif 751 } else { 752 /* 753 * detect EOF condition 754 * read returns 0 on EOF, no need to set error 755 */ 756 if (rpipe->pipe_state & PIPE_EOF) 757 break; 758 759 /* 760 * If the "write-side" has been blocked, wake it up now. 761 */ 762 if (rpipe->pipe_state & PIPE_WANTW) { 763 rpipe->pipe_state &= ~PIPE_WANTW; 764 wakeup(rpipe); 765 } 766 767 /* 768 * Break if some data was read. 769 */ 770 if (nread > 0) 771 break; 772 773 /* 774 * Unlock the pipe buffer for our remaining processing. 775 * We will either break out with an error or we will 776 * sleep and relock to loop. 777 */ 778 pipeunlock(rpipe); 779 780 /* 781 * Handle non-blocking mode operation or 782 * wait for more data. 783 */ 784 if (fp->f_flag & FNONBLOCK) { 785 error = EAGAIN; 786 } else { 787 rpipe->pipe_state |= PIPE_WANTR; 788 if ((error = msleep(rpipe, PIPE_MTX(rpipe), 789 PRIBIO | PCATCH, 790 "piperd", 0)) == 0) 791 error = pipelock(rpipe, 1); 792 } 793 if (error) 794 goto unlocked_error; 795 } 796 } 797 #ifdef MAC 798 locked_error: 799 #endif 800 pipeunlock(rpipe); 801 802 /* XXX: should probably do this before getting any locks. */ 803 if (error == 0) 804 vfs_timestamp(&rpipe->pipe_atime); 805 unlocked_error: 806 --rpipe->pipe_busy; 807 808 /* 809 * PIPE_WANT processing only makes sense if pipe_busy is 0. 810 */ 811 if ((rpipe->pipe_busy == 0) && (rpipe->pipe_state & PIPE_WANT)) { 812 rpipe->pipe_state &= ~(PIPE_WANT|PIPE_WANTW); 813 wakeup(rpipe); 814 } else if (rpipe->pipe_buffer.cnt < MINPIPESIZE) { 815 /* 816 * Handle write blocking hysteresis. 817 */ 818 if (rpipe->pipe_state & PIPE_WANTW) { 819 rpipe->pipe_state &= ~PIPE_WANTW; 820 wakeup(rpipe); 821 } 822 } 823 824 if ((rpipe->pipe_buffer.size - rpipe->pipe_buffer.cnt) >= PIPE_BUF) 825 pipeselwakeup(rpipe); 826 827 PIPE_UNLOCK(rpipe); 828 return (error); 829 } 830 831 #ifndef PIPE_NODIRECT 832 /* 833 * Map the sending processes' buffer into kernel space and wire it. 834 * This is similar to a physical write operation. 835 */ 836 static int 837 pipe_build_write_buffer(wpipe, uio) 838 struct pipe *wpipe; 839 struct uio *uio; 840 { 841 u_int size; 842 int i; 843 844 PIPE_LOCK_ASSERT(wpipe, MA_NOTOWNED); 845 KASSERT(wpipe->pipe_state & PIPE_DIRECTW, 846 ("Clone attempt on non-direct write pipe!")); 847 848 if (uio->uio_iov->iov_len > wpipe->pipe_buffer.size) 849 size = wpipe->pipe_buffer.size; 850 else 851 size = uio->uio_iov->iov_len; 852 853 if ((i = vm_fault_quick_hold_pages(&curproc->p_vmspace->vm_map, 854 (vm_offset_t)uio->uio_iov->iov_base, size, VM_PROT_READ, 855 wpipe->pipe_map.ms, PIPENPAGES)) < 0) 856 return (EFAULT); 857 858 /* 859 * set up the control block 860 */ 861 wpipe->pipe_map.npages = i; 862 wpipe->pipe_map.pos = 863 ((vm_offset_t) uio->uio_iov->iov_base) & PAGE_MASK; 864 wpipe->pipe_map.cnt = size; 865 866 /* 867 * and update the uio data 868 */ 869 870 uio->uio_iov->iov_len -= size; 871 uio->uio_iov->iov_base = (char *)uio->uio_iov->iov_base + size; 872 if (uio->uio_iov->iov_len == 0) 873 uio->uio_iov++; 874 uio->uio_resid -= size; 875 uio->uio_offset += size; 876 return (0); 877 } 878 879 /* 880 * unmap and unwire the process buffer 881 */ 882 static void 883 pipe_destroy_write_buffer(wpipe) 884 struct pipe *wpipe; 885 { 886 887 PIPE_LOCK_ASSERT(wpipe, MA_OWNED); 888 vm_page_unhold_pages(wpipe->pipe_map.ms, wpipe->pipe_map.npages); 889 wpipe->pipe_map.npages = 0; 890 } 891 892 /* 893 * In the case of a signal, the writing process might go away. This 894 * code copies the data into the circular buffer so that the source 895 * pages can be freed without loss of data. 896 */ 897 static void 898 pipe_clone_write_buffer(wpipe) 899 struct pipe *wpipe; 900 { 901 struct uio uio; 902 struct iovec iov; 903 int size; 904 int pos; 905 906 PIPE_LOCK_ASSERT(wpipe, MA_OWNED); 907 size = wpipe->pipe_map.cnt; 908 pos = wpipe->pipe_map.pos; 909 910 wpipe->pipe_buffer.in = size; 911 wpipe->pipe_buffer.out = 0; 912 wpipe->pipe_buffer.cnt = size; 913 wpipe->pipe_state &= ~PIPE_DIRECTW; 914 915 PIPE_UNLOCK(wpipe); 916 iov.iov_base = wpipe->pipe_buffer.buffer; 917 iov.iov_len = size; 918 uio.uio_iov = &iov; 919 uio.uio_iovcnt = 1; 920 uio.uio_offset = 0; 921 uio.uio_resid = size; 922 uio.uio_segflg = UIO_SYSSPACE; 923 uio.uio_rw = UIO_READ; 924 uio.uio_td = curthread; 925 uiomove_fromphys(wpipe->pipe_map.ms, pos, size, &uio); 926 PIPE_LOCK(wpipe); 927 pipe_destroy_write_buffer(wpipe); 928 } 929 930 /* 931 * This implements the pipe buffer write mechanism. Note that only 932 * a direct write OR a normal pipe write can be pending at any given time. 933 * If there are any characters in the pipe buffer, the direct write will 934 * be deferred until the receiving process grabs all of the bytes from 935 * the pipe buffer. Then the direct mapping write is set-up. 936 */ 937 static int 938 pipe_direct_write(wpipe, uio) 939 struct pipe *wpipe; 940 struct uio *uio; 941 { 942 int error; 943 944 retry: 945 PIPE_LOCK_ASSERT(wpipe, MA_OWNED); 946 error = pipelock(wpipe, 1); 947 if (error != 0) 948 goto error1; 949 if ((wpipe->pipe_state & PIPE_EOF) != 0) { 950 error = EPIPE; 951 pipeunlock(wpipe); 952 goto error1; 953 } 954 while (wpipe->pipe_state & PIPE_DIRECTW) { 955 if (wpipe->pipe_state & PIPE_WANTR) { 956 wpipe->pipe_state &= ~PIPE_WANTR; 957 wakeup(wpipe); 958 } 959 pipeselwakeup(wpipe); 960 wpipe->pipe_state |= PIPE_WANTW; 961 pipeunlock(wpipe); 962 error = msleep(wpipe, PIPE_MTX(wpipe), 963 PRIBIO | PCATCH, "pipdww", 0); 964 if (error) 965 goto error1; 966 else 967 goto retry; 968 } 969 wpipe->pipe_map.cnt = 0; /* transfer not ready yet */ 970 if (wpipe->pipe_buffer.cnt > 0) { 971 if (wpipe->pipe_state & PIPE_WANTR) { 972 wpipe->pipe_state &= ~PIPE_WANTR; 973 wakeup(wpipe); 974 } 975 pipeselwakeup(wpipe); 976 wpipe->pipe_state |= PIPE_WANTW; 977 pipeunlock(wpipe); 978 error = msleep(wpipe, PIPE_MTX(wpipe), 979 PRIBIO | PCATCH, "pipdwc", 0); 980 if (error) 981 goto error1; 982 else 983 goto retry; 984 } 985 986 wpipe->pipe_state |= PIPE_DIRECTW; 987 988 PIPE_UNLOCK(wpipe); 989 error = pipe_build_write_buffer(wpipe, uio); 990 PIPE_LOCK(wpipe); 991 if (error) { 992 wpipe->pipe_state &= ~PIPE_DIRECTW; 993 pipeunlock(wpipe); 994 goto error1; 995 } 996 997 error = 0; 998 while (!error && (wpipe->pipe_state & PIPE_DIRECTW)) { 999 if (wpipe->pipe_state & PIPE_EOF) { 1000 pipe_destroy_write_buffer(wpipe); 1001 pipeselwakeup(wpipe); 1002 pipeunlock(wpipe); 1003 error = EPIPE; 1004 goto error1; 1005 } 1006 if (wpipe->pipe_state & PIPE_WANTR) { 1007 wpipe->pipe_state &= ~PIPE_WANTR; 1008 wakeup(wpipe); 1009 } 1010 pipeselwakeup(wpipe); 1011 wpipe->pipe_state |= PIPE_WANTW; 1012 pipeunlock(wpipe); 1013 error = msleep(wpipe, PIPE_MTX(wpipe), PRIBIO | PCATCH, 1014 "pipdwt", 0); 1015 pipelock(wpipe, 0); 1016 } 1017 1018 if (wpipe->pipe_state & PIPE_EOF) 1019 error = EPIPE; 1020 if (wpipe->pipe_state & PIPE_DIRECTW) { 1021 /* 1022 * this bit of trickery substitutes a kernel buffer for 1023 * the process that might be going away. 1024 */ 1025 pipe_clone_write_buffer(wpipe); 1026 } else { 1027 pipe_destroy_write_buffer(wpipe); 1028 } 1029 pipeunlock(wpipe); 1030 return (error); 1031 1032 error1: 1033 wakeup(wpipe); 1034 return (error); 1035 } 1036 #endif 1037 1038 static int 1039 pipe_write(fp, uio, active_cred, flags, td) 1040 struct file *fp; 1041 struct uio *uio; 1042 struct ucred *active_cred; 1043 struct thread *td; 1044 int flags; 1045 { 1046 int error = 0; 1047 int desiredsize; 1048 ssize_t orig_resid; 1049 struct pipe *wpipe, *rpipe; 1050 1051 rpipe = fp->f_data; 1052 wpipe = PIPE_PEER(rpipe); 1053 PIPE_LOCK(rpipe); 1054 error = pipelock(wpipe, 1); 1055 if (error) { 1056 PIPE_UNLOCK(rpipe); 1057 return (error); 1058 } 1059 /* 1060 * detect loss of pipe read side, issue SIGPIPE if lost. 1061 */ 1062 if (wpipe->pipe_present != PIPE_ACTIVE || 1063 (wpipe->pipe_state & PIPE_EOF)) { 1064 pipeunlock(wpipe); 1065 PIPE_UNLOCK(rpipe); 1066 return (EPIPE); 1067 } 1068 #ifdef MAC 1069 error = mac_pipe_check_write(active_cred, wpipe->pipe_pair); 1070 if (error) { 1071 pipeunlock(wpipe); 1072 PIPE_UNLOCK(rpipe); 1073 return (error); 1074 } 1075 #endif 1076 ++wpipe->pipe_busy; 1077 1078 /* Choose a larger size if it's advantageous */ 1079 desiredsize = max(SMALL_PIPE_SIZE, wpipe->pipe_buffer.size); 1080 while (desiredsize < wpipe->pipe_buffer.cnt + uio->uio_resid) { 1081 if (piperesizeallowed != 1) 1082 break; 1083 if (amountpipekva > maxpipekva / 2) 1084 break; 1085 if (desiredsize == BIG_PIPE_SIZE) 1086 break; 1087 desiredsize = desiredsize * 2; 1088 } 1089 1090 /* Choose a smaller size if we're in a OOM situation */ 1091 if ((amountpipekva > (3 * maxpipekva) / 4) && 1092 (wpipe->pipe_buffer.size > SMALL_PIPE_SIZE) && 1093 (wpipe->pipe_buffer.cnt <= SMALL_PIPE_SIZE) && 1094 (piperesizeallowed == 1)) 1095 desiredsize = SMALL_PIPE_SIZE; 1096 1097 /* Resize if the above determined that a new size was necessary */ 1098 if ((desiredsize != wpipe->pipe_buffer.size) && 1099 ((wpipe->pipe_state & PIPE_DIRECTW) == 0)) { 1100 PIPE_UNLOCK(wpipe); 1101 pipespace(wpipe, desiredsize); 1102 PIPE_LOCK(wpipe); 1103 } 1104 if (wpipe->pipe_buffer.size == 0) { 1105 /* 1106 * This can only happen for reverse direction use of pipes 1107 * in a complete OOM situation. 1108 */ 1109 error = ENOMEM; 1110 --wpipe->pipe_busy; 1111 pipeunlock(wpipe); 1112 PIPE_UNLOCK(wpipe); 1113 return (error); 1114 } 1115 1116 pipeunlock(wpipe); 1117 1118 orig_resid = uio->uio_resid; 1119 1120 while (uio->uio_resid) { 1121 int space; 1122 1123 pipelock(wpipe, 0); 1124 if (wpipe->pipe_state & PIPE_EOF) { 1125 pipeunlock(wpipe); 1126 error = EPIPE; 1127 break; 1128 } 1129 #ifndef PIPE_NODIRECT 1130 /* 1131 * If the transfer is large, we can gain performance if 1132 * we do process-to-process copies directly. 1133 * If the write is non-blocking, we don't use the 1134 * direct write mechanism. 1135 * 1136 * The direct write mechanism will detect the reader going 1137 * away on us. 1138 */ 1139 if (uio->uio_segflg == UIO_USERSPACE && 1140 uio->uio_iov->iov_len >= PIPE_MINDIRECT && 1141 wpipe->pipe_buffer.size >= PIPE_MINDIRECT && 1142 (fp->f_flag & FNONBLOCK) == 0) { 1143 pipeunlock(wpipe); 1144 error = pipe_direct_write(wpipe, uio); 1145 if (error) 1146 break; 1147 continue; 1148 } 1149 #endif 1150 1151 /* 1152 * Pipe buffered writes cannot be coincidental with 1153 * direct writes. We wait until the currently executing 1154 * direct write is completed before we start filling the 1155 * pipe buffer. We break out if a signal occurs or the 1156 * reader goes away. 1157 */ 1158 if (wpipe->pipe_state & PIPE_DIRECTW) { 1159 if (wpipe->pipe_state & PIPE_WANTR) { 1160 wpipe->pipe_state &= ~PIPE_WANTR; 1161 wakeup(wpipe); 1162 } 1163 pipeselwakeup(wpipe); 1164 wpipe->pipe_state |= PIPE_WANTW; 1165 pipeunlock(wpipe); 1166 error = msleep(wpipe, PIPE_MTX(rpipe), PRIBIO | PCATCH, 1167 "pipbww", 0); 1168 if (error) 1169 break; 1170 else 1171 continue; 1172 } 1173 1174 space = wpipe->pipe_buffer.size - wpipe->pipe_buffer.cnt; 1175 1176 /* Writes of size <= PIPE_BUF must be atomic. */ 1177 if ((space < uio->uio_resid) && (orig_resid <= PIPE_BUF)) 1178 space = 0; 1179 1180 if (space > 0) { 1181 int size; /* Transfer size */ 1182 int segsize; /* first segment to transfer */ 1183 1184 /* 1185 * Transfer size is minimum of uio transfer 1186 * and free space in pipe buffer. 1187 */ 1188 if (space > uio->uio_resid) 1189 size = uio->uio_resid; 1190 else 1191 size = space; 1192 /* 1193 * First segment to transfer is minimum of 1194 * transfer size and contiguous space in 1195 * pipe buffer. If first segment to transfer 1196 * is less than the transfer size, we've got 1197 * a wraparound in the buffer. 1198 */ 1199 segsize = wpipe->pipe_buffer.size - 1200 wpipe->pipe_buffer.in; 1201 if (segsize > size) 1202 segsize = size; 1203 1204 /* Transfer first segment */ 1205 1206 PIPE_UNLOCK(rpipe); 1207 error = uiomove(&wpipe->pipe_buffer.buffer[wpipe->pipe_buffer.in], 1208 segsize, uio); 1209 PIPE_LOCK(rpipe); 1210 1211 if (error == 0 && segsize < size) { 1212 KASSERT(wpipe->pipe_buffer.in + segsize == 1213 wpipe->pipe_buffer.size, 1214 ("Pipe buffer wraparound disappeared")); 1215 /* 1216 * Transfer remaining part now, to 1217 * support atomic writes. Wraparound 1218 * happened. 1219 */ 1220 1221 PIPE_UNLOCK(rpipe); 1222 error = uiomove( 1223 &wpipe->pipe_buffer.buffer[0], 1224 size - segsize, uio); 1225 PIPE_LOCK(rpipe); 1226 } 1227 if (error == 0) { 1228 wpipe->pipe_buffer.in += size; 1229 if (wpipe->pipe_buffer.in >= 1230 wpipe->pipe_buffer.size) { 1231 KASSERT(wpipe->pipe_buffer.in == 1232 size - segsize + 1233 wpipe->pipe_buffer.size, 1234 ("Expected wraparound bad")); 1235 wpipe->pipe_buffer.in = size - segsize; 1236 } 1237 1238 wpipe->pipe_buffer.cnt += size; 1239 KASSERT(wpipe->pipe_buffer.cnt <= 1240 wpipe->pipe_buffer.size, 1241 ("Pipe buffer overflow")); 1242 } 1243 pipeunlock(wpipe); 1244 if (error != 0) 1245 break; 1246 } else { 1247 /* 1248 * If the "read-side" has been blocked, wake it up now. 1249 */ 1250 if (wpipe->pipe_state & PIPE_WANTR) { 1251 wpipe->pipe_state &= ~PIPE_WANTR; 1252 wakeup(wpipe); 1253 } 1254 1255 /* 1256 * don't block on non-blocking I/O 1257 */ 1258 if (fp->f_flag & FNONBLOCK) { 1259 error = EAGAIN; 1260 pipeunlock(wpipe); 1261 break; 1262 } 1263 1264 /* 1265 * We have no more space and have something to offer, 1266 * wake up select/poll. 1267 */ 1268 pipeselwakeup(wpipe); 1269 1270 wpipe->pipe_state |= PIPE_WANTW; 1271 pipeunlock(wpipe); 1272 error = msleep(wpipe, PIPE_MTX(rpipe), 1273 PRIBIO | PCATCH, "pipewr", 0); 1274 if (error != 0) 1275 break; 1276 } 1277 } 1278 1279 pipelock(wpipe, 0); 1280 --wpipe->pipe_busy; 1281 1282 if ((wpipe->pipe_busy == 0) && (wpipe->pipe_state & PIPE_WANT)) { 1283 wpipe->pipe_state &= ~(PIPE_WANT | PIPE_WANTR); 1284 wakeup(wpipe); 1285 } else if (wpipe->pipe_buffer.cnt > 0) { 1286 /* 1287 * If we have put any characters in the buffer, we wake up 1288 * the reader. 1289 */ 1290 if (wpipe->pipe_state & PIPE_WANTR) { 1291 wpipe->pipe_state &= ~PIPE_WANTR; 1292 wakeup(wpipe); 1293 } 1294 } 1295 1296 /* 1297 * Don't return EPIPE if any byte was written. 1298 * EINTR and other interrupts are handled by generic I/O layer. 1299 * Do not pretend that I/O succeeded for obvious user error 1300 * like EFAULT. 1301 */ 1302 if (uio->uio_resid != orig_resid && error == EPIPE) 1303 error = 0; 1304 1305 if (error == 0) 1306 vfs_timestamp(&wpipe->pipe_mtime); 1307 1308 /* 1309 * We have something to offer, 1310 * wake up select/poll. 1311 */ 1312 if (wpipe->pipe_buffer.cnt) 1313 pipeselwakeup(wpipe); 1314 1315 pipeunlock(wpipe); 1316 PIPE_UNLOCK(rpipe); 1317 return (error); 1318 } 1319 1320 /* ARGSUSED */ 1321 static int 1322 pipe_truncate(fp, length, active_cred, td) 1323 struct file *fp; 1324 off_t length; 1325 struct ucred *active_cred; 1326 struct thread *td; 1327 { 1328 struct pipe *cpipe; 1329 int error; 1330 1331 cpipe = fp->f_data; 1332 if (cpipe->pipe_state & PIPE_NAMED) 1333 error = vnops.fo_truncate(fp, length, active_cred, td); 1334 else 1335 error = invfo_truncate(fp, length, active_cred, td); 1336 return (error); 1337 } 1338 1339 /* 1340 * we implement a very minimal set of ioctls for compatibility with sockets. 1341 */ 1342 static int 1343 pipe_ioctl(fp, cmd, data, active_cred, td) 1344 struct file *fp; 1345 u_long cmd; 1346 void *data; 1347 struct ucred *active_cred; 1348 struct thread *td; 1349 { 1350 struct pipe *mpipe = fp->f_data; 1351 int error; 1352 1353 PIPE_LOCK(mpipe); 1354 1355 #ifdef MAC 1356 error = mac_pipe_check_ioctl(active_cred, mpipe->pipe_pair, cmd, data); 1357 if (error) { 1358 PIPE_UNLOCK(mpipe); 1359 return (error); 1360 } 1361 #endif 1362 1363 error = 0; 1364 switch (cmd) { 1365 1366 case FIONBIO: 1367 break; 1368 1369 case FIOASYNC: 1370 if (*(int *)data) { 1371 mpipe->pipe_state |= PIPE_ASYNC; 1372 } else { 1373 mpipe->pipe_state &= ~PIPE_ASYNC; 1374 } 1375 break; 1376 1377 case FIONREAD: 1378 if (!(fp->f_flag & FREAD)) { 1379 *(int *)data = 0; 1380 PIPE_UNLOCK(mpipe); 1381 return (0); 1382 } 1383 if (mpipe->pipe_state & PIPE_DIRECTW) 1384 *(int *)data = mpipe->pipe_map.cnt; 1385 else 1386 *(int *)data = mpipe->pipe_buffer.cnt; 1387 break; 1388 1389 case FIOSETOWN: 1390 PIPE_UNLOCK(mpipe); 1391 error = fsetown(*(int *)data, &mpipe->pipe_sigio); 1392 goto out_unlocked; 1393 1394 case FIOGETOWN: 1395 *(int *)data = fgetown(&mpipe->pipe_sigio); 1396 break; 1397 1398 /* This is deprecated, FIOSETOWN should be used instead. */ 1399 case TIOCSPGRP: 1400 PIPE_UNLOCK(mpipe); 1401 error = fsetown(-(*(int *)data), &mpipe->pipe_sigio); 1402 goto out_unlocked; 1403 1404 /* This is deprecated, FIOGETOWN should be used instead. */ 1405 case TIOCGPGRP: 1406 *(int *)data = -fgetown(&mpipe->pipe_sigio); 1407 break; 1408 1409 default: 1410 error = ENOTTY; 1411 break; 1412 } 1413 PIPE_UNLOCK(mpipe); 1414 out_unlocked: 1415 return (error); 1416 } 1417 1418 static int 1419 pipe_poll(fp, events, active_cred, td) 1420 struct file *fp; 1421 int events; 1422 struct ucred *active_cred; 1423 struct thread *td; 1424 { 1425 struct pipe *rpipe; 1426 struct pipe *wpipe; 1427 int levents, revents; 1428 #ifdef MAC 1429 int error; 1430 #endif 1431 1432 revents = 0; 1433 rpipe = fp->f_data; 1434 wpipe = PIPE_PEER(rpipe); 1435 PIPE_LOCK(rpipe); 1436 #ifdef MAC 1437 error = mac_pipe_check_poll(active_cred, rpipe->pipe_pair); 1438 if (error) 1439 goto locked_error; 1440 #endif 1441 if (fp->f_flag & FREAD && events & (POLLIN | POLLRDNORM)) 1442 if ((rpipe->pipe_state & PIPE_DIRECTW) || 1443 (rpipe->pipe_buffer.cnt > 0)) 1444 revents |= events & (POLLIN | POLLRDNORM); 1445 1446 if (fp->f_flag & FWRITE && events & (POLLOUT | POLLWRNORM)) 1447 if (wpipe->pipe_present != PIPE_ACTIVE || 1448 (wpipe->pipe_state & PIPE_EOF) || 1449 (((wpipe->pipe_state & PIPE_DIRECTW) == 0) && 1450 ((wpipe->pipe_buffer.size - wpipe->pipe_buffer.cnt) >= PIPE_BUF || 1451 wpipe->pipe_buffer.size == 0))) 1452 revents |= events & (POLLOUT | POLLWRNORM); 1453 1454 levents = events & 1455 (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND); 1456 if (rpipe->pipe_state & PIPE_NAMED && fp->f_flag & FREAD && levents && 1457 fp->f_seqcount == rpipe->pipe_wgen) 1458 events |= POLLINIGNEOF; 1459 1460 if ((events & POLLINIGNEOF) == 0) { 1461 if (rpipe->pipe_state & PIPE_EOF) { 1462 revents |= (events & (POLLIN | POLLRDNORM)); 1463 if (wpipe->pipe_present != PIPE_ACTIVE || 1464 (wpipe->pipe_state & PIPE_EOF)) 1465 revents |= POLLHUP; 1466 } 1467 } 1468 1469 if (revents == 0) { 1470 if (fp->f_flag & FREAD && events & (POLLIN | POLLRDNORM)) { 1471 selrecord(td, &rpipe->pipe_sel); 1472 if (SEL_WAITING(&rpipe->pipe_sel)) 1473 rpipe->pipe_state |= PIPE_SEL; 1474 } 1475 1476 if (fp->f_flag & FWRITE && events & (POLLOUT | POLLWRNORM)) { 1477 selrecord(td, &wpipe->pipe_sel); 1478 if (SEL_WAITING(&wpipe->pipe_sel)) 1479 wpipe->pipe_state |= PIPE_SEL; 1480 } 1481 } 1482 #ifdef MAC 1483 locked_error: 1484 #endif 1485 PIPE_UNLOCK(rpipe); 1486 1487 return (revents); 1488 } 1489 1490 /* 1491 * We shouldn't need locks here as we're doing a read and this should 1492 * be a natural race. 1493 */ 1494 static int 1495 pipe_stat(fp, ub, active_cred, td) 1496 struct file *fp; 1497 struct stat *ub; 1498 struct ucred *active_cred; 1499 struct thread *td; 1500 { 1501 struct pipe *pipe; 1502 int new_unr; 1503 #ifdef MAC 1504 int error; 1505 #endif 1506 1507 pipe = fp->f_data; 1508 PIPE_LOCK(pipe); 1509 #ifdef MAC 1510 error = mac_pipe_check_stat(active_cred, pipe->pipe_pair); 1511 if (error) { 1512 PIPE_UNLOCK(pipe); 1513 return (error); 1514 } 1515 #endif 1516 1517 /* For named pipes ask the underlying filesystem. */ 1518 if (pipe->pipe_state & PIPE_NAMED) { 1519 PIPE_UNLOCK(pipe); 1520 return (vnops.fo_stat(fp, ub, active_cred, td)); 1521 } 1522 1523 /* 1524 * Lazily allocate an inode number for the pipe. Most pipe 1525 * users do not call fstat(2) on the pipe, which means that 1526 * postponing the inode allocation until it is must be 1527 * returned to userland is useful. If alloc_unr failed, 1528 * assign st_ino zero instead of returning an error. 1529 * Special pipe_ino values: 1530 * -1 - not yet initialized; 1531 * 0 - alloc_unr failed, return 0 as st_ino forever. 1532 */ 1533 if (pipe->pipe_ino == (ino_t)-1) { 1534 new_unr = alloc_unr(pipeino_unr); 1535 if (new_unr != -1) 1536 pipe->pipe_ino = new_unr; 1537 else 1538 pipe->pipe_ino = 0; 1539 } 1540 PIPE_UNLOCK(pipe); 1541 1542 bzero(ub, sizeof(*ub)); 1543 ub->st_mode = S_IFIFO; 1544 ub->st_blksize = PAGE_SIZE; 1545 if (pipe->pipe_state & PIPE_DIRECTW) 1546 ub->st_size = pipe->pipe_map.cnt; 1547 else 1548 ub->st_size = pipe->pipe_buffer.cnt; 1549 ub->st_blocks = howmany(ub->st_size, ub->st_blksize); 1550 ub->st_atim = pipe->pipe_atime; 1551 ub->st_mtim = pipe->pipe_mtime; 1552 ub->st_ctim = pipe->pipe_ctime; 1553 ub->st_uid = fp->f_cred->cr_uid; 1554 ub->st_gid = fp->f_cred->cr_gid; 1555 ub->st_dev = pipedev_ino; 1556 ub->st_ino = pipe->pipe_ino; 1557 /* 1558 * Left as 0: st_nlink, st_rdev, st_flags, st_gen. 1559 */ 1560 return (0); 1561 } 1562 1563 /* ARGSUSED */ 1564 static int 1565 pipe_close(fp, td) 1566 struct file *fp; 1567 struct thread *td; 1568 { 1569 1570 if (fp->f_vnode != NULL) 1571 return vnops.fo_close(fp, td); 1572 fp->f_ops = &badfileops; 1573 pipe_dtor(fp->f_data); 1574 fp->f_data = NULL; 1575 return (0); 1576 } 1577 1578 static int 1579 pipe_chmod(struct file *fp, mode_t mode, struct ucred *active_cred, struct thread *td) 1580 { 1581 struct pipe *cpipe; 1582 int error; 1583 1584 cpipe = fp->f_data; 1585 if (cpipe->pipe_state & PIPE_NAMED) 1586 error = vn_chmod(fp, mode, active_cred, td); 1587 else 1588 error = invfo_chmod(fp, mode, active_cred, td); 1589 return (error); 1590 } 1591 1592 static int 1593 pipe_chown(fp, uid, gid, active_cred, td) 1594 struct file *fp; 1595 uid_t uid; 1596 gid_t gid; 1597 struct ucred *active_cred; 1598 struct thread *td; 1599 { 1600 struct pipe *cpipe; 1601 int error; 1602 1603 cpipe = fp->f_data; 1604 if (cpipe->pipe_state & PIPE_NAMED) 1605 error = vn_chown(fp, uid, gid, active_cred, td); 1606 else 1607 error = invfo_chown(fp, uid, gid, active_cred, td); 1608 return (error); 1609 } 1610 1611 static int 1612 pipe_fill_kinfo(struct file *fp, struct kinfo_file *kif, struct filedesc *fdp) 1613 { 1614 struct pipe *pi; 1615 1616 if (fp->f_type == DTYPE_FIFO) 1617 return (vn_fill_kinfo(fp, kif, fdp)); 1618 kif->kf_type = KF_TYPE_PIPE; 1619 pi = fp->f_data; 1620 kif->kf_un.kf_pipe.kf_pipe_addr = (uintptr_t)pi; 1621 kif->kf_un.kf_pipe.kf_pipe_peer = (uintptr_t)pi->pipe_peer; 1622 kif->kf_un.kf_pipe.kf_pipe_buffer_cnt = pi->pipe_buffer.cnt; 1623 return (0); 1624 } 1625 1626 static void 1627 pipe_free_kmem(cpipe) 1628 struct pipe *cpipe; 1629 { 1630 1631 KASSERT(!mtx_owned(PIPE_MTX(cpipe)), 1632 ("pipe_free_kmem: pipe mutex locked")); 1633 1634 if (cpipe->pipe_buffer.buffer != NULL) { 1635 atomic_subtract_long(&amountpipekva, cpipe->pipe_buffer.size); 1636 vm_map_remove(pipe_map, 1637 (vm_offset_t)cpipe->pipe_buffer.buffer, 1638 (vm_offset_t)cpipe->pipe_buffer.buffer + cpipe->pipe_buffer.size); 1639 cpipe->pipe_buffer.buffer = NULL; 1640 } 1641 #ifndef PIPE_NODIRECT 1642 { 1643 cpipe->pipe_map.cnt = 0; 1644 cpipe->pipe_map.pos = 0; 1645 cpipe->pipe_map.npages = 0; 1646 } 1647 #endif 1648 } 1649 1650 /* 1651 * shutdown the pipe 1652 */ 1653 static void 1654 pipeclose(cpipe) 1655 struct pipe *cpipe; 1656 { 1657 struct pipepair *pp; 1658 struct pipe *ppipe; 1659 1660 KASSERT(cpipe != NULL, ("pipeclose: cpipe == NULL")); 1661 1662 PIPE_LOCK(cpipe); 1663 pipelock(cpipe, 0); 1664 pp = cpipe->pipe_pair; 1665 1666 pipeselwakeup(cpipe); 1667 1668 /* 1669 * If the other side is blocked, wake it up saying that 1670 * we want to close it down. 1671 */ 1672 cpipe->pipe_state |= PIPE_EOF; 1673 while (cpipe->pipe_busy) { 1674 wakeup(cpipe); 1675 cpipe->pipe_state |= PIPE_WANT; 1676 pipeunlock(cpipe); 1677 msleep(cpipe, PIPE_MTX(cpipe), PRIBIO, "pipecl", 0); 1678 pipelock(cpipe, 0); 1679 } 1680 1681 1682 /* 1683 * Disconnect from peer, if any. 1684 */ 1685 ppipe = cpipe->pipe_peer; 1686 if (ppipe->pipe_present == PIPE_ACTIVE) { 1687 pipeselwakeup(ppipe); 1688 1689 ppipe->pipe_state |= PIPE_EOF; 1690 wakeup(ppipe); 1691 KNOTE_LOCKED(&ppipe->pipe_sel.si_note, 0); 1692 } 1693 1694 /* 1695 * Mark this endpoint as free. Release kmem resources. We 1696 * don't mark this endpoint as unused until we've finished 1697 * doing that, or the pipe might disappear out from under 1698 * us. 1699 */ 1700 PIPE_UNLOCK(cpipe); 1701 pipe_free_kmem(cpipe); 1702 PIPE_LOCK(cpipe); 1703 cpipe->pipe_present = PIPE_CLOSING; 1704 pipeunlock(cpipe); 1705 1706 /* 1707 * knlist_clear() may sleep dropping the PIPE_MTX. Set the 1708 * PIPE_FINALIZED, that allows other end to free the 1709 * pipe_pair, only after the knotes are completely dismantled. 1710 */ 1711 knlist_clear(&cpipe->pipe_sel.si_note, 1); 1712 cpipe->pipe_present = PIPE_FINALIZED; 1713 seldrain(&cpipe->pipe_sel); 1714 knlist_destroy(&cpipe->pipe_sel.si_note); 1715 1716 /* 1717 * If both endpoints are now closed, release the memory for the 1718 * pipe pair. If not, unlock. 1719 */ 1720 if (ppipe->pipe_present == PIPE_FINALIZED) { 1721 PIPE_UNLOCK(cpipe); 1722 #ifdef MAC 1723 mac_pipe_destroy(pp); 1724 #endif 1725 uma_zfree(pipe_zone, cpipe->pipe_pair); 1726 } else 1727 PIPE_UNLOCK(cpipe); 1728 } 1729 1730 /*ARGSUSED*/ 1731 static int 1732 pipe_kqfilter(struct file *fp, struct knote *kn) 1733 { 1734 struct pipe *cpipe; 1735 1736 /* 1737 * If a filter is requested that is not supported by this file 1738 * descriptor, don't return an error, but also don't ever generate an 1739 * event. 1740 */ 1741 if ((kn->kn_filter == EVFILT_READ) && !(fp->f_flag & FREAD)) { 1742 kn->kn_fop = &pipe_nfiltops; 1743 return (0); 1744 } 1745 if ((kn->kn_filter == EVFILT_WRITE) && !(fp->f_flag & FWRITE)) { 1746 kn->kn_fop = &pipe_nfiltops; 1747 return (0); 1748 } 1749 cpipe = fp->f_data; 1750 PIPE_LOCK(cpipe); 1751 switch (kn->kn_filter) { 1752 case EVFILT_READ: 1753 kn->kn_fop = &pipe_rfiltops; 1754 break; 1755 case EVFILT_WRITE: 1756 kn->kn_fop = &pipe_wfiltops; 1757 if (cpipe->pipe_peer->pipe_present != PIPE_ACTIVE) { 1758 /* other end of pipe has been closed */ 1759 PIPE_UNLOCK(cpipe); 1760 return (EPIPE); 1761 } 1762 cpipe = PIPE_PEER(cpipe); 1763 break; 1764 default: 1765 PIPE_UNLOCK(cpipe); 1766 return (EINVAL); 1767 } 1768 1769 kn->kn_hook = cpipe; 1770 knlist_add(&cpipe->pipe_sel.si_note, kn, 1); 1771 PIPE_UNLOCK(cpipe); 1772 return (0); 1773 } 1774 1775 static void 1776 filt_pipedetach(struct knote *kn) 1777 { 1778 struct pipe *cpipe = kn->kn_hook; 1779 1780 PIPE_LOCK(cpipe); 1781 knlist_remove(&cpipe->pipe_sel.si_note, kn, 1); 1782 PIPE_UNLOCK(cpipe); 1783 } 1784 1785 /*ARGSUSED*/ 1786 static int 1787 filt_piperead(struct knote *kn, long hint) 1788 { 1789 struct pipe *rpipe = kn->kn_hook; 1790 struct pipe *wpipe = rpipe->pipe_peer; 1791 int ret; 1792 1793 PIPE_LOCK_ASSERT(rpipe, MA_OWNED); 1794 kn->kn_data = rpipe->pipe_buffer.cnt; 1795 if ((kn->kn_data == 0) && (rpipe->pipe_state & PIPE_DIRECTW)) 1796 kn->kn_data = rpipe->pipe_map.cnt; 1797 1798 if ((rpipe->pipe_state & PIPE_EOF) || 1799 wpipe->pipe_present != PIPE_ACTIVE || 1800 (wpipe->pipe_state & PIPE_EOF)) { 1801 kn->kn_flags |= EV_EOF; 1802 return (1); 1803 } 1804 ret = kn->kn_data > 0; 1805 return ret; 1806 } 1807 1808 /*ARGSUSED*/ 1809 static int 1810 filt_pipewrite(struct knote *kn, long hint) 1811 { 1812 struct pipe *wpipe; 1813 1814 wpipe = kn->kn_hook; 1815 PIPE_LOCK_ASSERT(wpipe, MA_OWNED); 1816 if (wpipe->pipe_present != PIPE_ACTIVE || 1817 (wpipe->pipe_state & PIPE_EOF)) { 1818 kn->kn_data = 0; 1819 kn->kn_flags |= EV_EOF; 1820 return (1); 1821 } 1822 kn->kn_data = (wpipe->pipe_buffer.size > 0) ? 1823 (wpipe->pipe_buffer.size - wpipe->pipe_buffer.cnt) : PIPE_BUF; 1824 if (wpipe->pipe_state & PIPE_DIRECTW) 1825 kn->kn_data = 0; 1826 1827 return (kn->kn_data >= PIPE_BUF); 1828 } 1829 1830 static void 1831 filt_pipedetach_notsup(struct knote *kn) 1832 { 1833 1834 } 1835 1836 static int 1837 filt_pipenotsup(struct knote *kn, long hint) 1838 { 1839 1840 return (0); 1841 } 1842