lkml.org 
[lkml]   [2012]   [Oct]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 7/7] Add a format check for an existing variable name at erasing time
    Date
    [Issue]

    A format of variable name has been updated to type, id, count and ctime
    to support holding multiple logs.

    Format of current variable name
    dump-type0-1-2-12345678

    type:0
    id:1
    count:2
    ctime:12345678

    On the other hand, if an old variable name before being updated
    remains, users can't erase it via /dev/pstore.

    Format of old variable name
    dump-type0-1-12345678

    type:0
    id:1
    ctime:12345678

    [Solution]

    This patch adds a format check for the old variable name in a erase callback to make it erasable.

    Signed-off-by: Seiji Aguchi <seiji.aguchi@hds.com>
    ---
    drivers/firmware/efivars.c | 14 ++++++++++++--
    1 files changed, 12 insertions(+), 2 deletions(-)

    diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
    index dd228d5..b1cd028 100644
    --- a/drivers/firmware/efivars.c
    +++ b/drivers/firmware/efivars.c
    @@ -777,6 +777,8 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
    struct efivars *efivars = psi->data;
    struct efivar_entry *entry, *found = NULL;
    int i;
    + unsigned int type_old, part_old;
    + unsigned long time_old;

    sprintf(name, "dump-type%u-%u-%d-%lu", type, (unsigned int)id, count,
    time.tv_sec);
    @@ -796,8 +798,16 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
    if (efi_guidcmp(entry->var.VendorGuid, vendor))
    continue;
    if (utf16_strncmp(entry->var.VariableName, efi_name,
    - utf16_strlen(efi_name)))
    - continue;
    + utf16_strlen(efi_name))) {
    + /*
    + * Check if an old format,
    + * which doesn't support holding
    + * multiple logs, remains.
    + */
    + if (sscanf(name, "dump-type%u-%u-%lu",
    + &type_old, &part_old, &time_old) != 3)
    + continue;
    + }

    /* found */
    found = entry;
    -- 1.7.1

    \
     
     \ /
      Last update: 2012-10-27 00:21    [W:5.368 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site