sysv_msg.c (256281) | sysv_msg.c (284665) |
---|---|
1/*- 2 * Implementation of SVID messages 3 * 4 * Author: Daniel Boulet 5 * 6 * Copyright 1993 Daniel Boulet and RTMX Inc. 7 * 8 * This system call was implemented by Daniel Boulet under contract from RTMX. --- 34 unchanged lines hidden (view full) --- 43 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 45 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 46 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 47 * SUCH DAMAGE. 48 */ 49 50#include <sys/cdefs.h> | 1/*- 2 * Implementation of SVID messages 3 * 4 * Author: Daniel Boulet 5 * 6 * Copyright 1993 Daniel Boulet and RTMX Inc. 7 * 8 * This system call was implemented by Daniel Boulet under contract from RTMX. --- 34 unchanged lines hidden (view full) --- 43 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 45 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 46 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 47 * SUCH DAMAGE. 48 */ 49 50#include <sys/cdefs.h> |
51__FBSDID("$FreeBSD: stable/10/sys/kern/sysv_msg.c 225617 2011-09-16 13:58:51Z kmacy $"); | 51__FBSDID("$FreeBSD: stable/10/sys/kern/sysv_msg.c 284665 2015-06-21 06:28:26Z trasz $"); |
52 53#include "opt_compat.h" 54#include "opt_sysvipc.h" 55 56#include <sys/param.h> 57#include <sys/systm.h> 58#include <sys/sysproto.h> 59#include <sys/kernel.h> --- 558 unchanged lines hidden (view full) --- 618 break; 619 } 620 if (msqid == msginfo.msgmni) { 621 DPRINTF(("no more msqid_ds's available\n")); 622 error = ENOSPC; 623 goto done2; 624 } 625#ifdef RACCT | 52 53#include "opt_compat.h" 54#include "opt_sysvipc.h" 55 56#include <sys/param.h> 57#include <sys/systm.h> 58#include <sys/sysproto.h> 59#include <sys/kernel.h> --- 558 unchanged lines hidden (view full) --- 618 break; 619 } 620 if (msqid == msginfo.msgmni) { 621 DPRINTF(("no more msqid_ds's available\n")); 622 error = ENOSPC; 623 goto done2; 624 } 625#ifdef RACCT |
626 PROC_LOCK(td->td_proc); 627 error = racct_add(td->td_proc, RACCT_NMSGQ, 1); 628 PROC_UNLOCK(td->td_proc); 629 if (error != 0) { 630 error = ENOSPC; 631 goto done2; | 626 if (racct_enable) { 627 PROC_LOCK(td->td_proc); 628 error = racct_add(td->td_proc, RACCT_NMSGQ, 1); 629 PROC_UNLOCK(td->td_proc); 630 if (error != 0) { 631 error = ENOSPC; 632 goto done2; 633 } |
632 } 633#endif 634 DPRINTF(("msqid %d is available\n", msqid)); 635 msqkptr->u.msg_perm.key = key; 636 msqkptr->u.msg_perm.cuid = cred->cr_uid; 637 msqkptr->u.msg_perm.uid = cred->cr_uid; 638 msqkptr->u.msg_perm.cgid = cred->cr_gid; 639 msqkptr->u.msg_perm.gid = cred->cr_gid; --- 85 unchanged lines hidden (view full) --- 725 726#ifdef MAC 727 error = mac_sysvmsq_check_msqsnd(td->td_ucred, msqkptr); 728 if (error != 0) 729 goto done2; 730#endif 731 732#ifdef RACCT | 634 } 635#endif 636 DPRINTF(("msqid %d is available\n", msqid)); 637 msqkptr->u.msg_perm.key = key; 638 msqkptr->u.msg_perm.cuid = cred->cr_uid; 639 msqkptr->u.msg_perm.uid = cred->cr_uid; 640 msqkptr->u.msg_perm.cgid = cred->cr_gid; 641 msqkptr->u.msg_perm.gid = cred->cr_gid; --- 85 unchanged lines hidden (view full) --- 727 728#ifdef MAC 729 error = mac_sysvmsq_check_msqsnd(td->td_ucred, msqkptr); 730 if (error != 0) 731 goto done2; 732#endif 733 734#ifdef RACCT |
733 PROC_LOCK(td->td_proc); 734 if (racct_add(td->td_proc, RACCT_MSGQQUEUED, 1)) { | 735 if (racct_enable) { 736 PROC_LOCK(td->td_proc); 737 if (racct_add(td->td_proc, RACCT_MSGQQUEUED, 1)) { 738 PROC_UNLOCK(td->td_proc); 739 error = EAGAIN; 740 goto done2; 741 } 742 saved_msgsz = msgsz; 743 if (racct_add(td->td_proc, RACCT_MSGQSIZE, msgsz)) { 744 racct_sub(td->td_proc, RACCT_MSGQQUEUED, 1); 745 PROC_UNLOCK(td->td_proc); 746 error = EAGAIN; 747 goto done2; 748 } |
735 PROC_UNLOCK(td->td_proc); | 749 PROC_UNLOCK(td->td_proc); |
736 error = EAGAIN; 737 goto done2; | |
738 } | 750 } |
739 saved_msgsz = msgsz; 740 if (racct_add(td->td_proc, RACCT_MSGQSIZE, msgsz)) { 741 racct_sub(td->td_proc, RACCT_MSGQQUEUED, 1); 742 PROC_UNLOCK(td->td_proc); 743 error = EAGAIN; 744 goto done2; 745 } 746 PROC_UNLOCK(td->td_proc); | |
747#endif 748 749 segs_needed = (msgsz + msginfo.msgssz - 1) / msginfo.msgssz; 750 DPRINTF(("msgsz=%zu, msgssz=%d, segs_needed=%d\n", msgsz, 751 msginfo.msgssz, segs_needed)); 752 for (;;) { 753 int need_more_resources = 0; 754 --- 240 unchanged lines hidden (view full) --- 995 msqkptr->u.msg_qnum++; 996 msqkptr->u.msg_lspid = td->td_proc->p_pid; 997 msqkptr->u.msg_stime = time_second; 998 999 wakeup(msqkptr); 1000 td->td_retval[0] = 0; 1001done3: 1002#ifdef RACCT | 751#endif 752 753 segs_needed = (msgsz + msginfo.msgssz - 1) / msginfo.msgssz; 754 DPRINTF(("msgsz=%zu, msgssz=%d, segs_needed=%d\n", msgsz, 755 msginfo.msgssz, segs_needed)); 756 for (;;) { 757 int need_more_resources = 0; 758 --- 240 unchanged lines hidden (view full) --- 999 msqkptr->u.msg_qnum++; 1000 msqkptr->u.msg_lspid = td->td_proc->p_pid; 1001 msqkptr->u.msg_stime = time_second; 1002 1003 wakeup(msqkptr); 1004 td->td_retval[0] = 0; 1005done3: 1006#ifdef RACCT |
1003 if (error != 0) { | 1007 if (racct_enable && error != 0) { |
1004 PROC_LOCK(td->td_proc); 1005 racct_sub(td->td_proc, RACCT_MSGQQUEUED, 1); 1006 racct_sub(td->td_proc, RACCT_MSGQSIZE, saved_msgsz); 1007 PROC_UNLOCK(td->td_proc); 1008 } 1009#endif 1010done2: 1011 mtx_unlock(&msq_mtx); --- 581 unchanged lines hidden --- | 1008 PROC_LOCK(td->td_proc); 1009 racct_sub(td->td_proc, RACCT_MSGQQUEUED, 1); 1010 racct_sub(td->td_proc, RACCT_MSGQSIZE, saved_msgsz); 1011 PROC_UNLOCK(td->td_proc); 1012 } 1013#endif 1014done2: 1015 mtx_unlock(&msq_mtx); --- 581 unchanged lines hidden --- |