libio: Limit buffer size to 8192 bytes [BZ #4099]

This avoids overly large buffers with network file systems which report
very large block sizes.
This commit is contained in:
Florian Weimer 2016-11-30 14:59:27 +01:00
parent 934fc4773e
commit 705a79f825
3 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-11-30 Florian Weimer <fweimer@redhat.com>
[BZ #4099]
* libio/filedoalloc.c (_IO_file_doallocate): Limit buffer size to
_IO_BUFSIZ (8192).
2016-11-30 Carlos O'Donell <carlos@redhat.com>
* PROJECTS: Remove file.

6
NEWS
View File

@ -80,6 +80,12 @@ Version 2.25
affect the ABI of other libraries that use this type in their interfaces,
if they are compiled or used with those options.
* The buffer size for byte-oriented stdio streams is now limited to 8192
bytes by default. Previously, on Linux, the default buffer size on most
file systems was 4096 bytes (and thus remains unchanged), except on
network file systems, where the buffer size was unpredictable and could be
as large as several megabytes.
* The <sys/quota.h> header now includes the <linux/quota.h> header. Support
for the Linux quota interface which predates kernel version 2.4.22 has
been removed.

View File

@ -94,7 +94,7 @@ _IO_file_doallocate (_IO_FILE *fp)
fp->_flags |= _IO_LINE_BUF;
}
#if _IO_HAVE_ST_BLKSIZE
if (st.st_blksize > 0)
if (st.st_blksize > 0 && st.st_blksize < _IO_BUFSIZ)
size = st.st_blksize;
#endif
}