summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/kvm/lib/test_util.c
diff options
context:
space:
mode:
authorVipin Sharma <vipinsh@google.com>2022-11-03 12:17:15 -0700
committerSean Christopherson <seanjc@google.com>2022-11-16 10:03:24 -0800
commit018ea2d71a43372cb984021f03514dc6dd3d46df (patch)
tree0c8b29c542aa023906296179eb252c9eedbbb69c /tools/testing/selftests/kvm/lib/test_util.c
parent0eb88a4121861ce3d5f925a183abb13ad954dbe6 (diff)
downloadlinux-018ea2d71a43372cb984021f03514dc6dd3d46df.tar.gz
linux-018ea2d71a43372cb984021f03514dc6dd3d46df.tar.bz2
linux-018ea2d71a43372cb984021f03514dc6dd3d46df.zip
KVM: selftests: Add atoi_paranoid() to catch errors missed by atoi()
atoi() doesn't detect errors. There is no way to know that a 0 return is correct conversion or due to an error. Introduce atoi_paranoid() to detect errors and provide correct conversion. Replace all atoi() calls with atoi_paranoid(). Signed-off-by: Vipin Sharma <vipinsh@google.com> Suggested-by: David Matlack <dmatlack@google.com> Suggested-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Sean Christopherson <seanjc@google.com> Link: https://lore.kernel.org/r/20221103191719.1559407-4-vipinsh@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'tools/testing/selftests/kvm/lib/test_util.c')
-rw-r--r--tools/testing/selftests/kvm/lib/test_util.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/testing/selftests/kvm/lib/test_util.c b/tools/testing/selftests/kvm/lib/test_util.c
index 6d23878bbfe1..c2d9c6827779 100644
--- a/tools/testing/selftests/kvm/lib/test_util.c
+++ b/tools/testing/selftests/kvm/lib/test_util.c
@@ -334,3 +334,22 @@ long get_run_delay(void)
return val[1];
}
+
+int atoi_paranoid(const char *num_str)
+{
+ char *end_ptr;
+ long num;
+
+ errno = 0;
+ num = strtol(num_str, &end_ptr, 0);
+ TEST_ASSERT(!errno, "strtol(\"%s\") failed", num_str);
+ TEST_ASSERT(num_str != end_ptr,
+ "strtol(\"%s\") didn't find a valid integer.", num_str);
+ TEST_ASSERT(*end_ptr == '\0',
+ "strtol(\"%s\") failed to parse trailing characters \"%s\".",
+ num_str, end_ptr);
+ TEST_ASSERT(num >= INT_MIN && num <= INT_MAX,
+ "%ld not in range of [%d, %d]", num, INT_MIN, INT_MAX);
+
+ return num;
+}