Deleted Added
full compact
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 ---