[PATCH] libcsupport: Fix TOCTOU in getchark()

Gedare Bloom gedare at rtems.org
Wed Jul 28 16:23:43 UTC 2021


On Wed, Jul 28, 2021 at 9:13 AM Joel Sherrill <joel at rtems.org> wrote:
>
> Is this a Coverity issue? Does it have a CID?
>
> I remembered TOCTOU as an acronym analysis reports used
> but had to look up the meaning. I don't know what to do so someone
> else would not have to look it up beyond explaining it in the long comment.
> It is missing what was checked and used that flagged the issue. That should
> definitely be added in the long comment.
>
The TOCTOU here is that a global variable is checked and then used,
and someone could modify it in between. The solution here is to copy
the global into a local variable before checking and using, so this is
better. (I can't comment whether it's from a CID, just my analysis
here.)

> On Wed, Jul 28, 2021 at 9:50 AM Sebastian Huber
> <sebastian.huber at embedded-brains.de> wrote:
> >
> > Fix format, add Doxygen comments, and reduce includes.
> > ---
> >  cpukit/libcsupport/src/getchark.c | 21 +++++++++++++--------
> >  1 file changed, 13 insertions(+), 8 deletions(-)
> >
> > diff --git a/cpukit/libcsupport/src/getchark.c b/cpukit/libcsupport/src/getchark.c
> > index 5a9afbda7a..cfe9c022d6 100644
> > --- a/cpukit/libcsupport/src/getchark.c
> > +++ b/cpukit/libcsupport/src/getchark.c
> > @@ -1,8 +1,9 @@
> >  /**
> > - *  @file
> > + * @file
> >   *
> > - *  @brief Get Character from Stdin
> > - *  @ingroup libcsupport
> > + * @ingroup BSPIO
> > + *
> > + * @brief This source file contains the implementation of getchark().
> >   */
> >
> >  /*
> > @@ -18,13 +19,17 @@
> >  #include "config.h"
> >  #endif
> >
> > -#include <rtems.h>
> >  #include <rtems/bspIo.h>
> >
> > -int getchark(void)
> > +int getchark( void )
> >  {
> > -  if ( BSP_poll_char )
> > -    return (*BSP_poll_char)();
> > +  BSP_polling_getchar_function_type poll_char;
> > +
> > +  poll_char = BSP_poll_char;
> > +
> > +  if ( poll_char == NULL ) {
> > +    return -1;
> > +  }
> >
> > -  return -1;
> > +  return ( *poll_char )();
> >  }
> > --
> > 2.26.2
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list