mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-21 04:53:46 -04:00
test_firmware: Test partial read support
Add additional hooks to test_firmware to pass in support for partial file read using request_firmware_into_buf(): buf_size: size of buffer to request firmware into partial: indicates that a partial file request is being made file_offset: to indicate offset into file to request Also update firmware selftests to use the new partial read test API. Signed-off-by: Scott Branden <scott.branden@broadcom.com> Co-developed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20201002173828.2099543-17-keescook@chromium.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
59cdb23ca2
commit
5d90e05c0e
@@ -149,6 +149,26 @@ config_unset_into_buf()
|
||||
echo 0 > $DIR/config_into_buf
|
||||
}
|
||||
|
||||
config_set_buf_size()
|
||||
{
|
||||
echo $1 > $DIR/config_buf_size
|
||||
}
|
||||
|
||||
config_set_file_offset()
|
||||
{
|
||||
echo $1 > $DIR/config_file_offset
|
||||
}
|
||||
|
||||
config_set_partial()
|
||||
{
|
||||
echo 1 > $DIR/config_partial
|
||||
}
|
||||
|
||||
config_unset_partial()
|
||||
{
|
||||
echo 0 > $DIR/config_partial
|
||||
}
|
||||
|
||||
config_set_sync_direct()
|
||||
{
|
||||
echo 1 > $DIR/config_sync_direct
|
||||
@@ -207,6 +227,35 @@ read_firmwares()
|
||||
done
|
||||
}
|
||||
|
||||
read_partial_firmwares()
|
||||
{
|
||||
if [ "$(cat $DIR/config_into_buf)" == "1" ]; then
|
||||
fwfile="${FW_INTO_BUF}"
|
||||
else
|
||||
fwfile="${FW}"
|
||||
fi
|
||||
|
||||
if [ "$1" = "xzonly" ]; then
|
||||
fwfile="${fwfile}-orig"
|
||||
fi
|
||||
|
||||
# Strip fwfile down to match partial offset and length
|
||||
partial_data="$(cat $fwfile)"
|
||||
partial_data="${partial_data:$2:$3}"
|
||||
|
||||
for i in $(seq 0 3); do
|
||||
config_set_read_fw_idx $i
|
||||
|
||||
read_firmware="$(cat $DIR/read_firmware)"
|
||||
|
||||
# Verify the contents are what we expect.
|
||||
if [ $read_firmware != $partial_data ]; then
|
||||
echo "request #$i: partial firmware was not loaded" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
read_firmwares_expect_nofile()
|
||||
{
|
||||
for i in $(seq 0 3); do
|
||||
@@ -242,6 +291,21 @@ test_batched_request_firmware_into_buf_nofile()
|
||||
echo "OK"
|
||||
}
|
||||
|
||||
test_request_partial_firmware_into_buf_nofile()
|
||||
{
|
||||
echo -n "Test request_partial_firmware_into_buf() off=$1 size=$2 nofile: "
|
||||
config_reset
|
||||
config_set_name nope-test-firmware.bin
|
||||
config_set_into_buf
|
||||
config_set_partial
|
||||
config_set_buf_size $2
|
||||
config_set_file_offset $1
|
||||
config_trigger_sync
|
||||
read_firmwares_expect_nofile
|
||||
release_all_firmware
|
||||
echo "OK"
|
||||
}
|
||||
|
||||
test_batched_request_firmware_direct_nofile()
|
||||
{
|
||||
echo -n "Batched request_firmware_direct() nofile try #$1: "
|
||||
@@ -356,6 +420,21 @@ test_request_firmware_nowait_custom()
|
||||
echo "OK"
|
||||
}
|
||||
|
||||
test_request_partial_firmware_into_buf()
|
||||
{
|
||||
echo -n "Test request_partial_firmware_into_buf() off=$1 size=$2: "
|
||||
config_reset
|
||||
config_set_name $TEST_FIRMWARE_INTO_BUF_FILENAME
|
||||
config_set_into_buf
|
||||
config_set_partial
|
||||
config_set_buf_size $2
|
||||
config_set_file_offset $1
|
||||
config_trigger_sync
|
||||
read_partial_firmwares normal $1 $2
|
||||
release_all_firmware
|
||||
echo "OK"
|
||||
}
|
||||
|
||||
# Only continue if batched request triggers are present on the
|
||||
# test-firmware driver
|
||||
test_config_present
|
||||
@@ -383,6 +462,12 @@ for i in $(seq 1 5); do
|
||||
test_request_firmware_nowait_custom $i normal
|
||||
done
|
||||
|
||||
# Partial loads cannot use fallback, so do not repeat tests.
|
||||
test_request_partial_firmware_into_buf 0 10
|
||||
test_request_partial_firmware_into_buf 0 5
|
||||
test_request_partial_firmware_into_buf 1 6
|
||||
test_request_partial_firmware_into_buf 2 10
|
||||
|
||||
# Test for file not found, errors are expected, the failure would be
|
||||
# a hung task, which would require a hard reset.
|
||||
echo
|
||||
@@ -407,6 +492,12 @@ for i in $(seq 1 5); do
|
||||
test_request_firmware_nowait_custom_nofile $i
|
||||
done
|
||||
|
||||
# Partial loads cannot use fallback, so do not repeat tests.
|
||||
test_request_partial_firmware_into_buf_nofile 0 10
|
||||
test_request_partial_firmware_into_buf_nofile 0 5
|
||||
test_request_partial_firmware_into_buf_nofile 1 6
|
||||
test_request_partial_firmware_into_buf_nofile 2 10
|
||||
|
||||
test "$HAS_FW_LOADER_COMPRESS" != "yes" && exit 0
|
||||
|
||||
# test with both files present
|
||||
|
||||
Reference in New Issue
Block a user