The documentation for this function suggests that it can handle invalid
descriptors safely. This change allows negative descriptors to be
handled without a crash.
---
 rtemsbsd/include/machine/rtems-bsd-libio.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/rtemsbsd/include/machine/rtems-bsd-libio.h 
b/rtemsbsd/include/machine/rtems-bsd-libio.h
index e662a9ec..8cc67ae3 100644
--- a/rtemsbsd/include/machine/rtems-bsd-libio.h
+++ b/rtemsbsd/include/machine/rtems-bsd-libio.h
@@ -228,7 +228,7 @@ rtems_bsd_libio_iop_hold(int fd, rtems_libio_t **iopp)
        rtems_libio_t *iop = NULL;
        unsigned int flags = 0;
        int ffd = -1;
-       if (fd < rtems_libio_number_iops) {
+       if (fd >= 0 && fd < rtems_libio_number_iops) {
                iop = rtems_libio_iop(fd);
                flags = rtems_libio_iop_hold(iop);
                if ((flags & LIBIO_FLAGS_OPEN) != 0) {
@@ -249,7 +249,9 @@ rtems_bsd_libio_iop_hold(int fd, rtems_libio_t **iopp)
                if (RTEMS_BSD_DESCRIP_TRACE)
                        flags = iop->flags;
        } else {
-               *iopp = NULL;
+               if (iopp != NULL) {
+                       *iopp = NULL;
+               }
        }
        if (RTEMS_BSD_DESCRIP_TRACE)
                printf("bsd: iop: hold: fd=%d ffd=%d refs=%d iop=%p by %p\n",
-- 
2.39.2

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to