static int ngc_attach(struct socket *so, int proto, struct thread *td) { struct ngpcb *const pcbp = sotongpcb(so); int error; error = priv_check(td, PRIV_NETGRAPH_CONTROL); if (error) return (error); if (pcbp != NULL) return (EISCONN); return (ng_attach_cntl(so)); }
static void ngc_attach(netmsg_t msg) { struct socket *so = msg->attach.base.nm_so; struct pru_attach_info *ai = msg->attach.nm_ai; struct ngpcb *const pcbp = sotongpcb(so); int error; if (priv_check_cred(ai->p_ucred, PRIV_ROOT, NULL_CRED_OKAY) != 0) error = EPERM; else if (pcbp != NULL) error = EISCONN; else error = ng_attach_cntl(so); lwkt_replymsg(&msg->attach.base.lmsg, error); }