do some checks on the label's length and ending.

Signed-off-by: Dongbo Cao <cdb...@163.com>
---
 drivers/md/bcache/sysfs.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index e64c718f..cce793ef 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -447,8 +447,15 @@ STORE(__bch_flash_dev)
        }
 
        if (attr == &sysfs_label) {
+               if (size > SB_LABEL_SIZE)
+                       return -EINVAL;
                memcpy(u->label, buf, SB_LABEL_SIZE);
-               bch_uuid_write(d->c);
+               if (size < SB_LABEL_SIZE)
+                       u->label[size] = '\0';
+               if (size && u->label[size - 1] == '\n')
+                       u->label[size - 1] = '\0';
+               if(d->c)
+                       bch_uuid_write(d->c);
        }
 
        if (attr == &sysfs_unregister) {
-- 
2.17.1


Reply via email to