lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 034/211] gsmi: Fix bug in append_to_eventlog sysfs handler
    Date
    From: Duncan Laurie <dlaurie@chromium.org>

    [ Upstream commit 655603de68469adaff16842ac17a5aec9c9ce89b ]

    The sysfs handler should return the number of bytes consumed, which in the
    case of a successful write is the entire buffer. Also fix a bug where
    param.data_len was being set to (count - (2 * sizeof(u32))) instead of just
    (count - sizeof(u32)). The latter is correct because we skip over the
    leading u32 which is our param.type, but we were also incorrectly
    subtracting sizeof(u32) on the line where we were actually setting
    param.data_len:

    param.data_len = count - sizeof(u32);

    This meant that for our example event.kernel_software_watchdog with total
    length 10 bytes, param.data_len was just 2 prior to this change.

    To test, successfully append an event to the log with gsmi sysfs.
    This sample event is for a "Kernel Software Watchdog"

    > xxd -g 1 event.kernel_software_watchdog
    0000000: 01 00 00 00 ad de 06 00 00 00

    > cat event.kernel_software_watchdog > /sys/firmware/gsmi/append_to_eventlog

    > mosys eventlog list | tail -1
    14 | 2012-06-25 10:14:14 | Kernl Event | Software Watchdog

    Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
    Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
    Reviewed-by: Stefan Reinauer <reinauer@chromium.org>
    Signed-off-by: Furquan Shaikh <furquan@google.com>
    Tested-by: Furquan Shaikh <furquan@chromium.org>
    Reviewed-by: Aaron Durbin <adurbin@chromium.org>
    Reviewed-by: Justin TerAvest <teravest@chromium.org>
    [zwisler: updated changelog for 2nd bug fix and upstream]
    Signed-off-by: Ross Zwisler <zwisler@google.com>
    Reviewed-by: Guenter Roeck <groeck@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/firmware/google/gsmi.c | 5 ++---
    1 file changed, 2 insertions(+), 3 deletions(-)

    diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c
    index c8f169bf2e27d..62337be07afcb 100644
    --- a/drivers/firmware/google/gsmi.c
    +++ b/drivers/firmware/google/gsmi.c
    @@ -480,11 +480,10 @@ static ssize_t eventlog_write(struct file *filp, struct kobject *kobj,
    if (count < sizeof(u32))
    return -EINVAL;
    param.type = *(u32 *)buf;
    - count -= sizeof(u32);
    buf += sizeof(u32);

    /* The remaining buffer is the data payload */
    - if (count > gsmi_dev.data_buf->length)
    + if ((count - sizeof(u32)) > gsmi_dev.data_buf->length)
    return -EINVAL;
    param.data_len = count - sizeof(u32);

    @@ -504,7 +503,7 @@ static ssize_t eventlog_write(struct file *filp, struct kobject *kobj,

    spin_unlock_irqrestore(&gsmi_dev.lock, flags);

    - return rc;
    + return (rc == 0) ? count : rc;

    }

    --
    2.20.1



    \
     
     \ /
      Last update: 2019-11-27 22:37    [W:2.668 / U:0.384 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site