MODULE_VERSION(EFIVARS_VERSION);
 
 #define DUMP_NAME_LEN 52
-#define GUID_LEN 37
+
+/*
+ * Length of a GUID string (strlen("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"))
+ * not including trailing NUL
+ */
+#define GUID_LEN 36
 
 /*
  * The maximum size of VariableName + Data = 1024
        struct efivar_entry *var;
        int namelen, i = 0, err = 0;
 
-       if (dentry->d_name.len < 38)
+       /*
+        * We need a GUID, plus at least one letter for the variable name,
+        * plus the '-' separator
+        */
+       if (dentry->d_name.len < GUID_LEN + 2)
                return -EINVAL;
 
        inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
                goto out;
        }
 
-       namelen = dentry->d_name.len - GUID_LEN;
+       /* length of the variable name itself: remove GUID and separator */
+       namelen = dentry->d_name.len - GUID_LEN - 1;
 
        efivarfs_hex_to_guid(dentry->d_name.name + namelen + 1,
                        &var->var.VendorGuid);
 
                len = utf16_strlen(entry->var.VariableName);
 
-               /* GUID plus trailing NULL */
-               name = kmalloc(len + 38, GFP_ATOMIC);
+               /* name, plus '-', plus GUID, plus NUL*/
+               name = kmalloc(len + 1 + GUID_LEN + 1, GFP_ATOMIC);
                if (!name)
                        goto fail;
 
 
                efi_guid_unparse(&entry->var.VendorGuid, name + len + 1);
 
-               name[len+GUID_LEN] = '\0';
+               name[len+GUID_LEN+1] = '\0';
 
                inode = efivarfs_get_inode(efivarfs_sb, root->d_inode,
                                          S_IFREG | 0644, 0);
                          efi_char16_t *variable_name,
                          efi_guid_t *vendor_guid)
 {
-       int i, short_name_size = variable_name_size / sizeof(efi_char16_t) + 38;
+       int i, short_name_size;
        char *short_name;
        struct efivar_entry *new_efivar;
 
-       short_name = kzalloc(short_name_size + 1, GFP_KERNEL);
+       /*
+        * Length of the variable bytes in ASCII, plus the '-' separator,
+        * plus the GUID, plus trailing NUL
+        */
+       short_name_size = variable_name_size / sizeof(efi_char16_t)
+                               + 1 + GUID_LEN + 1;
+
+       short_name = kzalloc(short_name_size, GFP_KERNEL);
        new_efivar = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL);
 
        if (!short_name || !new_efivar)  {