]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commit
workqueue: Fix pwq ref leak in rescuer_thread()
authorTejun Heo <tj@kernel.org>
Wed, 25 Sep 2019 13:59:15 +0000 (06:59 -0700)
committerSeth Forshee <seth.forshee@canonical.com>
Mon, 6 Jan 2020 13:33:22 +0000 (07:33 -0600)
commit63567df7d4e0d49849b2481263c8f040afa29a50
tree7be98621fb2cadb3c1b584ec5074f15008c5c8a2
parentdbcc660118fd2c3c23fbfebc2e399af6f5b5a973
workqueue: Fix pwq ref leak in rescuer_thread()

BugLink: https://bugs.launchpad.net/bugs/1858424
commit e66b39af00f426b3356b96433d620cb3367ba1ff upstream.

008847f66c3 ("workqueue: allow rescuer thread to do more work.") made
the rescuer worker requeue the pwq immediately if there may be more
work items which need rescuing instead of waiting for the next mayday
timer expiration.  Unfortunately, it doesn't check whether the pwq is
already on the mayday list and unconditionally gets the ref and moves
it onto the list.  This doesn't corrupt the list but creates an
additional reference to the pwq.  It got queued twice but will only be
removed once.

This leak later can trigger pwq refcnt warning on workqueue
destruction and prevent freeing of the workqueue.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: "Williams, Gerald S" <gerald.s.williams@intel.com>
Cc: NeilBrown <neilb@suse.de>
Cc: stable@vger.kernel.org # v3.19+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
kernel/workqueue.c