From owner-p4-projects@FreeBSD.ORG Mon Feb 13 21:15:37 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5703F16A423; Mon, 13 Feb 2006 21:15:37 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2764416A420 for ; Mon, 13 Feb 2006 21:15:37 +0000 (GMT) (envelope-from millert@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5625F43D72 for ; Mon, 13 Feb 2006 21:15:31 +0000 (GMT) (envelope-from millert@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k1DLFU7B025642 for ; Mon, 13 Feb 2006 21:15:31 GMT (envelope-from millert@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k1DLFUnS025639 for perforce@freebsd.org; Mon, 13 Feb 2006 21:15:30 GMT (envelope-from millert@freebsd.org) Date: Mon, 13 Feb 2006 21:15:30 GMT Message-Id: <200602132115.k1DLFUnS025639@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to millert@freebsd.org using -f From: Todd Miller To: Perforce Change Reviews Cc: Subject: PERFORCE change 91692 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Feb 2006 21:15:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=91692 Change 91692 by millert@millert_ibook on 2006/02/13 21:15:23 Add mac_check_port_receive() receive entry points. Affected files ... .. //depot/projects/trustedbsd/sedarwin7/src/darwin/xnu/osfmk/ipc/ipc_mqueue.c#4 edit Differences ... ==== //depot/projects/trustedbsd/sedarwin7/src/darwin/xnu/osfmk/ipc/ipc_mqueue.c#4 (text+ko) ==== @@ -655,9 +655,15 @@ ipc_kmsg_t *kmsgp; mach_port_seqno_t *seqnop; spl_t s; +#ifdef MAC + ipc_labelh_t lh; + task_t task; + int rc; +#endif s = splsched(); imq_lock(mqueue); + self = current_thread(); /* XXXMAC - lock it too? deadlock? */ if (imq_is_set(mqueue)) { wait_queue_link_t wql; @@ -712,6 +718,21 @@ ipc_mqueue_select(port_mq, option, max_size); imq_unlock(port_mq); +#ifdef MAC + if (self->ith_kmsg != NULL && + self->ith_kmsg->ikm_sender != NULL) { + lh = self->ith_kmsg->ikm_sender; + task = current_task(); + tasklabel_lock(task); + ip_lock(lh->lh_port); + rc = mac_check_port_receive(&task->maclabel, + &lh->lh_label); + ip_unlock(lh->lh_port); + tasklabel_unlock(task); + if (rc) + self->ith_state = MACH_RCV_INVALID_DATA; + } +#endif splx(s); return; @@ -726,6 +747,21 @@ if (ipc_kmsg_queue_first(kmsgs) != IKM_NULL) { ipc_mqueue_select(mqueue, option, max_size); imq_unlock(mqueue); +#ifdef MAC + if (self->ith_kmsg != NULL && + self->ith_kmsg->ikm_sender != NULL) { + lh = self->ith_kmsg->ikm_sender; + task = current_task(); + tasklabel_lock(task); + ip_lock(lh->lh_port); + rc = mac_check_port_receive(&task->maclabel, + &lh->lh_label); + ip_unlock(lh->lh_port); + tasklabel_unlock(task); + if (rc) + self->ith_state = MACH_RCV_INVALID_DATA; + } +#endif splx(s); return; } @@ -736,7 +772,6 @@ * block on (whether the set's or the local port's) is * still locked. */ - self = current_thread(); if (option & MACH_RCV_TIMEOUT) { if (timeout == 0) { imq_unlock(mqueue);