habanalabs: parse full firmware versions
authorOfir Bitton <obitton@habana.ai>
Tue, 15 Mar 2022 06:57:22 +0000 (08:57 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 May 2022 18:57:35 +0000 (20:57 +0200)
When parsing firmware versions strings, driver should not
assume a specific length and parse up to the maximum supported
version length.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/habanalabs/common/firmware_if.c

index 3262126..2665919 100644 (file)
@@ -18,8 +18,9 @@
 static char *extract_fw_ver_from_str(const char *fw_str)
 {
        char *str, *fw_ver, *whitespace;
+       u32 ver_offset;
 
-       fw_ver = kmalloc(16, GFP_KERNEL);
+       fw_ver = kmalloc(VERSION_MAX_LEN, GFP_KERNEL);
        if (!fw_ver)
                return NULL;
 
@@ -29,9 +30,10 @@ static char *extract_fw_ver_from_str(const char *fw_str)
 
        /* Skip the fw- part */
        str += 3;
+       ver_offset = str - fw_str;
 
        /* Copy until the next whitespace */
-       whitespace =  strnstr(str, " ", 15);
+       whitespace =  strnstr(str, " ", VERSION_MAX_LEN - ver_offset);
        if (!whitespace)
                goto free_fw_ver;