diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 96471a06d..89eb529cd 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2012-12-31 Christopher Faylor + + * dtable.cc (dtable::dup3): Fix bounds checking for valid newfd. + * syscalls.cc (dup2): Ditto. + * winsup.h (events_terminate): Delete obsolete function declaration. + 2012-12-28 Christopher Faylor * DevNotes: Add entry cgf-000019. diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 2a9f8b078..0b6cee376 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -728,7 +728,7 @@ dtable::dup3 (int oldfd, int newfd, int flags) set_errno (EBADF); goto done; } - if (newfd < 0) + if (newfd >= OPEN_MAX_MAX || newfd < 0) { syscall_printf ("new fd out of bounds: %d", newfd); set_errno (EBADF); diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 43ecf3a0f..fe89f8493 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -142,7 +142,7 @@ extern "C" int dup2 (int oldfd, int newfd) { int res; - if (newfd >= OPEN_MAX_MAX) + if (newfd >= OPEN_MAX_MAX || newfd < 0) { set_errno (EBADF); res = -1; diff --git a/winsup/cygwin/winsup.h b/winsup/cygwin/winsup.h index 0638b44f2..21082c6e3 100644 --- a/winsup/cygwin/winsup.h +++ b/winsup/cygwin/winsup.h @@ -185,7 +185,6 @@ void uinfo_init (); /* various events */ void events_init (); -void events_terminate (); void __stdcall close_all_files (bool = false);