Jump to content

Corruption of packet payload with custom SCTP protocol driver


Recommended Posts

Dear Armbian ARM64 6.6.x kernel people:

Orange Pi 5 delivers incorrect larger SCTP chunks to SCTP.
from lower IP stack in kernel.  This can be seen from the computed
CRC-32 checksum below.  The packet length is right.  This CRC-32 checksum
process works correctly on OpenSuSE x86_64 Tumbleweed with kernel 6.5.4-1.
It also works correctly on Armbian ARM64 5.10.110.  Hence we believe the IP
code is faulty in the 6.6.x kernel "stable rolling release" from Armbian.

This SCTP driver is used in Telecom by companies like Nokia and Ericsson instead of Linux kernel SCTP

and we would like to get it working on the OrangePi 5.

Shorter packets like the SCTP INIT are are unaffected, and in the failing INIT_ACK and COOKIE_ECHO
the initial 20 bytes or so are correct.   This was tested on the 2023 October 9 release of the 6.6.x rolling release and previous releases..

--------------------------------------------------------------------
SCTP/T Trace showing corrupted packet after successful INIT packet
of length 60 bytes received (correctly).  NB: INIT is a short packet.
INIT_ACK and COOKIE_ECHO are 580 or 560 bytes respectively and both fail
the CRC-32 check.
The SCTP packet contains a checksum (pkt-csum) and the receiver recalculates the checksum (c-csum) and compares it to the enclosed checksum.

They re failing to match on larger >500 byte packets.


root@orangepi5:/tmp/sctp# dmesg -T | tail -22
[Mon Oct  9 11:47:49 2023] Adax_STRM_IP: Linux Streams-to-IP  driver
[Mon Oct  9 11:47:49 2023] Adax_STRM_IP: Copyright (C) 2001-2022 ADAX
[Mon Oct  9 11:53:45 2023] sctp: S1 init_rproc: q 0x6ca71c0 state 1 IPv4/6 0x6800a8c0 len 4 src 2001 dst 3001 vtag 0
[Mon Oct  9 11:53:45 2023] sctp: S1 init_rproc: q 0x6ca71c0 state 1 cookie w/ alen 0 num_addrs 0
[Mon Oct  9 11:53:45 2023]                 : current paddrs 0x0 num_addrs 0
[Mon Oct  9 11:53:45 2023] sctp: S1 sa_sendINIT_ACK: len 20 cookielen 548.
[Mon Oct  9 11:53:45 2023] sctp: S1 putIP() 0x6800a8c0 src 3001 dst 2001 SKB_HASH-like k 19498 lower port 2 lwq 0x000000004df10be3
[Mon Oct  9 11:53:45 2023] sctp: S1 putIP() final lwput: 0x6800a8c0 src 3001 dst 2001 lower port 2 lwq 0x000000004df10be3
[Mon Oct  9 11:53:45 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x55cc0838
[Mon Oct  9 11:53:48 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x7f2c8d7a
[Mon Oct  9 11:53:51 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x55cc0838
[Mon Oct  9 11:53:52 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 529 len 216 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:53:52 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 534 len 16 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:53:52 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 573 len 4 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:53:54 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x55cc0838
[Mon Oct  9 11:53:57 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x55cc0838
[Mon Oct  9 11:54:00 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x978abd22
[Mon Oct  9 11:54:00 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 529 len 216 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:54:00 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 534 len 16 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:54:00 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 573 len 4 rs 0 ws 0 ts 0 nets 1.
[Mon Oct  9 11:54:03 2023] sctp: prep_input: totlen 560 pkt-csum 0x3da864fb c-csum 0x744581f1
[Mon Oct  9 11:54:05 2023] sctpwput: S1 state 1 q ffff000106ca7360 mon 0 IOCTL 538 len 4 rs 0 ws 0 ts 0 nets 1.

 

We are using the Orange PI 5 Ethernet interface. Also TCP, like in large file transfers over scp, works fine.

 

Link to comment
Share on other sites

6 hours ago, richardknowles said:

process works correctly on OpenSuSE x86_64 Tumbleweed with kernel 6.5.4-1.

 

I am sure process works correctly on Armbian x86_64 https://www.armbian.com/uefi-x86/
 

7 hours ago, richardknowles said:

code is faulty in the 6.6.x kernel "stable rolling release" from Armbian.

 

You failed to see all those warnings?

- rolling images are not supported
- edge image are not supported

- CI builds are not supported

- development kernels are not supported

Why? 

https://docs.armbian.com/User-Guide_FAQ/

If you find a problem, invest your own time, fix it and and sent a fix to us or upstream to kernel.org

Link to comment
Share on other sites

  • Igor locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines