vfs_extattr.c (193511) | vfs_extattr.c (195104) |
---|---|
1/*- 2 * Copyright (c) 1999-2001 Robert N. M. Watson 3 * All rights reserved. 4 * 5 * This software was developed by Robert Watson for the TrustedBSD Project. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 13 unchanged lines hidden (view full) --- 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1999-2001 Robert N. M. Watson 3 * All rights reserved. 4 * 5 * This software was developed by Robert Watson for the TrustedBSD Project. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 13 unchanged lines hidden (view full) --- 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sys/kern/vfs_extattr.c 193511 2009-06-05 14:55:22Z rwatson $"); | 30__FBSDID("$FreeBSD: head/sys/kern/vfs_extattr.c 195104 2009-06-27 13:58:44Z rwatson $"); |
31 32#include <sys/param.h> 33#include <sys/systm.h> 34#include <sys/lock.h> 35#include <sys/mount.h> 36#include <sys/mutex.h> 37#include <sys/sysproto.h> 38#include <sys/fcntl.h> --- 26 unchanged lines hidden (view full) --- 65 } */ *uap; 66{ 67 struct vnode *filename_vp; 68 struct nameidata nd; 69 struct mount *mp, *mp_writable; 70 char attrname[EXTATTR_MAXNAMELEN]; 71 int vfslocked, fnvfslocked, error; 72 | 31 32#include <sys/param.h> 33#include <sys/systm.h> 34#include <sys/lock.h> 35#include <sys/mount.h> 36#include <sys/mutex.h> 37#include <sys/sysproto.h> 38#include <sys/fcntl.h> --- 26 unchanged lines hidden (view full) --- 65 } */ *uap; 66{ 67 struct vnode *filename_vp; 68 struct nameidata nd; 69 struct mount *mp, *mp_writable; 70 char attrname[EXTATTR_MAXNAMELEN]; 71 int vfslocked, fnvfslocked, error; 72 |
73 AUDIT_ARG(cmd, uap->cmd); 74 AUDIT_ARG(value, uap->attrnamespace); | 73 AUDIT_ARG_CMD(uap->cmd); 74 AUDIT_ARG_VALUE(uap->attrnamespace); |
75 /* 76 * uap->attrname is not always defined. We check again later when we 77 * invoke the VFS call so as to pass in NULL there if needed. 78 */ 79 if (uap->attrname != NULL) { 80 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, 81 NULL); 82 if (error) 83 return (error); 84 } | 75 /* 76 * uap->attrname is not always defined. We check again later when we 77 * invoke the VFS call so as to pass in NULL there if needed. 78 */ 79 if (uap->attrname != NULL) { 80 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, 81 NULL); 82 if (error) 83 return (error); 84 } |
85 AUDIT_ARG(text, attrname); | 85 AUDIT_ARG_TEXT(attrname); |
86 87 vfslocked = fnvfslocked = 0; 88 mp = NULL; 89 filename_vp = NULL; 90 if (uap->filename != NULL) { 91 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE2, 92 UIO_USERSPACE, uap->filename, td); 93 error = namei(&nd); --- 124 unchanged lines hidden (view full) --- 218 void *data; 219 size_t nbytes; 220 } */ *uap; 221{ 222 struct file *fp; 223 char attrname[EXTATTR_MAXNAMELEN]; 224 int vfslocked, error; 225 | 86 87 vfslocked = fnvfslocked = 0; 88 mp = NULL; 89 filename_vp = NULL; 90 if (uap->filename != NULL) { 91 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE2, 92 UIO_USERSPACE, uap->filename, td); 93 error = namei(&nd); --- 124 unchanged lines hidden (view full) --- 218 void *data; 219 size_t nbytes; 220 } */ *uap; 221{ 222 struct file *fp; 223 char attrname[EXTATTR_MAXNAMELEN]; 224 int vfslocked, error; 225 |
226 AUDIT_ARG(fd, uap->fd); 227 AUDIT_ARG(value, uap->attrnamespace); | 226 AUDIT_ARG_FD(uap->fd); 227 AUDIT_ARG_VALUE(uap->attrnamespace); |
228 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 229 if (error) 230 return (error); | 228 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 229 if (error) 230 return (error); |
231 AUDIT_ARG(text, attrname); | 231 AUDIT_ARG_TEXT(attrname); |
232 233 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 234 if (error) 235 return (error); 236 237 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 238 error = extattr_set_vp(fp->f_vnode, uap->attrnamespace, 239 attrname, uap->data, uap->nbytes, td); --- 13 unchanged lines hidden (view full) --- 253 void *data; 254 size_t nbytes; 255 } */ *uap; 256{ 257 struct nameidata nd; 258 char attrname[EXTATTR_MAXNAMELEN]; 259 int vfslocked, error; 260 | 232 233 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 234 if (error) 235 return (error); 236 237 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 238 error = extattr_set_vp(fp->f_vnode, uap->attrnamespace, 239 attrname, uap->data, uap->nbytes, td); --- 13 unchanged lines hidden (view full) --- 253 void *data; 254 size_t nbytes; 255 } */ *uap; 256{ 257 struct nameidata nd; 258 char attrname[EXTATTR_MAXNAMELEN]; 259 int vfslocked, error; 260 |
261 AUDIT_ARG(value, uap->attrnamespace); | 261 AUDIT_ARG_VALUE(uap->attrnamespace); |
262 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 263 if (error) 264 return (error); | 262 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 263 if (error) 264 return (error); |
265 AUDIT_ARG(text, attrname); | 265 AUDIT_ARG_TEXT(attrname); |
266 267 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 268 uap->path, td); 269 error = namei(&nd); 270 if (error) 271 return (error); 272 NDFREE(&nd, NDF_ONLY_PNBUF); 273 --- 16 unchanged lines hidden (view full) --- 290 void *data; 291 size_t nbytes; 292 } */ *uap; 293{ 294 struct nameidata nd; 295 char attrname[EXTATTR_MAXNAMELEN]; 296 int vfslocked, error; 297 | 266 267 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 268 uap->path, td); 269 error = namei(&nd); 270 if (error) 271 return (error); 272 NDFREE(&nd, NDF_ONLY_PNBUF); 273 --- 16 unchanged lines hidden (view full) --- 290 void *data; 291 size_t nbytes; 292 } */ *uap; 293{ 294 struct nameidata nd; 295 char attrname[EXTATTR_MAXNAMELEN]; 296 int vfslocked, error; 297 |
298 AUDIT_ARG(value, uap->attrnamespace); | 298 AUDIT_ARG_VALUE(uap->attrnamespace); |
299 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 300 if (error) 301 return (error); | 299 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 300 if (error) 301 return (error); |
302 AUDIT_ARG(text, attrname); | 302 AUDIT_ARG_TEXT(attrname); |
303 304 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 305 uap->path, td); 306 error = namei(&nd); 307 if (error) 308 return (error); 309 NDFREE(&nd, NDF_ONLY_PNBUF); 310 --- 87 unchanged lines hidden (view full) --- 398 void *data; 399 size_t nbytes; 400 } */ *uap; 401{ 402 struct file *fp; 403 char attrname[EXTATTR_MAXNAMELEN]; 404 int vfslocked, error; 405 | 303 304 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 305 uap->path, td); 306 error = namei(&nd); 307 if (error) 308 return (error); 309 NDFREE(&nd, NDF_ONLY_PNBUF); 310 --- 87 unchanged lines hidden (view full) --- 398 void *data; 399 size_t nbytes; 400 } */ *uap; 401{ 402 struct file *fp; 403 char attrname[EXTATTR_MAXNAMELEN]; 404 int vfslocked, error; 405 |
406 AUDIT_ARG(fd, uap->fd); 407 AUDIT_ARG(value, uap->attrnamespace); | 406 AUDIT_ARG_FD(uap->fd); 407 AUDIT_ARG_VALUE(uap->attrnamespace); |
408 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 409 if (error) 410 return (error); | 408 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 409 if (error) 410 return (error); |
411 AUDIT_ARG(text, attrname); | 411 AUDIT_ARG_TEXT(attrname); |
412 413 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 414 if (error) 415 return (error); 416 417 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 418 error = extattr_get_vp(fp->f_vnode, uap->attrnamespace, 419 attrname, uap->data, uap->nbytes, td); --- 13 unchanged lines hidden (view full) --- 433 void *data; 434 size_t nbytes; 435 } */ *uap; 436{ 437 struct nameidata nd; 438 char attrname[EXTATTR_MAXNAMELEN]; 439 int vfslocked, error; 440 | 412 413 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 414 if (error) 415 return (error); 416 417 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 418 error = extattr_get_vp(fp->f_vnode, uap->attrnamespace, 419 attrname, uap->data, uap->nbytes, td); --- 13 unchanged lines hidden (view full) --- 433 void *data; 434 size_t nbytes; 435 } */ *uap; 436{ 437 struct nameidata nd; 438 char attrname[EXTATTR_MAXNAMELEN]; 439 int vfslocked, error; 440 |
441 AUDIT_ARG(value, uap->attrnamespace); | 441 AUDIT_ARG_VALUE(uap->attrnamespace); |
442 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 443 if (error) 444 return (error); | 442 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 443 if (error) 444 return (error); |
445 AUDIT_ARG(text, attrname); | 445 AUDIT_ARG_TEXT(attrname); |
446 447 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 448 uap->path, td); 449 error = namei(&nd); 450 if (error) 451 return (error); 452 NDFREE(&nd, NDF_ONLY_PNBUF); 453 --- 16 unchanged lines hidden (view full) --- 470 void *data; 471 size_t nbytes; 472 } */ *uap; 473{ 474 struct nameidata nd; 475 char attrname[EXTATTR_MAXNAMELEN]; 476 int vfslocked, error; 477 | 446 447 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 448 uap->path, td); 449 error = namei(&nd); 450 if (error) 451 return (error); 452 NDFREE(&nd, NDF_ONLY_PNBUF); 453 --- 16 unchanged lines hidden (view full) --- 470 void *data; 471 size_t nbytes; 472 } */ *uap; 473{ 474 struct nameidata nd; 475 char attrname[EXTATTR_MAXNAMELEN]; 476 int vfslocked, error; 477 |
478 AUDIT_ARG(value, uap->attrnamespace); | 478 AUDIT_ARG_VALUE(uap->attrnamespace); |
479 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 480 if (error) 481 return (error); | 479 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 480 if (error) 481 return (error); |
482 AUDIT_ARG(text, attrname); | 482 AUDIT_ARG_TEXT(attrname); |
483 484 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 485 uap->path, td); 486 error = namei(&nd); 487 if (error) 488 return (error); 489 NDFREE(&nd, NDF_ONLY_PNBUF); 490 --- 57 unchanged lines hidden (view full) --- 548 int attrnamespace; 549 const char *attrname; 550 } */ *uap; 551{ 552 struct file *fp; 553 char attrname[EXTATTR_MAXNAMELEN]; 554 int vfslocked, error; 555 | 483 484 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 485 uap->path, td); 486 error = namei(&nd); 487 if (error) 488 return (error); 489 NDFREE(&nd, NDF_ONLY_PNBUF); 490 --- 57 unchanged lines hidden (view full) --- 548 int attrnamespace; 549 const char *attrname; 550 } */ *uap; 551{ 552 struct file *fp; 553 char attrname[EXTATTR_MAXNAMELEN]; 554 int vfslocked, error; 555 |
556 AUDIT_ARG(fd, uap->fd); 557 AUDIT_ARG(value, uap->attrnamespace); | 556 AUDIT_ARG_FD(uap->fd); 557 AUDIT_ARG_VALUE(uap->attrnamespace); |
558 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 559 if (error) 560 return (error); | 558 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 559 if (error) 560 return (error); |
561 AUDIT_ARG(text, attrname); | 561 AUDIT_ARG_TEXT(attrname); |
562 563 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 564 if (error) 565 return (error); 566 567 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 568 error = extattr_delete_vp(fp->f_vnode, uap->attrnamespace, 569 attrname, td); --- 10 unchanged lines hidden (view full) --- 580 int attrnamespace; 581 const char *attrname; 582 } */ *uap; 583{ 584 struct nameidata nd; 585 char attrname[EXTATTR_MAXNAMELEN]; 586 int vfslocked, error; 587 | 562 563 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 564 if (error) 565 return (error); 566 567 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 568 error = extattr_delete_vp(fp->f_vnode, uap->attrnamespace, 569 attrname, td); --- 10 unchanged lines hidden (view full) --- 580 int attrnamespace; 581 const char *attrname; 582 } */ *uap; 583{ 584 struct nameidata nd; 585 char attrname[EXTATTR_MAXNAMELEN]; 586 int vfslocked, error; 587 |
588 AUDIT_ARG(value, uap->attrnamespace); | 588 AUDIT_ARG_VALUE(uap->attrnamespace); |
589 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 590 if (error) 591 return(error); | 589 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 590 if (error) 591 return(error); |
592 AUDIT_ARG(text, attrname); | 592 AUDIT_ARG_TEXT(attrname); |
593 594 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 595 uap->path, td); 596 error = namei(&nd); 597 if (error) 598 return(error); 599 NDFREE(&nd, NDF_ONLY_PNBUF); 600 --- 12 unchanged lines hidden (view full) --- 613 int attrnamespace; 614 const char *attrname; 615 } */ *uap; 616{ 617 struct nameidata nd; 618 char attrname[EXTATTR_MAXNAMELEN]; 619 int vfslocked, error; 620 | 593 594 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 595 uap->path, td); 596 error = namei(&nd); 597 if (error) 598 return(error); 599 NDFREE(&nd, NDF_ONLY_PNBUF); 600 --- 12 unchanged lines hidden (view full) --- 613 int attrnamespace; 614 const char *attrname; 615 } */ *uap; 616{ 617 struct nameidata nd; 618 char attrname[EXTATTR_MAXNAMELEN]; 619 int vfslocked, error; 620 |
621 AUDIT_ARG(value, uap->attrnamespace); | 621 AUDIT_ARG_VALUE(uap->attrnamespace); |
622 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 623 if (error) 624 return(error); | 622 error = copyinstr(uap->attrname, attrname, EXTATTR_MAXNAMELEN, NULL); 623 if (error) 624 return(error); |
625 AUDIT_ARG(text, attrname); | 625 AUDIT_ARG_TEXT(attrname); |
626 627 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 628 uap->path, td); 629 error = namei(&nd); 630 if (error) 631 return(error); 632 NDFREE(&nd, NDF_ONLY_PNBUF); 633 --- 78 unchanged lines hidden (view full) --- 712 int attrnamespace; 713 void *data; 714 size_t nbytes; 715 } */ *uap; 716{ 717 struct file *fp; 718 int vfslocked, error; 719 | 626 627 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 628 uap->path, td); 629 error = namei(&nd); 630 if (error) 631 return(error); 632 NDFREE(&nd, NDF_ONLY_PNBUF); 633 --- 78 unchanged lines hidden (view full) --- 712 int attrnamespace; 713 void *data; 714 size_t nbytes; 715 } */ *uap; 716{ 717 struct file *fp; 718 int vfslocked, error; 719 |
720 AUDIT_ARG(fd, uap->fd); 721 AUDIT_ARG(value, uap->attrnamespace); | 720 AUDIT_ARG_FD(uap->fd); 721 AUDIT_ARG_VALUE(uap->attrnamespace); |
722 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 723 if (error) 724 return (error); 725 726 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 727 error = extattr_list_vp(fp->f_vnode, uap->attrnamespace, uap->data, 728 uap->nbytes, td); 729 --- 10 unchanged lines hidden (view full) --- 740 int attrnamespace; 741 void *data; 742 size_t nbytes; 743 } */ *uap; 744{ 745 struct nameidata nd; 746 int vfslocked, error; 747 | 722 error = getvnode(td->td_proc->p_fd, uap->fd, &fp); 723 if (error) 724 return (error); 725 726 vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount); 727 error = extattr_list_vp(fp->f_vnode, uap->attrnamespace, uap->data, 728 uap->nbytes, td); 729 --- 10 unchanged lines hidden (view full) --- 740 int attrnamespace; 741 void *data; 742 size_t nbytes; 743 } */ *uap; 744{ 745 struct nameidata nd; 746 int vfslocked, error; 747 |
748 AUDIT_ARG(value, uap->attrnamespace); | 748 AUDIT_ARG_VALUE(uap->attrnamespace); |
749 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 750 uap->path, td); 751 error = namei(&nd); 752 if (error) 753 return (error); 754 NDFREE(&nd, NDF_ONLY_PNBUF); 755 756 vfslocked = NDHASGIANT(&nd); --- 13 unchanged lines hidden (view full) --- 770 int attrnamespace; 771 void *data; 772 size_t nbytes; 773 } */ *uap; 774{ 775 struct nameidata nd; 776 int vfslocked, error; 777 | 749 NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | AUDITVNODE1, UIO_USERSPACE, 750 uap->path, td); 751 error = namei(&nd); 752 if (error) 753 return (error); 754 NDFREE(&nd, NDF_ONLY_PNBUF); 755 756 vfslocked = NDHASGIANT(&nd); --- 13 unchanged lines hidden (view full) --- 770 int attrnamespace; 771 void *data; 772 size_t nbytes; 773 } */ *uap; 774{ 775 struct nameidata nd; 776 int vfslocked, error; 777 |
778 AUDIT_ARG(value, uap->attrnamespace); | 778 AUDIT_ARG_VALUE(uap->attrnamespace); |
779 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 780 uap->path, td); 781 error = namei(&nd); 782 if (error) 783 return (error); 784 NDFREE(&nd, NDF_ONLY_PNBUF); 785 786 vfslocked = NDHASGIANT(&nd); 787 error = extattr_list_vp(nd.ni_vp, uap->attrnamespace, uap->data, 788 uap->nbytes, td); 789 790 vrele(nd.ni_vp); 791 VFS_UNLOCK_GIANT(vfslocked); 792 return (error); 793} | 779 NDINIT(&nd, LOOKUP, MPSAFE | NOFOLLOW | AUDITVNODE1, UIO_USERSPACE, 780 uap->path, td); 781 error = namei(&nd); 782 if (error) 783 return (error); 784 NDFREE(&nd, NDF_ONLY_PNBUF); 785 786 vfslocked = NDHASGIANT(&nd); 787 error = extattr_list_vp(nd.ni_vp, uap->attrnamespace, uap->data, 788 uap->nbytes, td); 789 790 vrele(nd.ni_vp); 791 VFS_UNLOCK_GIANT(vfslocked); 792 return (error); 793} |