Bug 2211258

Summary: [Azure][ARM64][RHEL-8] TCP file transfer corrupted with 0.5% disturbance
Product: Red Hat Enterprise Linux 8 Reporter: Li Tian <litian>
Component: kernelAssignee: Virtualization Maintenance <virt-maint>
kernel sub component: Hyper-V QA Contact: Li Tian <litian>
Status: NEW --- Docs Contact:
Severity: high    
Priority: high CC: andavis, bdas, litian, xiliang, xuli, yacao, yuxisun
Version: 8.9   
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 2212683 (view as bug list) Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2212683    

Description Li Tian 2023-05-31 01:29:13 UTC
Description of problem:
TCP transport should be able to tolerate mild channel corruption (0.5%). Yet the md5sum value doesn't match when sending a ~500MB file.

Version-Release number of selected component (if applicable):
4.18.0-492.el8.aarch64

How reproducible:
100%

Steps to Reproduce:
Detailed steps are filed in below Polarion cases:
https://polarion.engineering.redhat.com/polarion/#/project/RHELVIRT/workitem?id=VIRT-80160
https://polarion.engineering.redhat.com/polarion/#/project/RHELVIRT/workitem?id=VIRT-80158

Actual results:
File size matches but not md5sum
# ls -al server_data 
-rw-r--r--. 1 root root 524288000 May 30 04:22 server_data
# md5sum server_data 
17da58d5050b0a58e3a44685e2b9d522  server_data
# ls -al client_data 
-rw-r--r--. 1 root root 524288000 May 30 04:22 client_data
# md5sum client_data 
7bb64858c2801de10cac8abe4a8968f0  client_data
Expected results:
md5sum value matches.

Additional info:
1. x86_64 does not have this issue.
2. Both IPv4 and IPv6 have this issue.
3. No such issue without channel corruption.

Comment 1 Li Tian 2023-05-31 03:19:47 UTC
In case people can't view Polarion links, here are the steps:

1. Create 2 VMs on Azure. And make sure checksum offload is turned on - 
# ethtool -k eth0|grep checksum

2. Install below packages -
nmap-ncat iproute-tc kernel-modules-extra

3. On VM#1 open a listen port with 'nc' - 
# nc -l 2233 > server_data

4. On VM#2 create a 0.5% channel corruption - 
# tc qdisc add dev eth0 root netem corrupt 0.5%
Then generate a 500MB file and send to VM#1 - 
# dd if=/dev/urandom of=client_data bs=1024k count=500; nc <VM#1_IP> 2233 < client_data

5. Compare md5sum value on 'server_data' and 'client_data'.