From 9f114a806ae20d3be9fafb3bcd29e850c4cabebc Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 20 May 2005 19:33:23 +0000 Subject: 2005-05-20 Sergei Organov PR 750/networking * libnetworking/pppd/sys-rtems.c: Avoid NULL dereference in wait_input(). --- c/src/libnetworking/pppd/sys-rtems.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'c/src/libnetworking/pppd/sys-rtems.c') diff --git a/c/src/libnetworking/pppd/sys-rtems.c b/c/src/libnetworking/pppd/sys-rtems.c index f85a571aa0..79580482ff 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); } /* -- cgit v1.2.3