Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b75bc91 authored by Sasha Levin's avatar Sasha Levin Committed by David Teigland
Browse files

dlm: check the maximum size of a request from user



device_write only checks whether the request size is big enough, but it doesn't
check if the size is too big.

At that point, it also tries to allocate as much memory as the user has requested
even if it's too much. This can lead to OOM killer kicking in, or memory corruption
if (count + 1) overflows.

Signed-off-by: default avatarSasha Levin <levinsasha928@gmail.com>
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 9c5bef58
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -503,6 +503,13 @@ static ssize_t device_write(struct file *file, const char __user *buf,
#endif
		return -EINVAL;

#ifdef CONFIG_COMPAT
	if (count > sizeof(struct dlm_write_request32) + DLM_RESNAME_MAXLEN)
#else
	if (count > sizeof(struct dlm_write_request) + DLM_RESNAME_MAXLEN)
#endif
		return -EINVAL;

	kbuf = kzalloc(count + 1, GFP_NOFS);
	if (!kbuf)
		return -ENOMEM;