]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: qat - use simple_strtoull to improve qat_uclo_parse_num
authorThorsten Blum <thorsten.blum@linux.dev>
Sun, 26 Oct 2025 01:57:07 +0000 (02:57 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 31 Oct 2025 09:50:43 +0000 (17:50 +0800)
Replace the manual string copying and parsing logic with a call to
simple_strtoull() to simplify and improve qat_uclo_parse_num().

Ensure that the parsed number does not exceed UINT_MAX, and add an
approximate upper-bound check (no more than 19 digits) to guard against
overflow.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Acked-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/intel/qat/qat_common/qat_uclo.c

index 18c3e4416dc51ed0e275cb4ab29dd67556caa370..06d49cb781ae810001113b7e1615d902b4c9e9dd 100644 (file)
@@ -200,20 +200,12 @@ qat_uclo_cleanup_batch_init_list(struct icp_qat_fw_loader_handle *handle,
 
 static int qat_uclo_parse_num(char *str, unsigned int *num)
 {
-       char buf[16] = {0};
-       unsigned long ae = 0;
-       int i;
-
-       strscpy(buf, str, sizeof(buf));
-       for (i = 0; i < 16; i++) {
-               if (!isdigit(buf[i])) {
-                       buf[i] = '\0';
-                       break;
-               }
-       }
-       if ((kstrtoul(buf, 10, &ae)))
-               return -EFAULT;
+       unsigned long long ae;
+       char *end;
 
+       ae = simple_strtoull(str, &end, 10);
+       if (ae > UINT_MAX || str == end || (end - str) > 19)
+               return -EINVAL;
        *num = (unsigned int)ae;
        return 0;
 }