Skip site navigation (1)Skip section navigation (2)
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>