Date: Wed, 27 Feb 2008 15:11:10 -0500 From: John Baldwin <jhb@freebsd.org> To: src-committers@freebsd.org Cc: cvs-src@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/lib/libc/stdio fdopen.c fopen.c freopen.c Message-ID: <200802271511.10787.jhb@freebsd.org> In-Reply-To: <200802271902.m1RJ23wd012246@repoman.freebsd.org> References: <200802271902.m1RJ23wd012246@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 27 February 2008 02:02:03 pm John Baldwin wrote: > jhb 2008-02-27 19:02:02 UTC > > FreeBSD src repository > > Modified files: > lib/libc/stdio fdopen.c fopen.c freopen.c > Log: > File descriptors are an int, but our stdio FILE object uses a short to hold > them. Thus, any fd whose value is greater than SHRT_MAX is handled > incorrectly (the short value is sign-extended when converted to an int). > An unpleasant side effect is that if fopen() opens a file and gets a > backing fd that is greater than SHRT_MAX, fclose() will fail and the file > descriptor will be leaked. Better handle this by fixing fopen(), fdopen(), > and freopen() to fail attempts to use a fd greater than SHRT_MAX with > EMFILE. > > At some point in the future we should look at expanding the file descriptor > in FILE to an int, but that is a bit complicated due to ABI issues. To reproduce, open 32k fd's and then invoke gethostbyname() with 'files' enabled in nsswitch.conf for host lookups. A fd on /etc/hosts will be leaked for each invocation of gethostbyname(). -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802271511.10787.jhb>