ACPICA: Create and deploy safe version of strncpy
authorBob Moore <robert.moore@intel.com>
Thu, 4 Jan 2018 21:41:27 +0000 (13:41 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 5 Jan 2018 00:33:22 +0000 (01:33 +0100)
ACPICA commit 64ad9c69a1bd534a466e060a33c0bbf5fc9e189c

acpi_ut_safe_strncpy - copy and terminate string. Strncpy is not
guaranteed to terminate the copied string if the input is longer
than the length of the target.

No functional change.

Link: https://github.com/acpica/acpica/commit/64ad9c69
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/dbfileio.c
drivers/acpi/acpica/psutils.c
drivers/acpi/acpica/utnonansi.c
drivers/acpi/acpica/uttrack.c

index 8bb46d8623caba9dbd51870c577727c2d8fad533..b6b29d717824615dd2fe018db837b0e075ea5866 100644 (file)
@@ -638,9 +638,11 @@ void ut_convert_backslashes(char *pathname);
 
 void acpi_ut_repair_name(char *name);
 
-#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
+#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)
 u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source);
 
+void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size);
+
 u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source);
 
 u8
index 4d81ea291d9388c391de2dd3c74c82523ef2e5b9..cf9607945704cf438d1449141f7acad3c5385dfa 100644 (file)
@@ -99,8 +99,8 @@ void acpi_db_open_debug_file(char *name)
        }
 
        acpi_os_printf("Debug output file %s opened\n", name);
-       strncpy(acpi_gbl_db_debug_filename, name,
-               sizeof(acpi_gbl_db_debug_filename));
+       acpi_ut_safe_strncpy(acpi_gbl_db_debug_filename, name,
+                            sizeof(acpi_gbl_db_debug_filename));
        acpi_gbl_db_output_to_file = TRUE;
 }
 #endif
index e15b636b1d4ba87d20449d4d1ddcc3977ff44b96..8bd7d01039cc952e4e07a0e6d961bd281287fda8 100644 (file)
@@ -94,9 +94,11 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
        op->common.descriptor_type = ACPI_DESC_TYPE_PARSER;
        op->common.aml_opcode = opcode;
 
-       ACPI_DISASM_ONLY_MEMBERS(strncpy(op->common.aml_op_name,
-                                        (acpi_ps_get_opcode_info(opcode))->
-                                        name, sizeof(op->common.aml_op_name)));
+       ACPI_DISASM_ONLY_MEMBERS(acpi_ut_safe_strncpy(op->common.aml_op_name,
+                                                     (acpi_ps_get_opcode_info
+                                                      (opcode))->name,
+                                                     sizeof(op->common.
+                                                            aml_op_name)));
 }
 
 /*******************************************************************************
index 792664982ea3c0d610cd7f439910230c461ff4ab..33a0970646df5358b5d1c21b2d91b32e2ce6ace1 100644 (file)
@@ -140,7 +140,7 @@ int acpi_ut_stricmp(char *string1, char *string2)
        return (c1 - c2);
 }
 
-#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
+#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_safe_strcpy, acpi_ut_safe_strcat, acpi_ut_safe_strncat
@@ -199,4 +199,13 @@ acpi_ut_safe_strncat(char *dest,
        strncat(dest, source, max_transfer_length);
        return (FALSE);
 }
+
+void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size)
+{
+       /* Always terminate destination string */
+
+       strncpy(dest, source, dest_size);
+       dest[dest_size - 1] = 0;
+}
+
 #endif
index 28a302eb2015933aba13c64bd2dcf4ce39a54852..633b4e2c669f65a90575679facb10902a36f7b54 100644 (file)
@@ -402,8 +402,8 @@ acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation,
        allocation->component = component;
        allocation->line = line;
 
-       strncpy(allocation->module, module, ACPI_MAX_MODULE_NAME);
-       allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0;
+       acpi_ut_safe_strncpy(allocation->module, (char *)module,
+                            ACPI_MAX_MODULE_NAME);
 
        if (!element) {