From owner-freebsd-bugs Wed Sep 6 15: 0:10 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id A618B37B42C for ; Wed, 6 Sep 2000 15:00:01 -0700 (PDT) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id PAA73394; Wed, 6 Sep 2000 15:00:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) 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 Reply-To: saper@SYSTEM.PL To: FreeBSD-gnats-submit@freebsd.org Cc: peter@freebsd.org X-Send-Pr-Version: 3.2 Subject: kern/21085: [patch] SYSV IPC msg queues creation failed with ENOSPC Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 21085 >Category: kern >Synopsis: [patch] SYSV IPC msg queues creation failed with ENOSPC >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Sep 06 15:00:01 PDT 2000 >Closed-Date: >Last-Modified: >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 #include #include #include #include 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: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message