From saper@barbera.system.pl  Wed Sep  6 14:55:50 2000
Return-Path: <saper@barbera.system.pl>
Received: from barbera.system.pl (barbera.system.pl [195.205.185.21])
	by hub.freebsd.org (Postfix) with ESMTP
	id D8FE837B422; Wed,  6 Sep 2000 14:55:46 -0700 (PDT)
Received: (from saper@localhost)
	by barbera.system.pl (SYSTEM Internet) id e86Lrj102738;
	Wed, 6 Sep 2000 23:53:45 +0200 (CEST)
Message-Id: <200009062153.e86Lrj102738@barbera.system.pl>
Date: Wed, 6 Sep 2000 23:53:45 +0200 (CEST)
From: saper@SYSTEM.PL
Sender: saper@barbera.system.pl
Reply-To: saper@SYSTEM.PL
To: FreeBSD-gnats-submit@freebsd.org
Cc: peter@freebsd.org
Subject: [patch] SYSV IPC msg queues creation failed with ENOSPC
X-Send-Pr-Version: 3.2

>Number:         21085
>Category:       kern
>Synopsis:       [patch] SYSV IPC msg queues creation failed with ENOSPC
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 06 15:00:01 PDT 2000
>Closed-Date:    Tue Sep 19 16:00:30 PDT 2000
>Last-Modified:  Tue Sep 19 16:00:57 PDT 2000
>Originator:     Marcin Cieslak
>Release:        FreeBSD 4.1-STABLE i386
>Organization:
SYSTEM Internet Provider - http://www.system.pl/
>Environment:

Any -current system after 2000/05/01
Any RELENG_4 system after 2000/08/04

/* $FreeBSD: src/sys/kern/sysv_msg.c,v 1.23.2.1 2000/08/04 22:31:08 peter Exp $ */
 ipcs -Q
msginfo:
        msgmax:  16384  (max characters in a message)
        msgmni:     40  (# of message queues)
        msgmnb:   2048  (max characters in a message queue)
        msgtql:     40  (max # of messages in system)
        msgssz:      8  (size of a message segment)
        msgseg:   2048  (# of message segments in system)

>Description:

The msgget(3) began to fail strangely with errno = ENOSPC
even at the system boot. The problem is with msqids struct
initialization - msg_perm.mode field was tested at sys/kern/sysv_msg.c:442,
but has not been previously initialized properly
at sys/kern/sysv_msg.c:190. 

>How-To-Repeat:

Try to run the following program, however
we were unable to reproduce the bug on some other machines.
The program failed with ENOSPC even with empty msg queue table.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>


int
main()
{ 
        int msgq;
        msgq = msgget(IPC_PRIVATE,IPC_CREAT);
        printf("Result: %d\n", msgq);
        if (msgq == -1)
                perror("msgget");
        return 0;
}



>Fix:

Beware, all other sysv_* files should be inspected
closely, because malloc() for the structures
has been introduced on May, 1st. 2000.

Index: sysv_msg.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/sysv_msg.c,v
retrieving revision 1.23.2.1
diff -u -r1.23.2.1 sysv_msg.c
--- sysv_msg.c	2000/08/04 22:31:08	1.23.2.1
+++ sysv_msg.c	2000/09/06 21:29:54
@@ -188,6 +188,7 @@
 	for (i = 0; i < msginfo.msgmni; i++) {
 		msqids[i].msg_qbytes = 0;	/* implies entry is available */
 		msqids[i].msg_perm.seq = 0;	/* reset to a known value */
+		msqids[i].msg_perm.mode = 0;	/* this should be reset, too */
 	}
 }
 SYSINIT(sysv_msg, SI_SUB_SYSV_MSG, SI_ORDER_FIRST, msginit, NULL)

>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: peter 
State-Changed-When: Tue Sep 19 16:00:30 PDT 2000 
State-Changed-Why:  
Suggested patches applied: 1.25 in -current, 1.23.2.2 in RELENG_4, thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=21085 
>Unformatted:
