Date: Wed, 7 Nov 2001 14:43:55 -0500 (EST) From: Robert Watson <rwatson@FreeBSD.org> To: freebsd-arch@FreeBSD.org Subject: Changing req->p to req->td in sysctl Message-ID: <Pine.NEB.3.96L.1011107144331.43989B-100000@fledge.watson.org>
index | next in thread | raw e-mail
I'm in the process of pushing the (td) reference from ioctl() into
if_ioctl() so that the thread information is available in a number of new
places in the network stack. However, in order to pass it down, we now
need it in a few newer places further up the stack (bpfattach(), ...).
One of the places this touches is the sysctl() interface, where the
process is passed in via req->p. The attached patch replaces the proc
reference with a thread reference. Right now, it slightly increases
complexity elsewhere (adds an additional dereference), but when we move to
td->td_ucred, suser using the thread reference, and with the pushing of td
down the stack, this will actually be a net improvement for simplicity.
Please review, I'd like to commit in a day or two.
Robert N M Watson FreeBSD Core Team, TrustedBSD Project
robert@fledge.watson.org NAI Labs, Safeport Network Services
? sys/i386/conf/LINT
Index: sys/compat/linux/linux_mib.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_mib.c,v
retrieving revision 1.13
diff -u -r1.13 linux_mib.c
--- sys/compat/linux/linux_mib.c 2001/09/08 19:07:03 1.13
+++ sys/compat/linux/linux_mib.c 2001/11/07 19:20:52
@@ -56,11 +56,11 @@
char osname[LINUX_MAX_UTSNAME];
int error;
- strcpy(osname, linux_get_osname(req->p));
+ strcpy(osname, linux_get_osname(req->td->td_proc));
error = sysctl_handle_string(oidp, osname, LINUX_MAX_UTSNAME, req);
if (error || req->newptr == NULL)
return (error);
- error = linux_set_osname(req->p, osname);
+ error = linux_set_osname(req->td->td_proc, osname);
return (error);
}
@@ -77,11 +77,11 @@
char osrelease[LINUX_MAX_UTSNAME];
int error;
- strcpy(osrelease, linux_get_osrelease(req->p));
+ strcpy(osrelease, linux_get_osrelease(req->td->td_proc));
error = sysctl_handle_string(oidp, osrelease, LINUX_MAX_UTSNAME, req);
if (error || req->newptr == NULL)
return (error);
- error = linux_set_osrelease(req->p, osrelease);
+ error = linux_set_osrelease(req->td->td_proc, osrelease);
return (error);
}
@@ -98,11 +98,11 @@
int oss_version;
int error;
- oss_version = linux_get_oss_version(req->p);
+ oss_version = linux_get_oss_version(req->td->td_proc);
error = sysctl_handle_int(oidp, &oss_version, 0, req);
if (error || req->newptr == NULL)
return (error);
- error = linux_set_oss_version(req->p, oss_version);
+ error = linux_set_oss_version(req->td->td_proc, oss_version);
return (error);
}
Index: sys/kern/kern_mib.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_mib.c,v
retrieving revision 1.48
diff -u -r1.48 kern_mib.c
--- sys/kern/kern_mib.c 2001/11/06 20:09:33 1.48
+++ sys/kern/kern_mib.c 2001/11/07 19:21:57
@@ -155,12 +155,12 @@
{
int error;
- if (jailed(req->p->p_ucred)) {
+ if (jailed(req->td->td_proc->p_ucred)) {
if (!jail_set_hostname_allowed && req->newptr)
return(EPERM);
error = sysctl_handle_string(oidp,
- req->p->p_ucred->cr_prison->pr_host,
- sizeof req->p->p_ucred->cr_prison->pr_host, req);
+ req->td->td_proc->p_ucred->cr_prison->pr_host,
+ sizeof req->td->td_proc->p_ucred->cr_prison->pr_host, req);
} else
error = sysctl_handle_string(oidp,
hostname, sizeof hostname, req);
@@ -186,7 +186,7 @@
struct prison *pr;
int error, level;
- pr = req->p->p_ucred->cr_prison;
+ pr = req->td->td_proc->p_ucred->cr_prison;
/*
* If the process is in jail, return the maximum of the global and
Index: sys/kern/kern_sysctl.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_sysctl.c,v
retrieving revision 1.117
diff -u -r1.117 kern_sysctl.c
--- sys/kern/kern_sysctl.c 2001/10/12 09:16:36 1.117
+++ sys/kern/kern_sysctl.c 2001/11/07 19:21:57
@@ -848,7 +848,7 @@
bzero(&req, sizeof req);
- req.p = td->td_proc;
+ req.td = td;
if (oldlenp) {
req.oldlen = *oldlenp;
@@ -1037,12 +1037,12 @@
/* Is this sysctl sensitive to securelevels? */
if (req->newptr && (oid->oid_kind & CTLFLAG_SECURE)) {
- if (req->p == NULL) {
+ if (req->td == NULL) {
error = securelevel_gt(NULL, 0); /* XXX */
if (error)
return (error);
} else {
- error = securelevel_gt(req->p->p_ucred, 0);
+ error = securelevel_gt(req->td->td_proc->p_ucred, 0);
if (error)
return (error);
}
@@ -1050,14 +1050,14 @@
/* Is this sysctl writable by only privileged users? */
if (req->newptr && !(oid->oid_kind & CTLFLAG_ANYBODY)) {
- if (req->p != NULL) {
+ if (req->td != NULL) {
int flags;
if (oid->oid_kind & CTLFLAG_PRISON)
flags = PRISON_ROOT;
else
flags = 0;
- error = suser_xxx(NULL, req->p, flags);
+ error = suser_xxx(NULL, req->td->td_proc, flags);
if (error)
return (error);
}
@@ -1132,7 +1132,7 @@
bzero(&req, sizeof req);
- req.p = td->td_proc;
+ req.td = td;
if (oldlenp) {
if (inkernel) {
Index: sys/kern/uipc_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.75
diff -u -r1.75 uipc_usrreq.c
--- sys/kern/uipc_usrreq.c 2001/10/29 20:04:03 1.75
+++ sys/kern/uipc_usrreq.c 2001/11/07 19:22:35
@@ -850,7 +850,7 @@
for (unp = LIST_FIRST(head), i = 0; unp && i < n;
unp = LIST_NEXT(unp, unp_link)) {
if (unp->unp_gencnt <= gencnt) {
- if (cr_cansee(req->p->p_ucred,
+ if (cr_cansee(req->td->td_proc->p_ucred,
unp->unp_socket->so_cred))
continue;
unp_list[i++] = unp;
Index: sys/netinet/ip_divert.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_divert.c,v
retrieving revision 1.52
diff -u -r1.52 ip_divert.c
--- sys/netinet/ip_divert.c 2001/09/12 08:37:54 1.52
+++ sys/netinet/ip_divert.c 2001/11/07 19:23:14
@@ -46,6 +46,7 @@
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
+#include <sys/proc.h>
#include <sys/socket.h>
#include <sys/protosw.h>
#include <sys/socketvar.h>
@@ -485,7 +486,8 @@
s = splnet();
for (inp = LIST_FIRST(divcbinfo.listhead), i = 0; inp && i < n;
inp = LIST_NEXT(inp, inp_list)) {
- if (inp->inp_gencnt <= gencnt && !prison_xinpcb(req->p, inp))
+ if (inp->inp_gencnt <= gencnt && !prison_xinpcb(
+ req->td->td_proc, inp))
inp_list[i++] = inp;
}
splx(s);
Index: sys/netinet/raw_ip.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.86
diff -u -r1.86 raw_ip.c
--- sys/netinet/raw_ip.c 2001/11/04 22:56:25 1.86
+++ sys/netinet/raw_ip.c 2001/11/07 19:23:14
@@ -627,7 +627,7 @@
for (inp = LIST_FIRST(ripcbinfo.listhead), i = 0; inp && i < n;
inp = LIST_NEXT(inp, inp_list)) {
if (inp->inp_gencnt <= gencnt) {
- if (cr_cansee(req->p->p_ucred,
+ if (cr_cansee(req->td->td_proc->p_ucred,
inp->inp_socket->so_cred))
continue;
inp_list[i++] = inp;
Index: sys/netinet/tcp_subr.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_subr.c,v
retrieving revision 1.116
diff -u -r1.116 tcp_subr.c
--- sys/netinet/tcp_subr.c 2001/10/09 21:40:30 1.116
+++ sys/netinet/tcp_subr.c 2001/11/07 19:23:14
@@ -855,7 +855,7 @@
for (inp = LIST_FIRST(tcbinfo.listhead), i = 0; inp && i < n;
inp = LIST_NEXT(inp, inp_list)) {
if (inp->inp_gencnt <= gencnt) {
- if (cr_cansee(req->p->p_ucred,
+ if (cr_cansee(req->td->td_proc->p_ucred,
inp->inp_socket->so_cred))
continue;
inp_list[i++] = inp;
@@ -913,7 +913,7 @@
struct inpcb *inp;
int error, s;
- error = suser_xxx(0, req->p, PRISON_ROOT);
+ error = suser_xxx(0, req->td->td_proc, PRISON_ROOT);
if (error)
return (error);
error = SYSCTL_IN(req, addrs, sizeof(addrs));
@@ -926,7 +926,7 @@
error = ENOENT;
goto out;
}
- error = cr_cansee(req->p->p_ucred, inp->inp_socket->so_cred);
+ error = cr_cansee(req->td->td_proc->p_ucred, inp->inp_socket->so_cred);
if (error)
goto out;
bzero(&xuc, sizeof(xuc));
@@ -953,7 +953,7 @@
struct inpcb *inp;
int error, s, mapped = 0;
- error = suser_xxx(0, req->p, PRISON_ROOT);
+ error = suser_xxx(0, req->td->td_proc, PRISON_ROOT);
if (error)
return (error);
error = SYSCTL_IN(req, addrs, sizeof(addrs));
@@ -982,7 +982,7 @@
error = ENOENT;
goto out;
}
- error = cr_cansee(req->p->p_ucred, inp->inp_socket->so_cred);
+ error = cr_cansee(req->td->td_proc->p_ucred, inp->inp_socket->so_cred);
if (error)
goto out;
bzero(&xuc, sizeof(xuc));
Index: sys/netinet/udp_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/udp_usrreq.c,v
retrieving revision 1.99
diff -u -r1.99 udp_usrreq.c
--- sys/netinet/udp_usrreq.c 2001/10/22 12:43:30 1.99
+++ sys/netinet/udp_usrreq.c 2001/11/07 19:23:14
@@ -583,7 +583,7 @@
for (inp = LIST_FIRST(udbinfo.listhead), i = 0; inp && i < n;
inp = LIST_NEXT(inp, inp_list)) {
if (inp->inp_gencnt <= gencnt) {
- if (cr_cansee(req->p->p_ucred,
+ if (cr_cansee(req->td->td_proc->p_ucred,
inp->inp_socket->so_cred))
continue;
inp_list[i++] = inp;
@@ -635,7 +635,7 @@
struct inpcb *inp;
int error, s;
- error = suser_xxx(0, req->p, PRISON_ROOT);
+ error = suser_xxx(0, req->td->td_proc, PRISON_ROOT);
if (error)
return (error);
error = SYSCTL_IN(req, addrs, sizeof(addrs));
@@ -648,7 +648,7 @@
error = ENOENT;
goto out;
}
- error = cr_cansee(req->p->p_ucred, inp->inp_socket->so_cred);
+ error = cr_cansee(req->td->td_proc->p_ucred, inp->inp_socket->so_cred);
if (error)
goto out;
bzero(&xuc, sizeof(xuc));
Index: sys/netinet6/udp6_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/udp6_usrreq.c,v
retrieving revision 1.18
diff -u -r1.18 udp6_usrreq.c
--- sys/netinet6/udp6_usrreq.c 2001/09/25 18:40:52 1.18
+++ sys/netinet6/udp6_usrreq.c 2001/11/07 19:23:21
@@ -464,7 +464,7 @@
struct inpcb *inp;
int error, s;
- error = suser(req->p);
+ error = suser(req->td->td_proc);
if (error)
return (error);
Index: sys/sys/sysctl.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/sysctl.h,v
retrieving revision 1.99
diff -u -r1.99 sysctl.h
--- sys/sys/sysctl.h 2001/09/12 08:38:05 1.99
+++ sys/sys/sysctl.h 2001/11/07 19:23:25
@@ -111,7 +111,7 @@
* so that we can use the interface from the kernel or from user-space.
*/
struct sysctl_req {
- struct proc *p; /* used for access checking */
+ struct thread *td; /* used for access checking */
int lock;
void *oldptr;
size_t oldlen;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1011107144331.43989B-100000>
