summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/exec/libcsupport/src/libio_sockets.c8
-rw-r--r--c/src/lib/ChangeLog6
-rw-r--r--c/src/lib/libc/libio_sockets.c8
-rw-r--r--cpukit/libcsupport/src/libio_sockets.c8
4 files changed, 30 insertions, 0 deletions
diff --git a/c/src/exec/libcsupport/src/libio_sockets.c b/c/src/exec/libcsupport/src/libio_sockets.c
index 1b0ebb6ba0..a1e98c8b0a 100644
--- a/c/src/exec/libcsupport/src/libio_sockets.c
+++ b/c/src/exec/libcsupport/src/libio_sockets.c
@@ -31,11 +31,19 @@ struct socket *rtems_bsdnet_fdToSocket(
{
rtems_libio_t *iop;
+ /* same as rtems_libio_check_fd(_fd) but different return */
if ((unsigned32)fd >= rtems_libio_number_iops) {
errno = EBADF;
return NULL;
}
iop = &rtems_libio_iops[fd];
+
+ /* same as rtems_libio_check_is_open(iop) but different return */
+ if ((iop->flags & LIBIO_FLAGS_OPEN) == 0) {
+ errno = EBADF;
+ return NULL;
+ }
+
if (iop->data1 == NULL)
errno = EBADF;
return iop->data1;
diff --git a/c/src/lib/ChangeLog b/c/src/lib/ChangeLog
index 209e5ec814..ac0322b7bf 100644
--- a/c/src/lib/ChangeLog
+++ b/c/src/lib/ChangeLog
@@ -1,3 +1,9 @@
+2001-08-03 Joel Sherrill <joel@OARcorp.com>
+
+ * libc/libio_sockets.c (rtems_bsdnet_fdToSocket): Per bug
+ report from Gene Smith <Gene.Smith@sea.siemens.com>, enhanced the
+ error checking to account for a socket being closed.
+
2001-05-25 Joel Sherrill <joel@OARcorp.com>
* libc/base_fs.c: Deleted chmod() now that IMFS creates the
diff --git a/c/src/lib/libc/libio_sockets.c b/c/src/lib/libc/libio_sockets.c
index 1b0ebb6ba0..a1e98c8b0a 100644
--- a/c/src/lib/libc/libio_sockets.c
+++ b/c/src/lib/libc/libio_sockets.c
@@ -31,11 +31,19 @@ struct socket *rtems_bsdnet_fdToSocket(
{
rtems_libio_t *iop;
+ /* same as rtems_libio_check_fd(_fd) but different return */
if ((unsigned32)fd >= rtems_libio_number_iops) {
errno = EBADF;
return NULL;
}
iop = &rtems_libio_iops[fd];
+
+ /* same as rtems_libio_check_is_open(iop) but different return */
+ if ((iop->flags & LIBIO_FLAGS_OPEN) == 0) {
+ errno = EBADF;
+ return NULL;
+ }
+
if (iop->data1 == NULL)
errno = EBADF;
return iop->data1;
diff --git a/cpukit/libcsupport/src/libio_sockets.c b/cpukit/libcsupport/src/libio_sockets.c
index 1b0ebb6ba0..a1e98c8b0a 100644
--- a/cpukit/libcsupport/src/libio_sockets.c
+++ b/cpukit/libcsupport/src/libio_sockets.c
@@ -31,11 +31,19 @@ struct socket *rtems_bsdnet_fdToSocket(
{
rtems_libio_t *iop;
+ /* same as rtems_libio_check_fd(_fd) but different return */
if ((unsigned32)fd >= rtems_libio_number_iops) {
errno = EBADF;
return NULL;
}
iop = &rtems_libio_iops[fd];
+
+ /* same as rtems_libio_check_is_open(iop) but different return */
+ if ((iop->flags & LIBIO_FLAGS_OPEN) == 0) {
+ errno = EBADF;
+ return NULL;
+ }
+
if (iop->data1 == NULL)
errno = EBADF;
return iop->data1;