Patch "efi: Use ucs2_as_utf8 in efivarfs instead of open coding a bad version" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
efi: Use ucs2_as_utf8 in efivarfs instead of open coding a bad version
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
efi-use-ucs2_as_utf8-in-efivarfs-instead-of-open-coding-a-bad-version.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
e0d64e6a880e64545ad7d55786aa84ab76bac475Mon Sep 17 00:00:00 2001
From: Peter Jones <[email protected]>
Date: Mon, 8 Feb 2016 14:48:12 -0500
Subject: efi: Use ucs2_as_utf8 in efivarfs instead of open coding a bad version
From: Peter Jones <[email protected]>
commit e0d64e6a880e64545ad7d55786aa84ab76bac475 upstream.
Translate EFI's UCS-2 variable names to UTF-8 instead of just assuming all variable names fit in ASCII.
--- drivers/firmware/efi/efivars.c | 30 +++++++++++------------------- fs/efivarfs/super.c | 7 +++---- 2 files changed, 14 insertions(+), 23 deletions(-)
drivers/firmware/efi/efivars.c +11 -19
@@ -540,38 +540,30 @@ static ssize_t efivar_delete(struct filestatic int efivar_create_sysfs_entry (struct efivar_entry *new_var) { -int i, short_name_size; +int short_name_size;char *short_name; -unsigned long variable_name_size; -efi_char16_t *variable_name; +unsigned long utf8_name_size; +efi_char16_t *variable_name = new_var->var.VariableName;int ret; - variable_name = new_var->var.VariableName; - variable_name_size =ucs2_strlen (variable_name) *sizeof (efi_char16_t); -/* -* Length of the variable bytes in ASCII, plus the '-' separator, +* Length of the variable bytes in UTF8, plus the '-' separator, * plus the GUID, plus trailing NUL */ - short_name_size = variable_name_size /sizeof (efi_char16_t) - +1 +EFI_VARIABLE_GUID_LEN +1 ; - - short_name =kzalloc (short_name_size,GFP_KERNEL ); + utf8_name_size =ucs2_utf8size (variable_name); + short_name_size = utf8_name_size +1 +EFI_VARIABLE_GUID_LEN +1 ; + short_name =kmalloc (short_name_size,GFP_KERNEL );if (!short_name)return -ENOMEM ; -/* Convert Unicode to normal chars (assume top bits are 0), -ala UTF-8 */ -for (i=0 ; i < (int )(variable_name_size /sizeof (efi_char16_t)); i++) { - short_name[i] = variable_name[i] &0xFF ; - } +ucs2_as_utf8 (short_name, variable_name, short_name_size); +/* This is ugly, but necessary to separate one vendor's private variables from another's. */ - - *(short_name +strlen (short_name)) ='-' ; + short_name[utf8_name_size] ='-' ;efi_guid_to_str (&new_var->var.VendorGuid, - short_name +strlen (short_name)); + short_name + utf8_name_size +1 ); new_var->kobj.kset = efivars_kset;
fs/efivarfs/super.c +3 -4
@@ -118,7 +118,7 @@ static int efivarfs_callback(efi_char16_struct dentry *dentry, *root = sb->s_root;unsigned long size =0 ;char *name; -int len, i; +int len;int err = -ENOMEM ; entry =kzalloc (sizeof (*entry),GFP_KERNEL );
@@ -128,15 +128,14 @@ static int efivarfs_callback(efi_char16_memcpy (entry->var.VariableName, name16, name_size);memcpy (&(entry->var.VendorGuid), &vendor,sizeof (efi_guid_t)); - len =ucs2_strlen (entry->var.VariableName); + len =ucs2_utf8size (entry->var.VariableName);/* name, plus '-', plus GUID, plus NUL*/ name =kmalloc (len +1 +EFI_VARIABLE_GUID_LEN +1 ,GFP_KERNEL );if (!name) goto fail; -for (i =0 ; i < len; i++) - name[i] = entry->var.VariableName[i] &0xFF ; +ucs2_as_utf8 (name, entry->var.VariableName, len); name[len] ='-' ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/efi-do-variable-name-validation-tests-in-utf8.patch queue-4.4/efi-make-our-variable-validation-list-include-the-guid.patch queue-4.4/efi-use-ucs2_as_utf8-in-efivarfs-instead-of-open-coding-a-bad-version.patch queue-4.4/efi-add-pstore-variables-to-the-deletion-whitelist.patch queue-4.4/efi-make-efivarfs-entries-immutable-by-default.patch queue-4.4/lib-ucs2_string-correct-ucs2-utf8-conversion.patch queue-4.4/lib-ucs2_string-add-ucs2-utf8-helper-functions.patch