accel/habanalabs: refactor deprecated strncpy
authorJustin Stitt <justinstitt@google.com>
Wed, 23 Aug 2023 00:23:08 +0000 (00:23 +0000)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 9 Oct 2023 09:37:20 +0000 (12:37 +0300)
`strncpy` is deprecated for use on NUL-terminated destination strings [1].

A suitable replacement is `strscpy` [2] due to the fact that it
guarantees NUL-termination on its destination buffer argument which is
_not_ the case for `strncpy`!

There is likely no bug happening in this case since HL_STR_MAX is
strictly larger than all source strings. Nonetheless, prefer a safer and
more robust interface.

It should also be noted that `strscpy` will not pad like `strncpy`. If
this NUL-padding behavior is _required_ we should use `strscpy_pad`
instead of `strscpy`.

Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings
Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html
Link: https://github.com/KSPP/linux/issues/90
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Justin Stitt <justinstitt@google.com>
Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/accel/habanalabs/common/habanalabs_drv.c

index 7e66f623f350bf86e982588a628b841fa00b7241..5db9af7e2daf5c1b6902f62bd554219da4cbaa62 100644 (file)
@@ -460,14 +460,14 @@ static int create_hdev(struct hl_device **dev, struct pci_dev *pdev)
        hdev->pdev = pdev;
 
        /* Assign status description string */
-       strncpy(hdev->status[HL_DEVICE_STATUS_OPERATIONAL], "operational", HL_STR_MAX);
-       strncpy(hdev->status[HL_DEVICE_STATUS_IN_RESET], "in reset", HL_STR_MAX);
-       strncpy(hdev->status[HL_DEVICE_STATUS_MALFUNCTION], "disabled", HL_STR_MAX);
-       strncpy(hdev->status[HL_DEVICE_STATUS_NEEDS_RESET], "needs reset", HL_STR_MAX);
-       strncpy(hdev->status[HL_DEVICE_STATUS_IN_DEVICE_CREATION],
-                                       "in device creation", HL_STR_MAX);
-       strncpy(hdev->status[HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE],
-                                       "in reset after device release", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_OPERATIONAL], "operational", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_IN_RESET], "in reset", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_MALFUNCTION], "disabled", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_NEEDS_RESET], "needs reset", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_IN_DEVICE_CREATION],
+                               "in device creation", HL_STR_MAX);
+       strscpy(hdev->status[HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE],
+                               "in reset after device release", HL_STR_MAX);
 
 
        /* First, we must find out which ASIC are we handling. This is needed