From da56a02f6cbd4717cd465a35b6e7f96c327fdfe0 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 20 May 2005 19:31:18 +0000 Subject: [PATCH] 2005-05-20 Sergei Organov PR 750/networking * pppd/sys-rtems.c: Avoid NULL dereference in wait_input(). --- c/src/libnetworking/ChangeLog | 5 +++++ c/src/libnetworking/pppd/sys-rtems.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/c/src/libnetworking/ChangeLog b/c/src/libnetworking/ChangeLog index 3aa837d74c..d472e4ceaf 100644 --- a/c/src/libnetworking/ChangeLog +++ b/c/src/libnetworking/ChangeLog @@ -1,3 +1,8 @@ +2005-05-20 Sergei Organov + + PR 750/networking + * pppd/sys-rtems.c: Avoid NULL dereference in wait_input(). + 2004-04-03 Wilfried Busalski PR 599/pppd diff --git a/c/src/libnetworking/pppd/sys-rtems.c b/c/src/libnetworking/pppd/sys-rtems.c index 0fc3e139b9..d65c50f547 100644 --- a/c/src/libnetworking/pppd/sys-rtems.c +++ b/c/src/libnetworking/pppd/sys-rtems.c @@ -513,13 +513,21 @@ void wait_input(timo) struct timeval *timo; { - rtems_interval ticks; rtems_event_set events; + rtems_interval ticks = 0; + rtems_option wait = RTEMS_WAIT; - ticks = ((timo->tv_sec*1000000)+timo->tv_usec)/rtems_bsdnet_microseconds_per_tick; - if ( ticks > 0 ) { - rtems_event_receive(RTEMS_EVENT_31, (RTEMS_EVENT_ANY|RTEMS_WAIT), ticks, &events); + if(timo) { + if(timo->tv_sec == 0 && timo->tv_usec == 0) + wait = RTEMS_NO_WAIT; + else { + ticks = (timo->tv_sec * 1000000 + timo->tv_usec) / + rtems_bsdnet_microseconds_per_tick; + if(ticks <= 0) + ticks = 1; + } } + rtems_event_receive(RTEMS_EVENT_31, RTEMS_EVENT_ANY | wait, ticks, &events); } /*