Hi Busybox,

I may have run into a bug where dd with piped input will truncate a small 
number of results (~1%) to a modulo 4096 value on multi-core systems.
The test script does not produce errors running under bash.
This issue is not seen if dd reads the file with if=
I have not looked into the cause.

Example:
# generate test file
dd if=/dev/urandom of=/tmp/wlan_data_0 bs=1M count=1
# ~1% pipe error
cat /tmp/wlan_data_0 | \
dd iflag=skip_bytes bs=$((0x2f20)) skip=0 count=1 2>/dev/null | wc -c

First noticed on arm with busybox 1.31.1
Reproduced on x86_64 busybox g6a55b4e40
Reproduced on mipsel 4 core
Not reproduced on mips single core

cat data | dd used for Openwrt wifi radio calibration data extraction from 
sysfs:
https://github.com/openwrt/openwrt/commit/7557e7f267e845db5a403139c49f2637f9021992

Scripted example:
test_caldata_extract() {
        local counter
        local count_good
        local count_bad
        local result
        local result_latest
        local dd_bs

        dd_bs=$((0x2f20))

        dd if=/dev/urandom of=/tmp/wlan_data_0 bs=1M count=1
        result=$(cat /tmp/wlan_data_0 | \
        dd iflag=skip_bytes bs=$dd_bs skip=0 count=1 2>/dev/null | wc -c)
        while [ ! $result -eq $dd_bs ]; do
        echo "bad initial result"
        result=$(cat /tmp/wlan_data_0 | \
        dd iflag=skip_bytes bs=$dd_bs skip=0 count=1 2>/dev/null | wc -c)
        done

        counter=0
        count_good=0
        count_bad=0
        echo "initial run $counter $result"

        while true; do
        counter=$(( counter + 1 ))
        result_latest=$(cat /tmp/wlan_data_0 | \
        dd iflag=skip_bytes bs=$((0x2f20)) skip=0 count=1 2>/dev/null | wc -c)
        if [ "$result_latest" = "$result" ]; then
        count_good=$(( count_good + 1 ))
        #echo "run $counter okay"
        else
        count_bad=$(( count_bad + 1 ))
        echo "run $counter bad $result_latest ($count_bad / $counter)"
        #break
        fi
        done
}

test_caldata_extract


Cheers
-- 
  John Thomson
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to