Subject: kern/17380: a huge kern.maxfiles and file descriptor leek lead to panic
To: None <gnats-bugs@gnats.netbsd.org>
From: None <christianbiere@gmx.de>
List: netbsd-bugs
Date: 06/24/2002 18:05:59
>Number: 17380
>Category: kern
>Synopsis: a huge kern.maxfiles and file descriptor leek lead to panic
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Jun 24 18:06:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Christian Biere
>Release: 1.6A
>Organization:
>Environment:
NetBSD localhost 1.6A NetBSD 1.6A (DURON) #0: Wed Jun 12 22:50:53 CEST 2002 root@localhost:/usr/src/sys/arch/i386/compile/DURON i386
>Description:
I was curious and tried the following
# sysctl -w kern.maxfiles=10000000000
kern.maxfiles: 548 -> 2147483647
# ulimit -n unlimited
# /tmp/fdtest
After about 3000000 open() without close() the kernel panic'ed. It should be easy repeatable. Therefore, I did not notice the message. If it's really necessary I'll do it again. I did this as root but IMHO fdtest would cause the same problem for a normal user if the # of open files isn't restricted to an appropiate figure.
>How-To-Repeat:
The following program was used. Normally it would fail with "open() failed: Too many open files". It does not if _SC_OPEN_MAX is extraordinary high.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, const char *argv[]) {
int fd,
count = 0;
for (;;) {
if (-1 == (fd = open("/dev/stdin",O_RDONLY))) {
perror("open() failed");
return EXIT_FAILURE;
}
if (++count % 1000 == 0)
printf("count = %9d fd = %9d\n", count, fd);
}
return EXIT_SUCCESS;
}
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: