All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Toshi Kani <toshi.kani@hpe.com>
Cc: mchehab@osg.samsung.com, dougthompson@xmission.com,
	linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org,
	elliott@hpe.com, tony.luck@intel.com
Subject: Re: [PATCH v2 2/2] EDAC: Fix sysfs dimm_label store operation
Date: Thu, 24 Sep 2015 18:48:30 +0200	[thread overview]
Message-ID: <20150924164830.GF3774@pd.tnic> (raw)
In-Reply-To: <1442933883-21587-3-git-send-email-toshi.kani@hpe.com>

On Tue, Sep 22, 2015 at 08:58:03AM -0600, Toshi Kani wrote:
> Sysfs "dimm_label" and "chX_dimm_label" have the following issues
> in their store operation.
> 
>  1) A newline-terminated input string causes redundant newlines
> 
>   # echo "test" > /sys/bus/mc0/devices/dimm0/dimm_label
>   # cat  /sys/bus/mc0/devices/dimm0/dimm_label
>   test
> 
>   #  od -bc /sys/bus/mc0/devices/dimm0/dimm_label
>   0000000 164 145 163 164 012 012
>             t   e   s   t  \n  \n
>   0000006
> 
>  2) The original label string (31 characters) cannot be stored due to
>     an improper size check
> 
>   # echo "CPU_SrcID#0_Ha#0_Chan#0_DIMM#0" \
>   > /sys/bus/mc0/devices/dimm0/dimm_label
>   # cat /sys/bus/mc0/devices/dimm0/dimm_label
> 
> 
>   # od -bc /sys/bus/mc0/devices/dimm0/dimm_label
>    0000000 012 012
>             \n  \n
>    0000002
> 
>  3) An input string longer than the buffer size results a wrong label
>     info as it allows a retry with the remaining string.
> 
>   # echo "CPU_SrcID#0_Ha#0_Chan#0_DIMM#0_TEST" \
>   > /sys/bus/mc0/devices/dimm0/dimm_label
>   # cat  /sys/bus/mc0/devices/dimm0/dimm_label
>   _TEST
> 
> Fix these issues by making the following changes:
>  1) Replace a newline charactor at the end by setting a null. It also
>     assures that the string is null-terminated within the size.
>  2) Check the label buffer size with 'sizeof(dimm->label)'.
>  3) Fail a request if its string exceeds the label buffer size.
> 
> Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
> Acked-by: Tony Luck <tony.luck@intel.com>
> Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Doug Thompson <dougthompson@xmission.com>
> Cc: Robert Elliott <elliott@hpe.com>
> Cc: Tony Luck <tony.luck@intel.com>
> ---
>  drivers/edac/edac_mc_sysfs.c |   20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)

...

> @@ -495,13 +495,13 @@ static ssize_t dimmdev_label_store(struct device *dev,
>  {
>  	struct dimm_info *dimm = to_dimm(dev);
>  
> -	ssize_t max_size = 0;
> +	if (count == 0 || count > sizeof(dimm->label))
> +		return -EINVAL;

$ echo "" > /sys/bus/mc0/devices/dimm0/dimm_label
$ od -bc /sys/bus/mc0/devices/dimm0/dimm_label
0000000
$ cat /sys/bus/mc0/devices/dimm0/dimm_label
$

I don't think we want to allow empty labels. I guess something like this
(2 because there's also the additional "\n"):

diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index d4e0bff268d8..e52ba338334b 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -241,7 +241,7 @@ static ssize_t channel_dimm_label_store(struct device *dev,
        unsigned chan = to_channel(mattr);
        struct rank_info *rank = csrow->channels[chan];
 
-       if (count == 0 || count > sizeof(rank->dimm->label))
+       if (count < 2 || count > sizeof(rank->dimm->label))
                return -EINVAL;
 
        strncpy(rank->dimm->label, data, count);
@@ -495,7 +495,7 @@ static ssize_t dimmdev_label_store(struct device *dev,
 {
        struct dimm_info *dimm = to_dimm(dev);
 
-       if (count == 0 || count > sizeof(dimm->label))
+       if (count < 2 || count > sizeof(dimm->label))
                return -EINVAL;
 
        strncpy(dimm->label, data, count);

-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.

  reply	other threads:[~2015-09-24 16:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-22 14:58 [PATCH v2 0/2] EDAC: Fix sysfs dimm_label show & store operations Toshi Kani
2015-09-22 14:58 ` [PATCH v2 1/2] EDAC: Fix sysfs dimm_label show operation Toshi Kani
2015-09-22 14:58 ` [PATCH v2 2/2] EDAC: Fix sysfs dimm_label store operation Toshi Kani
2015-09-24 16:48   ` Borislav Petkov [this message]
2015-09-24 19:06     ` Toshi Kani
2015-09-24 19:15       ` Borislav Petkov
2015-09-24 19:59         ` Toshi Kani
2015-09-25 17:49           ` Borislav Petkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150924164830.GF3774@pd.tnic \
    --to=bp@alien8.de \
    --cc=dougthompson@xmission.com \
    --cc=elliott@hpe.com \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab@osg.samsung.com \
    --cc=tony.luck@intel.com \
    --cc=toshi.kani@hpe.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.