Author: eadler Date: Tue Apr 24 14:49:09 2018 New Revision: 332936 URL: https://svnweb.freebsd.org/changeset/base/332936
Log: [procfs] Split procfs_attr into multiple functions Reviewed by: des, kib Discussed with: mmacy Differential Revision: https://reviews.freebsd.org/D15150 Modified: head/sys/compat/linprocfs/linprocfs.c head/sys/fs/procfs/procfs.c head/sys/fs/procfs/procfs.h Modified: head/sys/compat/linprocfs/linprocfs.c ============================================================================== --- head/sys/compat/linprocfs/linprocfs.c Tue Apr 24 14:35:39 2018 (r332935) +++ head/sys/compat/linprocfs/linprocfs.c Tue Apr 24 14:49:09 2018 (r332936) @@ -1591,7 +1591,7 @@ linprocfs_init(PFS_INIT_ARGS) pfs_create_file(dir, "maps", &linprocfs_doprocmaps, NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "mem", &procfs_doprocmem, - &procfs_attr, &procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + procfs_attr_rw, &procfs_candebug, NULL, PFS_RDWR | PFS_RAW); pfs_create_file(dir, "mounts", &linprocfs_domtab, NULL, NULL, NULL, PFS_RD); pfs_create_link(dir, "root", &linprocfs_doprocroot, Modified: head/sys/fs/procfs/procfs.c ============================================================================== --- head/sys/fs/procfs/procfs.c Tue Apr 24 14:35:39 2018 (r332935) +++ head/sys/fs/procfs/procfs.c Tue Apr 24 14:49:09 2018 (r332936) @@ -98,24 +98,10 @@ procfs_docurproc(PFS_FILL_ARGS) return (0); } -/* - * Adjust mode for some nodes that need it - */ -int -procfs_attr(PFS_ATTR_ARGS) -{ +static int +procfs_attr(PFS_ATTR_ARGS, int mode) { - /* XXX inefficient, split into separate functions */ - if (strcmp(pn->pn_name, "note") == 0 || - strcmp(pn->pn_name, "notepg") == 0) - vap->va_mode = 0200; - else if (strcmp(pn->pn_name, "mem") == 0 || - strcmp(pn->pn_name, "regs") == 0 || - strcmp(pn->pn_name, "dbregs") == 0 || - strcmp(pn->pn_name, "fpregs") == 0 || - strcmp(pn->pn_name, "osrel") == 0) - vap->va_mode = 0600; - + vap->va_mode = mode; if (p != NULL) { PROC_LOCK_ASSERT(p, MA_OWNED); @@ -126,6 +112,27 @@ procfs_attr(PFS_ATTR_ARGS) return (0); } +int +procfs_attr_all_rx(PFS_ATTR_ARGS) +{ + + return (procfs_attr(td, p, pn, vap, 0555)); +} + +int +procfs_attr_rw(PFS_ATTR_ARGS) +{ + + return (procfs_attr(td, p, pn, vap, 0600)); +} + +int +procfs_attr_w(PFS_ATTR_ARGS) +{ + + return (procfs_attr(td, p, pn, vap, 0200)); +} + /* * Visibility: some files only exist for non-system processes * Non-static because linprocfs uses it. @@ -164,33 +171,33 @@ procfs_init(PFS_INIT_ARGS) NULL, NULL, NULL, 0); dir = pfs_create_dir(root, "pid", - procfs_attr, NULL, NULL, PFS_PROCDEP); + procfs_attr_all_rx, NULL, NULL, PFS_PROCDEP); pfs_create_file(dir, "cmdline", procfs_doproccmdline, NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "dbregs", procfs_doprocdbregs, - procfs_attr, procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + procfs_attr_rw, procfs_candebug, NULL, PFS_RDWR | PFS_RAW); pfs_create_file(dir, "etype", procfs_doproctype, NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "fpregs", procfs_doprocfpregs, - procfs_attr, procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + procfs_attr_rw, procfs_candebug, NULL, PFS_RDWR | PFS_RAW); pfs_create_file(dir, "map", procfs_doprocmap, NULL, procfs_notsystem, NULL, PFS_RD); node = pfs_create_file(dir, "mem", procfs_doprocmem, - procfs_attr, procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + procfs_attr_rw, procfs_candebug, NULL, PFS_RDWR | PFS_RAW); node->pn_ioctl = procfs_ioctl; node->pn_close = procfs_close; pfs_create_file(dir, "note", procfs_doprocnote, - procfs_attr, procfs_candebug, NULL, PFS_WR); + procfs_attr_w, procfs_candebug, NULL, PFS_WR); pfs_create_file(dir, "notepg", procfs_doprocnote, - procfs_attr, procfs_candebug, NULL, PFS_WR); + procfs_attr_w, procfs_candebug, NULL, PFS_WR); pfs_create_file(dir, "regs", procfs_doprocregs, - procfs_attr, procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + procfs_attr_rw, procfs_candebug, NULL, PFS_RDWR | PFS_RAW); pfs_create_file(dir, "rlimit", procfs_doprocrlimit, NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "status", procfs_doprocstatus, NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "osrel", procfs_doosrel, - procfs_attr, procfs_candebug, NULL, PFS_RDWR); + procfs_attr_rw, procfs_candebug, NULL, PFS_RDWR); pfs_create_link(dir, "file", procfs_doprocfile, NULL, procfs_notsystem, NULL, 0); Modified: head/sys/fs/procfs/procfs.h ============================================================================== --- head/sys/fs/procfs/procfs.h Tue Apr 24 14:35:39 2018 (r332935) +++ head/sys/fs/procfs/procfs.h Tue Apr 24 14:49:09 2018 (r332936) @@ -57,7 +57,9 @@ int procfs_ioctl(PFS_IOCTL_ARGS); int procfs_close(PFS_CLOSE_ARGS); /* Attributes */ -int procfs_attr(PFS_ATTR_ARGS); +int procfs_attr_w(PFS_ATTR_ARGS); +int procfs_attr_rw(PFS_ATTR_ARGS); +int procfs_attr_all_rx(PFS_ATTR_ARGS); /* Visibility */ int procfs_notsystem(PFS_VIS_ARGS); _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"