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: head/sys/kern/sysv_msg.c 192895 2009-05-27 14:11:23Z jamie $"); |
52 53#include "opt_sysvipc.h" 54#include "opt_mac.h" 55 56#include <sys/param.h> 57#include <sys/systm.h> 58#include <sys/sysproto.h> 59#include <sys/kernel.h> --- 272 unchanged lines hidden (view full) --- 332 int a3; 333 int a4; 334 int a5; 335 int a6; 336 } */ *uap; 337{ 338 int error; 339 |
340 if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC)) |
341 return (ENOSYS); 342 if (uap->which < 0 || 343 uap->which >= sizeof(msgcalls)/sizeof(msgcalls[0])) 344 return (EINVAL); 345 error = (*msgcalls[uap->which])(td, &uap->a2); 346 return (error); 347} 348 --- 56 unchanged lines hidden (view full) --- 405 struct thread *td; 406 int msqid; 407 int cmd; 408 struct msqid_ds *msqbuf; 409{ 410 int rval, error, msqix; 411 register struct msqid_kernel *msqkptr; 412 |
413 if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC)) |
414 return (ENOSYS); 415 416 msqix = IPCID_TO_IX(msqid); 417 418 if (msqix < 0 || msqix >= msginfo.msgmni) { 419 DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqix, 420 msginfo.msgmni)); 421 return (EINVAL); --- 137 unchanged lines hidden (view full) --- 559 int msqid, error = 0; 560 int key = uap->key; 561 int msgflg = uap->msgflg; 562 struct ucred *cred = td->td_ucred; 563 register struct msqid_kernel *msqkptr = NULL; 564 565 DPRINTF(("msgget(0x%x, 0%o)\n", key, msgflg)); 566 |
567 if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC)) |
568 return (ENOSYS); 569 570 mtx_lock(&msq_mtx); 571 if (key != IPC_PRIVATE) { 572 for (msqid = 0; msqid < msginfo.msgmni; msqid++) { 573 msqkptr = &msqids[msqid]; 574 if (msqkptr->u.msg_qbytes != 0 && 575 msqkptr->u.msg_perm.key == key) --- 93 unchanged lines hidden (view full) --- 669 int msgflg; 670 long mtype; 671{ 672 int msqix, segs_needed, error = 0; 673 register struct msqid_kernel *msqkptr; 674 register struct msg *msghdr; 675 short next; 676 |
677 if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC)) |
678 return (ENOSYS); 679 680 mtx_lock(&msq_mtx); 681 msqix = IPCID_TO_IX(msqid); 682 683 if (msqix < 0 || msqix >= msginfo.msgmni) { 684 DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqix, 685 msginfo.msgmni)); --- 321 unchanged lines hidden (view full) --- 1007 long *mtype; 1008{ 1009 size_t len; 1010 register struct msqid_kernel *msqkptr; 1011 register struct msg *msghdr; 1012 int msqix, error = 0; 1013 short next; 1014 |
1015 if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC)) |
1016 return (ENOSYS); 1017 1018 msqix = IPCID_TO_IX(msqid); 1019 1020 if (msqix < 0 || msqix >= msginfo.msgmni) { 1021 DPRINTF(("msqid (%d) out of range (0<=msqid<%d)\n", msqix, 1022 msginfo.msgmni)); 1023 return (EINVAL); --- 270 unchanged lines hidden --- |