[Info-vax] %SYSTEM-F-ACCVIO in LIBOTS after several hours
Mark Daniel
mark.daniel at wasd.vsm.com.au
Wed Mar 9 10:32:33 EST 2022
On 10/3/22 1:37 am, Arne Vajhøj wrote:
> On 3/9/2022 9:52 AM, Mark Daniel wrote:
>> On 10/3/22 1:19 am, Mark Daniel wrote:
>> 8< snip 8<
>>>> And similar for aCacheIdx I presume.
>>>
>>> Yes.
>>>
>>> idx = nCacheIdx++ % CACHE_MAX;
>> 8< snip 8<
>>
>> Oops...
>>
>> idx = aCacheIdx++ % CACHE_MAX;
>
> Something is missing.
>
> idx = aCacheIdx++ % CACHE_MAX;
> sprintf (ares[aCacheIdx], "[%s]", strerror(errno));
>
> must be equivalent of:
>
> idx = aCacheIdx % CACHE_MAX;
> aCacheIdx = aCacheIdx + 1;
> sprintf (ares[aCacheIdx], "[%s]", strerror(errno));
>
> and that does not limit aCacheIdx.
>
> Typo?
No. Cut-and-paste :-) But a bug all the same. Well-spotted!
There are two code paths. One for Ipv4 and another for 6.
Everywhere uses ares[idx] except one :-{
> memset (&addr6, 0, sizeof(addr6));
> if (inet_pton (AF_INET6, Address, &addr6.sin6_addr) > 0)
> {
8< snip 8<
> }
> else
> snprintf (ares[aCacheIdx], sizeof(ares[0]),
> "[%s]", strerror(errno));
> return (ares[idx]);
That's likely it!
And IPv6 addresses are resolved so infrequently -- and are corrupted
even less frequently -- that would explain the frequency of the crash.
> Arne
Thank you Arne.
And Simon; note the clip is from the revised code.
--
Anyone, who using social-media, forms an opinion regarding anything
other than the relative cuteness of this or that puppy-dog, needs
seriously to examine their critical thinking.
More information about the Info-vax
mailing list