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

Commit 52c3ce4e authored by Catalin Marinas's avatar Catalin Marinas
Browse files

kmemleak: Do not return a pointer to an object that kmemleak did not get



The kmemleak_seq_next() function tries to get an object (and increment
its use count) before returning it. If it could not get the last object
during list traversal (because it may have been freed), the function
should return NULL rather than a pointer to such object that it did not
get.

Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reported-by: default avatarPhil Carmody <ext-phil.2.carmody@nokia.com>
Acked-by: default avatarPhil Carmody <ext-phil.2.carmody@nokia.com>
Cc: <stable@kernel.org>
parent 8e10cd74
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1414,10 +1414,13 @@ static void *kmemleak_seq_next(struct seq_file *seq, void *v, loff_t *pos)
	++(*pos);

	list_for_each_continue_rcu(n, &object_list) {
		next_obj = list_entry(n, struct kmemleak_object, object_list);
		if (get_object(next_obj))
		struct kmemleak_object *obj =
			list_entry(n, struct kmemleak_object, object_list);
		if (get_object(obj)) {
			next_obj = obj;
			break;
		}
	}

	put_object(prev_obj);
	return next_obj;