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

Commit c32b8f70 authored by Jin Qian's avatar Jin Qian Committed by TARKZiM
Browse files

uid_sys_stats: fix overflow when io usage delta is negative



Setuid can cause negative delta. Check this and update total usage only
if delta is positive.

Bug: 64317562
Change-Id: I4818c246db66cabf3b11d277faceedec1678694a
Signed-off-by: default avatarJin Qian <jinqian@google.com>
parent e7366b94
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -235,13 +235,29 @@ static void compute_uid_io_bucket_stats(struct io_stats *io_bucket,
					struct io_stats *io_last,
					struct io_stats *io_dead)
{
	io_bucket->read_bytes += io_curr->read_bytes + io_dead->read_bytes -
	s64 delta;

	delta = io_curr->read_bytes + io_dead->read_bytes -
		io_last->read_bytes;
	io_bucket->write_bytes += io_curr->write_bytes + io_dead->write_bytes -
	if (delta > 0)
		io_bucket->read_bytes += delta;

	delta = io_curr->write_bytes + io_dead->write_bytes -
		io_last->write_bytes;
	io_bucket->rchar += io_curr->rchar + io_dead->rchar - io_last->rchar;
	io_bucket->wchar += io_curr->wchar + io_dead->wchar - io_last->wchar;
	io_bucket->fsync += io_curr->fsync + io_dead->fsync - io_last->fsync;
	if (delta > 0)
		io_bucket->write_bytes += delta;

	delta = io_curr->rchar + io_dead->rchar - io_last->rchar;
	if (delta > 0)
		io_bucket->rchar += delta;

	delta = io_curr->wchar + io_dead->wchar - io_last->wchar;
	if (delta > 0)
		io_bucket->wchar += delta;

	delta = io_curr->fsync + io_dead->fsync - io_last->fsync;
	if (delta > 0)
		io_bucket->fsync += delta;

	io_last->read_bytes = io_curr->read_bytes;
	io_last->write_bytes = io_curr->write_bytes;