Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/pgoyette-compat]: src/sys Convert the compat70_unp_addsockcred hook to t...
details: https://anonhg.NetBSD.org/src/rev/3c6e0e3695e7
branches: pgoyette-compat
changeset: 830869:3c6e0e3695e7
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Mon Oct 15 11:57:05 2018 +0000
description:
Convert the compat70_unp_addsockcred hook to the MP-safe mechanism.
XXX One more remaining: sysvipc50_sysctl
diffstat:
sys/compat/common/compat_70_mod.c | 7 +++++--
sys/compat/common/uipc_usrreq_70.c | 35 ++++++++++++++++++++++++++++-------
sys/compat/sys/socket.h | 7 +++++--
sys/kern/compat_stub.c | 7 ++++++-
sys/kern/uipc_usrreq.c | 24 +++++++++++++++---------
sys/sys/compat_stub.h | 8 +++++++-
6 files changed, 66 insertions(+), 22 deletions(-)
diffs (250 lines):
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/compat/common/compat_70_mod.c
--- a/sys/compat/common/compat_70_mod.c Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/compat/common/compat_70_mod.c Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_70_mod.c,v 1.1.2.11 2018/10/15 09:51:33 pgoyette Exp $ */
+/* $NetBSD: compat_70_mod.c,v 1.1.2.12 2018/10/15 11:57:05 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#endif
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_70_mod.c,v 1.1.2.11 2018/10/15 09:51:33 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_70_mod.c,v 1.1.2.12 2018/10/15 11:57:05 pgoyette Exp $");
#include <sys/systm.h>
#include <sys/module.h>
@@ -49,6 +49,7 @@
#include <compat/common/compat_util.h>
#include <compat/common/compat_mod.h>
#include <compat/sys/sockio.h>
+#include <compat/sys/socket.h>
#include <compat/net/route.h>
#include <compat/net/route_70.h>
@@ -58,6 +59,7 @@
compat70_ocreds_valid = true;
rtsock_70_init();
+ uipc_usrreq_70_init();
return 0;
}
@@ -65,6 +67,7 @@
int compat_70_fini(void)
{
+ uipc_usrreq_70_fini();
rtsock_70_fini();
compat70_ocreds_valid = false;
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/compat/common/uipc_usrreq_70.c
--- a/sys/compat/common/uipc_usrreq_70.c Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/compat/common/uipc_usrreq_70.c Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_usrreq_70.c,v 1.1.20.2 2018/09/22 04:56:28 pgoyette Exp $ */
+/* $NetBSD: uipc_usrreq_70.c,v 1.1.20.3 2018/10/15 11:57:05 pgoyette Exp $ */
/*-
* Copyright (c) 2016 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq_70.c,v 1.1.20.2 2018/09/22 04:56:28 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq_70.c,v 1.1.20.3 2018/10/15 11:57:05 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -43,11 +43,12 @@
#include <sys/unpcb.h>
#include <sys/mbuf.h>
#include <sys/kauth.h>
+#include <sys/compat_stub.h>
#include <compat/sys/socket.h>
-struct mbuf *
-compat_70_unp_addsockcred(struct lwp *l, struct mbuf *control)
+int
+compat_70_unp_addsockcred(struct mbuf **ret, struct lwp *l, struct mbuf *control)
{
struct sockcred70 *sc;
struct mbuf *m;
@@ -55,8 +56,10 @@
m = sbcreatecontrol1(&p, SOCKCRED70SIZE(kauth_cred_ngroups(l->l_cred)),
SCM_OCREDS, SOL_SOCKET, M_WAITOK);
- if (m == NULL)
- return control;
+ if (m == NULL) {
+ *ret = control;
+ return 0;
+ }
sc = p;
sc->sc_uid = kauth_cred_getuid(l->l_cred);
@@ -68,5 +71,23 @@
for (int i = 0; i < sc->sc_ngroups; i++)
sc->sc_groups[i] = kauth_cred_group(l->l_cred, i);
- return m_add(control, m);
+ *ret = m_add(control, m);
+ return 0;
}
+
+MODULE_SET_HOOK(compat_70_unp_hook, "unp_70", compat_70_unp_addsockcred);
+MODULE_UNSET_HOOK(compat_70_unp_hook);
+
+void
+uipc_usrreq_70_init(void)
+{
+
+ compat_70_unp_hook_set();
+}
+
+void
+uipc_usrreq_70_fini(void)
+{
+
+ compat_70_unp_hook_unset();
+}
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/compat/sys/socket.h
--- a/sys/compat/sys/socket.h Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/compat/sys/socket.h Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: socket.h,v 1.15 2017/07/29 06:12:50 maxv Exp $ */
+/* $NetBSD: socket.h,v 1.15.2.1 2018/10/15 11:57:05 pgoyette Exp $ */
/*
* Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994
@@ -105,7 +105,10 @@
int compat_ifioctl(struct socket *, u_long, u_long, void *, struct lwp *);
int compat43_set_accrights(struct msghdr *, void *, int);
-struct mbuf * compat_70_unp_addsockcred(struct lwp *, struct mbuf *);
+int compat_70_unp_addsockcred(struct mbuf **, struct lwp *, struct mbuf *);
+
+void uipc_usrreq_70_init(void);
+void uipc_usrreq_70_fini(void);
__END_DECLS
#else
int __socket30(int, int, int);
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/kern/compat_stub.c
--- a/sys/kern/compat_stub.c Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/kern/compat_stub.c Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.1.2.30 2018/10/15 10:44:27 pgoyette Exp $ */
+/* $NetBSD: compat_stub.c,v 1.1.2.31 2018/10/15 11:57:05 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -198,3 +198,8 @@
*/
struct compat_10_openat_hook_t compat_10_openat_hook;
+/*
+ * Hook for compat_70_unp_addsockcred
+ */
+struct compat_70_unp_hook_t compat_70_unp_hook;
+
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/kern/uipc_usrreq.c
--- a/sys/kern/uipc_usrreq.c Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/kern/uipc_usrreq.c Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_usrreq.c,v 1.183.2.4 2018/10/15 09:51:34 pgoyette Exp $ */
+/* $NetBSD: uipc_usrreq.c,v 1.183.2.5 2018/10/15 11:57:05 pgoyette Exp $ */
/*-
* Copyright (c) 1998, 2000, 2004, 2008, 2009 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.183.2.4 2018/10/15 09:51:34 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.183.2.5 2018/10/15 11:57:05 pgoyette Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -123,6 +123,7 @@
#include <sys/uidinfo.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
+#include <sys/compat_stub.h>
#include <compat/sys/socket.h>
@@ -197,16 +198,15 @@
/* Compat interface */
-static struct mbuf *stub_compat_70_unp_addsockcred(lwp_t *, struct mbuf *);
-struct mbuf *(*vec_compat_70_unp_addsockcred)(struct lwp *, struct mbuf *) =
- stub_compat_70_unp_addsockcred;
+int stub_compat_70_unp_addsockcred(struct mbuf **, lwp_t *, struct mbuf *);
-struct mbuf *stub_compat_70_unp_addsockcred(struct lwp *lwp,
+int stub_compat_70_unp_addsockcred(struct mbuf** ret, struct lwp *lwp,
struct mbuf *control)
{
/* just return our initial argument */
- return control;
+ *ret = control;
+ return 0;
}
bool *compat70_ocreds_valid = false;
@@ -331,6 +331,12 @@
kmem_free(unp, sizeof(*unp));
}
+MODULE_CALL_HOOK_DECL(compat_70_unp_hook, f,
+ (struct mbuf **, struct lwp *, struct mbuf *));
+MODULE_CALL_HOOK(compat_70_unp_hook, f,
+ (struct mbuf **ret, struct lwp *lwp, struct mbuf *control),
+ (ret, lwp, control), stub_compat_70_unp_addsockcred(ret, lwp, control));
+
static int
unp_output(struct mbuf *m, struct mbuf *control, struct unpcb *unp)
{
@@ -351,7 +357,7 @@
if (unp->unp_conn->unp_flags & UNP_WANTCRED)
control = unp_addsockcred(curlwp, control);
if (unp->unp_conn->unp_flags & UNP_OWANTCRED)
- control = (*vec_compat_70_unp_addsockcred)(curlwp, control);
+ compat_70_unp_hook_f_call(&control, curlwp, control);
if (sbappendaddr(&so2->so_rcv, (const struct sockaddr *)sun, m,
control) == 0) {
unp_dispose(control);
@@ -530,7 +536,7 @@
* SOCK_STREAM and SOCK_SEQPACKET.
*/
unp->unp_conn->unp_flags &= ~UNP_OWANTCRED;
- control = (*vec_compat_70_unp_addsockcred)(l, control);
+ compat_70_unp_hook_f_call(&control, curlwp, control);
}
/*
* Send to paired receive port, and then reduce
diff -r 35401ac2a557 -r 3c6e0e3695e7 sys/sys/compat_stub.h
--- a/sys/sys/compat_stub.h Mon Oct 15 10:44:27 2018 +0000
+++ b/sys/sys/compat_stub.h Mon Oct 15 11:57:05 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.h,v 1.1.2.42 2018/10/15 10:44:28 pgoyette Exp $ */
+/* $NetBSD: compat_stub.h,v 1.1.2.43 2018/10/15 11:57:05 pgoyette Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -251,4 +251,10 @@
struct pathbuf;
MODULE_HOOK(compat_10_openat_hook, (struct pathbuf **));
+/*
+ * Hook for compat_70_unp_addsockcred
+ */
+struct mbuf;
+MODULE_HOOK(compat_70_unp_hook, (struct mbuf **, struct lwp *, struct mbuf *));
+
#endif /* _SYS_COMPAT_STUB_H */
Home |
Main Index |
Thread Index |
Old Index