Commit 247576bf authored by Alexander Egorenkov's avatar Alexander Egorenkov Committed by Alexander Gordeev
Browse files

s390/ipl: Do not accept z/VM CP diag X'008' cmds longer than max length



The old implementation of vmcmd sysfs string attributes truncated passed
z/VM CP diagnose X'008' commands which were longer than the max allowed
number of characters but the reported number of written characters was
still equal to the entire length of a given string. This can result in
silent failures of some s390-tools (e.g. dumpconf) which can be very hard
to detect. Therefore, this commit makes a write attempt to a vmcmd sysfs
attribute
* fail with E2BIG error if a given string is longer than the maximum
  allowed one
* never destroy the old data in the vmcmd sysfs attribute if the new data
  doesn't fit into it entirely
* return the actual number of written characters if it succeeds

Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarAlexander Egorenkov <egorenar@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
parent 72935e3a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -266,7 +266,11 @@ static ssize_t sys_##_prefix##_##_name##_store(struct kobject *kobj, \
		struct kobj_attribute *attr,				\
		const char *buf, size_t len)				\
{									\
	strscpy(_value, buf, sizeof(_value));				\
	if (len >= sizeof(_value))					\
		return -E2BIG;						\
	len = strscpy(_value, buf, sizeof(_value));			\
	if (len < 0)							\
		return len;						\
	strim(_value);							\
	return len;							\
}									\