svn commit: r332936 - in head/sys: compat/linprocfs fs/procfs
Eitan Adler
eadler at FreeBSD.org
Tue Apr 24 14:49:10 UTC 2018
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);
More information about the svn-src-head
mailing list