[PATCH rtems-libbsd 1/7] rtemsbsd: Catch timeout overflows

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Jul 28 06:03:32 UTC 2021


On 28/07/2021 00:53, Chris Johns wrote:
> On 28/7/21 7:38 am, Gedare Bloom wrote:
>> On Tue, Jul 27, 2021 at 2:59 AM<chrisj at rtems.org>  wrote:
>>> From: Chris Johns<chrisj at rtems.org>
>>>
>>> Update #4475
>> This change could probably use its own ticket.
> Without the change the RPC client fails to connect in a reliable way because the
> connection may time out for no real reason. A connection that is stable appears
> fragile. I used this ticket because the change was needed for NFS to work.
> 
> https://github.com/freebsd/freebsd-src/blob/main/sys/rpc/clnt_dg.c#L388
> 
>>> ---
>>>   rtemsbsd/rtems/rtems-kernel-timesupport.c | 8 +++++++-
>>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/rtemsbsd/rtems/rtems-kernel-timesupport.c b/rtemsbsd/rtems/rtems-kernel-timesupport.c
>>> index ef14d1fa..5d290d66 100644
>>> --- a/rtemsbsd/rtems/rtems-kernel-timesupport.c
>>> +++ b/rtemsbsd/rtems/rtems-kernel-timesupport.c
>>> @@ -35,6 +35,7 @@
>>>
>>>   #include <machine/rtems-bsd-kernel-space.h>
>>>
>>> +#include <limits.h>
>>>   #include <sys/time.h>
>>>
>>>   #include <rtems/score/timespec.h>
>>> @@ -46,9 +47,14 @@ int
>>>   tvtohz(struct timeval *tv)
>>>   {
>>>     struct timespec ts;
>>> +  uint32_t ticks;
>>>
>>>     ts.tv_sec = tv->tv_sec;
>>>     ts.tv_nsec = tv->tv_usec * 1000;
>>>
>>> -  return (int) _Timespec_To_ticks( &ts );
>>> +  ticks = _Timespec_To_ticks( &ts );
>>> +  if (ticks > INT_MAX)
>>> +    ticks = INT_MAX;
>>> +
>> This changes the behavior to saturating in the overflow case, which is
>> at least well-defined, but is it the best thing to do?  (I have no
>> idea.)
> I do not have a better suggestion? The user is providing a timeval that exceeds
> the size of the return value so providing the max value at least the gets you
> closer to the actual value than any other value?

Why don't we use the FreeBSD implementation one-to-one:

freebsd-org/sys/kern/kern_clock.c

-- 
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list