]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r368460: kern: cpuset: plug a unr leak
authorKyle Evans <kevans@FreeBSD.org>
Tue, 15 Dec 2020 21:51:45 +0000 (21:51 +0000)
committerKyle Evans <kevans@FreeBSD.org>
Tue, 15 Dec 2020 21:51:45 +0000 (21:51 +0000)
commit64b4d0ba0b4e35589a88c6035d6675ce1770c01d
tree4965f544dbfde03fe049531bc8b66ff112aa2d5b
parente4e8ecaf63ba6f2767680a7b4666461243d88749
MFC r368460: kern: cpuset: plug a unr leak

cpuset_rel_defer() is supposed to be functionally equivalent to
cpuset_rel() but with anything that might sleep deferred until
cpuset_rel_complete -- this setup is used specifically for cpuset_setproc.

Add in the missing unr free to match cpuset_rel. This fixes a leak that
was observed when I wrote a small userland application to try and debug
another issue, which effectively did:

cpuset(&newid);
cpuset(&scratch);

newid gets leaked when scratch is created; it's off the list, so there's
no mechanism for anything else to relinquish it. A more realistic reproducer
would likely be a process that inherits some cpuset that it's the only ref
for, but it creates a new one to modify. Alternatively, administratively
reassigning a process' cpuset that it's the last ref for will have the same
effect.
sys/kern/kern_cpuset.c