[Xastir] error in xastir_udp_client?

Tom Russo russo at bogodyn.org
Sat Apr 3 10:32:07 PDT 2021


Yes, that really does seem like an error.  The manual is clear and says
that length should be initialized to the length of the buffer.

With a change as simple as this I am comfortable just making the change,
pushing to github, and letting users verify that it doesn't break their
use cases.  I have already done so.

On Sat, Apr 03, 2021 at 12:23:13PM -0500, we recorded a bogon-computron collision of the <kg4wsv at gmail.com> flavor, containing:
> TL;DR Jason thinks there's a bug in xastir_udp_cleint. possible fix below.
> 
> I'm running the ADS-B script for the first time on a new system, odroid N2
> (64 bit ARM, standard odroid distribution of Ubuntu 18.04 LTS).
> xastir_udp_client fails frequently (like every second or third execution)
> with recfrom: invalid argument. full output is:
> 
> $ ./bin/ads-b.pl --dump1090host 192.168.88.29 planes 10163
> xastir user PLANES pass 10163
> ABDD4A           427kn  358???                    - (U.S.)
> 
> ABDD4A  37175ft               ABDD4A (U.S.)       PLANES>APRS::TACTICAL
> :ABDD4A=ABDD4A (U.S.)
> recvfrom: Invalid argument
> Trying next address to send to
> Received NACK from Xastir: Callsign/Passcode don't match?
> $
> 
> This same activity results in xastir outputting the following:
> 
> Received datagram from ::1: PLANES,10163,-identify
> -identify
> x_spider udp:  user:PLANES  pass:10163
> Received datagram from ::1: PLANES,10163
> PLANES>APRS::TACTICAL :ABDD4A=ABDD4A (U.S.)
> x_spider udp:  user:PLANES  pass:10163
> Received datagram from 127.0.0.1: ACKXastir received UDP packet without
> "TO_INET," string
> 
> 
> After a bit of googling and RTFMing, I found this in the recvfrom(2) man
> page:
> 
>     In this case, addrlen is a value-result
>        argument.  Before the call, it should be initialized to the size of
> the
>        buffer associated with src_addr.
> 
> I found that, when I added a length = sizeof() call as TFM specifies, my
> problem went away.
> 
> The suspect code is in try_exchange(). In the current code length is
> uninitialized.
> 
> $ diff xastir_udp_client.c xastir_udp_client.c-dist
> 101d100
> <   length = sizeof(from);
> $
> 
> That's immediately before the call to recvfrom().
> 
> 
> Before adding this call it would run for a few seconds before exiting.
> With the fix it's been running for at least 10 minutes or so, no errors.
> 
> 
> -Jason
> kg4wsv
> _______________________________________________
> Xastir mailing list
> Xastir at lists.xastir.org
> http://xastir.org/mailman/listinfo/xastir

-- 
Tom Russo    KM5VY
Tijeras, NM  

 echo "prpv_a'rfg_cnf_har_cvcr" | sed -e 's/_/ /g' | tr [a-m][n-z] [n-z][a-m]



More information about the Xastir mailing list