bcache: Strip endline when writing the label through sysfs

sysfs attributes with unusual characters have crappy failure modes
in Squeeze (udev 164); later versions of udev are unaffected.

This should make these characters more unusual.

Signed-off-by: Gabriel de Perthuis <g2p.code@gmail.com>
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Gabriel de Perthuis 2013-09-23 23:17:28 -07:00 committed by Linus Torvalds
parent 6d9d21e35f
commit aee6f1cfff
1 changed files with 7 additions and 2 deletions

View File

@ -223,8 +223,13 @@ STORE(__cached_dev)
} }
if (attr == &sysfs_label) { if (attr == &sysfs_label) {
/* note: endlines are preserved */ if (size > SB_LABEL_SIZE)
memcpy(dc->sb.label, buf, SB_LABEL_SIZE); return -EINVAL;
memcpy(dc->sb.label, buf, size);
if (size < SB_LABEL_SIZE)
dc->sb.label[size] = '\0';
if (size && dc->sb.label[size - 1] == '\n')
dc->sb.label[size - 1] = '\0';
bch_write_bdev_super(dc, NULL); bch_write_bdev_super(dc, NULL);
if (dc->disk.c) { if (dc->disk.c) {
memcpy(dc->disk.c->uuids[dc->disk.id].label, memcpy(dc->disk.c->uuids[dc->disk.id].label,