mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
strtok can return NULL here. We don't need to use strtok anyway, so just use a simple strchr method. Coverity-ID: 1055642 This is CVE-2013-4369 / XSA-68 Signed-off-by: Matthew Daley <mattjd@gmail.com> Fix type. Add test case Signed-off-by: Ian Campbell <Ian.campbell@citrix.com>
214 lines
3.8 KiB
Bash
Executable File
214 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
if [ -x ./xl ] ; then
|
|
export LD_LIBRARY_PATH=.
|
|
XL=./xl
|
|
else
|
|
XL=xl
|
|
fi
|
|
|
|
fprefix=tmp.check-xl-vif-parse
|
|
|
|
expected () {
|
|
cat >$fprefix.expected
|
|
}
|
|
|
|
failures=0
|
|
|
|
one () {
|
|
expected_rc=$1; shift
|
|
printf "test case %s...\n" "$*"
|
|
set +e
|
|
${XL} -N network-attach 0 "$@" </dev/null >$fprefix.actual 2>/dev/null
|
|
actual_rc=$?
|
|
diff -u $fprefix.expected $fprefix.actual
|
|
diff_rc=$?
|
|
set -e
|
|
if [ $actual_rc != $expected_rc ] || [ $diff_rc != 0 ]; then
|
|
echo >&2 "test case \`$*' failed ($actual_rc $diff_rc)"
|
|
failures=$(( $failures + 1 ))
|
|
fi
|
|
}
|
|
|
|
complete () {
|
|
if [ "$failures" = 0 ]; then
|
|
echo all ok.; exit 0
|
|
else
|
|
echo "$failures tests failed."; exit 1
|
|
fi
|
|
}
|
|
|
|
e=255
|
|
|
|
|
|
#---------- test data ----------
|
|
|
|
# test invalid vif config
|
|
expected </dev/null
|
|
one 1 foo
|
|
|
|
# test invalid rate units
|
|
expected </dev/null
|
|
one $e rate=foo
|
|
one $e rate=foo
|
|
one $e rate=10MB
|
|
one $e rate=10MB/m
|
|
one $e rate=10ZB
|
|
one $e rate=10ZB/s
|
|
one $e rate=10ZB/m
|
|
|
|
# test b/s and B/s rate units
|
|
expected <<END
|
|
vif: {
|
|
"backend_domid": 0,
|
|
"devid": 0,
|
|
"mtu": 0,
|
|
"model": null,
|
|
"mac": "00:00:00:00:00:00",
|
|
"ip": null,
|
|
"bridge": null,
|
|
"ifname": null,
|
|
"script": null,
|
|
"nictype": null,
|
|
"rate_bytes_per_interval": 100000,
|
|
"rate_interval_usecs": 50000
|
|
}
|
|
|
|
END
|
|
|
|
one 0 rate=16000000b/s
|
|
one 0 rate=16000000b/s@50ms
|
|
one 0 rate=2000000B/s
|
|
one 0 rate=2000000B/s@50ms
|
|
|
|
# test Kb/s and KB/s rate units
|
|
expected <<END
|
|
vif: {
|
|
"backend_domid": 0,
|
|
"devid": 0,
|
|
"mtu": 0,
|
|
"model": null,
|
|
"mac": "00:00:00:00:00:00",
|
|
"ip": null,
|
|
"bridge": null,
|
|
"ifname": null,
|
|
"script": null,
|
|
"nictype": null,
|
|
"rate_bytes_per_interval": 100,
|
|
"rate_interval_usecs": 50000
|
|
}
|
|
|
|
END
|
|
one 0 rate=16Kb/s
|
|
one 0 rate=16Kb/s@50ms
|
|
one 0 rate=2KB/s
|
|
one 0 rate=2KB/s@50ms
|
|
|
|
# test Mb/s and MB/s rate units
|
|
expected <<END
|
|
vif: {
|
|
"backend_domid": 0,
|
|
"devid": 0,
|
|
"mtu": 0,
|
|
"model": null,
|
|
"mac": "00:00:00:00:00:00",
|
|
"ip": null,
|
|
"bridge": null,
|
|
"ifname": null,
|
|
"script": null,
|
|
"nictype": null,
|
|
"rate_bytes_per_interval": 100000,
|
|
"rate_interval_usecs": 50000
|
|
}
|
|
|
|
END
|
|
one 0 rate=16Mb/s
|
|
one 0 rate=16Mb/s@50ms
|
|
one 0 rate=2MB/s
|
|
one 0 rate=2MB/s@50ms
|
|
|
|
# test Gb/s and GB/s rate units
|
|
expected <<END
|
|
vif: {
|
|
"backend_domid": 0,
|
|
"devid": 0,
|
|
"mtu": 0,
|
|
"model": null,
|
|
"mac": "00:00:00:00:00:00",
|
|
"ip": null,
|
|
"bridge": null,
|
|
"ifname": null,
|
|
"script": null,
|
|
"nictype": null,
|
|
"rate_bytes_per_interval": 50000000,
|
|
"rate_interval_usecs": 50000
|
|
}
|
|
|
|
END
|
|
one 0 rate=8Gb/s
|
|
one 0 rate=8Gb/s@50ms
|
|
one 0 rate=1GB/s
|
|
one 0 rate=1GB/s@50ms
|
|
|
|
# test rate overflow
|
|
expected </dev/null
|
|
one $e rate=4294967296b/s
|
|
one $e rate=4294967296Kb/s
|
|
one $e rate=4294967296Mb/s
|
|
one $e rate=4294967296Gb/s
|
|
|
|
# test rate underflow
|
|
expected </dev/null
|
|
one $e rate=0B/s
|
|
|
|
# test invalid replenishment interval
|
|
expected </dev/null
|
|
one $e rate=10Mb/s@foo
|
|
one $e rate=10Mb/s@10h
|
|
one $e rate=10MB/s@foo
|
|
one $e rate=10MB/s@10h
|
|
|
|
# test replenishment interval in seconds
|
|
expected <<END
|
|
vif: {
|
|
"backend_domid": 0,
|
|
"devid": 0,
|
|
"mtu": 0,
|
|
"model": null,
|
|
"mac": "00:00:00:00:00:00",
|
|
"ip": null,
|
|
"bridge": null,
|
|
"ifname": null,
|
|
"script": null,
|
|
"nictype": null,
|
|
"rate_bytes_per_interval": 10000000,
|
|
"rate_interval_usecs": 1000000
|
|
}
|
|
|
|
END
|
|
one 0 rate=80Mb/s@1s
|
|
one 0 rate=10MB/s@1s
|
|
|
|
# test replenishment interval overflow
|
|
expected </dev/null
|
|
one $e rate=1B/s@4294967296us
|
|
one $e rate=1B/s@4294968ms
|
|
one $e rate=1B/s@4295s
|
|
|
|
# test replenishment interval underflow
|
|
expected </dev/null
|
|
one $e rate=1B/s@0us
|
|
|
|
# test rate limiting resulting in overflow
|
|
expected </dev/null
|
|
one $e rate=4294967295GB/s@5us
|
|
one $e rate=4296MB/s@4294s
|
|
|
|
# test include of single '@'
|
|
expected </dev/null
|
|
one $e rate=@
|
|
|
|
complete
|