x86/ras/mce_amd_inj: Return early on invalid input
Invalid inputs such as these are currently reported in dmesg as failing: $> echo sweet > flags [ 122.079139] flags_write: Invalid flags value: et even though the 'flags' attribute has been updated correctly: $> cat flags sw This is because userspace keeps writing the remaining buffer until it encounters an error. However, the input as a whole is wrong and we should not be writing anything to the file. Therefore, correct flags_write() to return -EINVAL immediately on bad input strings. Signed-off-by: Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Borislav Petkov <bp@alien8.de> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Link: http://lkml.kernel.org/r/1443190851-2172-2-git-send-email-Aravind.Gopalakrishnan@amd.com Link: http://lkml.kernel.org/r/1444641762-9437-3-git-send-email-bp@alien8.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
cdbcd239e2
commit
85c9306d44
|
@ -129,12 +129,9 @@ static ssize_t flags_write(struct file *filp, const char __user *ubuf,
|
||||||
{
|
{
|
||||||
char buf[MAX_FLAG_OPT_SIZE], *__buf;
|
char buf[MAX_FLAG_OPT_SIZE], *__buf;
|
||||||
int err;
|
int err;
|
||||||
size_t ret;
|
|
||||||
|
|
||||||
if (cnt > MAX_FLAG_OPT_SIZE)
|
if (cnt > MAX_FLAG_OPT_SIZE)
|
||||||
cnt = MAX_FLAG_OPT_SIZE;
|
return -EINVAL;
|
||||||
|
|
||||||
ret = cnt;
|
|
||||||
|
|
||||||
if (copy_from_user(&buf, ubuf, cnt))
|
if (copy_from_user(&buf, ubuf, cnt))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
@ -150,9 +147,9 @@ static ssize_t flags_write(struct file *filp, const char __user *ubuf,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppos += ret;
|
*ppos += cnt;
|
||||||
|
|
||||||
return ret;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct file_operations flags_fops = {
|
static const struct file_operations flags_fops = {
|
||||||
|
|
Loading…
Reference in New Issue