Commit 5468c0fb authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

perf/core: Don't leak AUX buffer refcount on allocation failure



Failure of the AUX buffer allocation leaks the reference count.

Set the reference count to 1 only when the allocation succeeds.

Fixes: 45bfb2e5 ("perf: Add AUX area to ring buffer for raw data streams")
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: stable@vger.kernel.org
parent 54473e0e
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -7051,8 +7051,6 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
			ret = 0;
			goto unlock;
		}

		atomic_set(&rb->aux_mmap_count, 1);
	}

	user_lock_limit = sysctl_perf_event_mlock >> (PAGE_SHIFT - 10);
@@ -7119,9 +7117,11 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
	} else {
		ret = rb_alloc_aux(rb, event, vma->vm_pgoff, nr_pages,
				   event->attr.aux_watermark, flags);
		if (!ret)
		if (!ret) {
			atomic_set(&rb->aux_mmap_count, 1);
			rb->aux_mmap_locked = extra;
		}
	}

unlock:
	if (!ret) {
@@ -7130,6 +7130,7 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)

		atomic_inc(&event->mmap_count);
	} else if (rb) {
		/* AUX allocation failed */
		atomic_dec(&rb->mmap_count);
	}
aux_unlock: