acpi/sysfs.c has many instances of unsafe or deprecated functions such as sprintf, strcpy. This patch relaces them with sysfs_emit to safer alternavtive and better following of kernel API.
Signed-off-by: Brahmajit Das <list...@listout.xyz> --- drivers/acpi/sysfs.c | 87 ++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index a48ebbf768f9..c3bb7af79fcb 100644 --- a/drivers/acpi/sysfs.c +++ b/drivers/acpi/sysfs.c @@ -94,23 +94,23 @@ static int param_get_debug_layer(char *buffer, const struct kernel_param *kp) int result = 0; int i; - result = sprintf(buffer, "%-25s\tHex SET\n", "Description"); + result = sysfs_emit(buffer, "%-25s\tHex SET\n", "Description"); for (i = 0; i < ARRAY_SIZE(acpi_debug_layers); i++) { - result += sprintf(buffer + result, "%-25s\t0x%08lX [%c]\n", + result += sysfs_emit(buffer + result, "%-25s\t0x%08lX [%c]\n", acpi_debug_layers[i].name, acpi_debug_layers[i].value, (acpi_dbg_layer & acpi_debug_layers[i].value) ? '*' : ' '); } result += - sprintf(buffer + result, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS", + sysfs_emit(buffer + result, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS", ACPI_ALL_DRIVERS, (acpi_dbg_layer & ACPI_ALL_DRIVERS) == ACPI_ALL_DRIVERS ? '*' : (acpi_dbg_layer & ACPI_ALL_DRIVERS) == 0 ? ' ' : '-'); result += - sprintf(buffer + result, + sysfs_emit(buffer + result, "--\ndebug_layer = 0x%08X ( * = enabled)\n", acpi_dbg_layer); @@ -122,17 +122,17 @@ static int param_get_debug_level(char *buffer, const struct kernel_param *kp) int result = 0; int i; - result = sprintf(buffer, "%-25s\tHex SET\n", "Description"); + result = sysfs_emit(buffer, "%-25s\tHex SET\n", "Description"); for (i = 0; i < ARRAY_SIZE(acpi_debug_levels); i++) { - result += sprintf(buffer + result, "%-25s\t0x%08lX [%c]\n", + result += sysfs_emit(buffer + result, "%-25s\t0x%08lX [%c]\n", acpi_debug_levels[i].name, acpi_debug_levels[i].value, (acpi_dbg_level & acpi_debug_levels[i].value) ? '*' : ' '); } result += - sprintf(buffer + result, "--\ndebug_level = 0x%08X (* = enabled)\n", + sysfs_emit(buffer + result, "--\ndebug_level = 0x%08X (* = enabled)\n", acpi_dbg_level); return result; @@ -181,11 +181,11 @@ static int param_set_trace_method_name(const char *val, /* This is a hack. We can't kmalloc in early boot. */ if (is_abs_path) - strcpy(trace_method_name, val); + sysfs_emit(trace_method_name, "%s", val); else { - trace_method_name[0] = '\\'; - strcpy(trace_method_name+1, val); + sysfs_emit(trace_method_name, "\%s", val); } + pr_info("tracepoint: %s", trace_method_name); /* Restore the original tracer state */ (void)acpi_debug_trace(trace_method_name, @@ -255,13 +255,13 @@ static int param_set_trace_state(const char *val, static int param_get_trace_state(char *buffer, const struct kernel_param *kp) { if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED)) - return sprintf(buffer, "disable\n"); + return sysfs_emit(buffer, "disable\n"); if (!acpi_gbl_trace_method_name) - return sprintf(buffer, "enable\n"); + return sysfs_emit(buffer, "enable\n"); if (acpi_gbl_trace_flags & ACPI_TRACE_ONESHOT) - return sprintf(buffer, "method-once\n"); + return sysfs_emit(buffer, "method-once\n"); else - return sprintf(buffer, "method\n"); + return sysfs_emit(buffer, "method\n"); } module_param_call(trace_state, param_set_trace_state, param_get_trace_state, @@ -282,7 +282,7 @@ static int param_get_acpica_version(char *buffer, { int result; - result = sprintf(buffer, "%x\n", ACPI_CA_VERSION); + result = sysfs_emit(buffer, "%x\n", ACPI_CA_VERSION); return result; } @@ -366,9 +366,8 @@ static int acpi_table_attr_init(struct kobject *tables_obj, if (table_attr->instance > 1 || (table_attr->instance == 1 && !acpi_get_table (table_header->signature, 2, &header))) { - snprintf(instance_str, sizeof(instance_str), "%u", - table_attr->instance); - strcat(table_attr->filename, instance_str); + sysfs_emit(instance_str, "%u%s", table_attr->instance, + table_attr->filename); } table_attr->attr.size = table_header->length; @@ -687,7 +686,7 @@ static ssize_t counter_show(struct kobject *kobj, acpi_irq_not_handled; all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count = acpi_gpe_count; - size = sprintf(buf, "%8u", all_counters[index].count); + size = sysfs_emit(buf, "%8u", all_counters[index].count); /* "gpe_all" or "sci" */ if (index >= num_gpes + ACPI_NUM_FIXED_EVENTS) @@ -698,29 +697,29 @@ static ssize_t counter_show(struct kobject *kobj, goto end; if (status & ACPI_EVENT_FLAG_ENABLE_SET) - size += sprintf(buf + size, " EN"); + size += sysfs_emit(buf + size, " EN"); else - size += sprintf(buf + size, " "); + size += sysfs_emit(buf + size, " "); if (status & ACPI_EVENT_FLAG_STATUS_SET) - size += sprintf(buf + size, " STS"); + size += sysfs_emit(buf + size, " STS"); else - size += sprintf(buf + size, " "); + size += sysfs_emit(buf + size, " "); if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER)) - size += sprintf(buf + size, " invalid "); + size += sysfs_emit(buf + size, " invalid "); else if (status & ACPI_EVENT_FLAG_ENABLED) - size += sprintf(buf + size, " enabled "); + size += sysfs_emit(buf + size, " enabled "); else if (status & ACPI_EVENT_FLAG_WAKE_ENABLED) - size += sprintf(buf + size, " wake_enabled"); + size += sysfs_emit(buf + size, " wake_enabled"); else - size += sprintf(buf + size, " disabled "); + size += sysfs_emit(buf + size, " disabled "); if (status & ACPI_EVENT_FLAG_MASKED) - size += sprintf(buf + size, " masked "); + size += sysfs_emit(buf + size, " masked "); else - size += sprintf(buf + size, " unmasked"); + size += sysfs_emit(buf + size, " unmasked"); end: - size += sprintf(buf + size, "\n"); + size += sysfs_emit(buf + size, "\n"); return result ? result : size; } @@ -885,27 +884,27 @@ void acpi_irq_stats_init(void) char *name; if (i < num_gpes) - sprintf(buffer, "gpe%02X", i); + sysfs_emit(buffer, "gpe%02X", i); else if (i == num_gpes + ACPI_EVENT_PMTIMER) - sprintf(buffer, "ff_pmtimer"); + sysfs_emit(buffer, "ff_pmtimer"); else if (i == num_gpes + ACPI_EVENT_GLOBAL) - sprintf(buffer, "ff_gbl_lock"); + sysfs_emit(buffer, "ff_gbl_lock"); else if (i == num_gpes + ACPI_EVENT_POWER_BUTTON) - sprintf(buffer, "ff_pwr_btn"); + sysfs_emit(buffer, "ff_pwr_btn"); else if (i == num_gpes + ACPI_EVENT_SLEEP_BUTTON) - sprintf(buffer, "ff_slp_btn"); + sysfs_emit(buffer, "ff_slp_btn"); else if (i == num_gpes + ACPI_EVENT_RTC) - sprintf(buffer, "ff_rt_clk"); + sysfs_emit(buffer, "ff_rt_clk"); else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE) - sprintf(buffer, "gpe_all"); + sysfs_emit(buffer, "gpe_all"); else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI) - sprintf(buffer, "sci"); + sysfs_emit(buffer, "sci"); else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT) - sprintf(buffer, "sci_not"); + sysfs_emit(buffer, "sci_not"); else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_ERROR) - sprintf(buffer, "error"); + sysfs_emit(buffer, "error"); else - sprintf(buffer, "bug%02X", i); + sysfs_emit(buffer, "bug%02X", i); name = kstrdup(buffer, GFP_KERNEL); if (name == NULL) @@ -937,7 +936,7 @@ static void __exit interrupt_stats_exit(void) static ssize_t pm_profile_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile); + return sysfs_emit(buf, "%d\n", acpi_gbl_FADT.preferred_profile); } static const struct kobj_attribute pm_profile_attr = __ATTR_RO(pm_profile); @@ -946,7 +945,7 @@ static ssize_t enabled_show(struct kobject *kobj, struct kobj_attribute *attr, c { struct acpi_hotplug_profile *hotplug = to_acpi_hotplug_profile(kobj); - return sprintf(buf, "%d\n", hotplug->enabled); + return sysfs_emit(buf, "%d\n", hotplug->enabled); } static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, @@ -1000,7 +999,7 @@ void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug, static ssize_t force_remove_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - return sprintf(buf, "%d\n", 0); + return sysfs_emit(buf, "%d\n", 0); } static ssize_t force_remove_store(struct kobject *kobj, -- 2.50.0