Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp925732ybl; Thu, 23 Jan 2020 10:14:27 -0800 (PST) X-Google-Smtp-Source: APXvYqzEkP7IAUGrC9PW1g/vkcHd4aBO/dUo4mdcOyr5KOXrWHORrNcdI35Fk+ihjxf0gneqD+v4 X-Received: by 2002:aca:2114:: with SMTP id 20mr11729566oiz.9.1579803267198; Thu, 23 Jan 2020 10:14:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579803267; cv=none; d=google.com; s=arc-20160816; b=LWTeZZ6JxJWQA/I+2PU+KjxMMdcl5dnR3nDzzMIeGryPqru0SM7jn9NDnto3x+RsZh n1U3M8NNmaHVvu0AnsO42cmOmmIbMUrZeXHo2vxgRASZ9S9dN8hXEbZcDe3WQf+a/waf R/loM5w5bDvhJ7QYtONRNV2IWckghEG7K0HE5Jd7bzzOeY/985e1BV14V84rXBFUPO6e Gc3olDIU+cckjGKqcyOMG0s5+/KugSyNWyQmwtvOyruUWfnt/uAZJJRgvy4CCRTzSIGw ZczFrKnBMoZJrhgOzF4C481hZug8mGnfE46GebIlBwFV46+LX2J2qFFF0visgIpZrTBD sdXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject :smtp-origin-cluster:cc:to:smtp-origin-hostname:from :smtp-origin-hostprefix:dkim-signature; bh=CkmVwtrV35duuoCq5fkCbRvMAON5kuVztzk7kkKCe7I=; b=TpHhIZRPvqFSzq5iWodPGP6sPWAGMupABpLS+T8gNWLHAtqwUweAZ4NU2UylyxRmGL bj6sb7bHVNQB50/xeJecvtJcIKQMmSzDDPT8AOcZdWQMiE3WoiQ1K5NepORObXohF+rl eTZSO02UmAHCZlj6fcUS2ak8lRobEejiYcjtjPgawyiRHLFz2vtENzZc++OiB7Uu76T0 hFNbhyL5SYTvsZxDVEUM/AaZoSkgRRinixWWhg22+IS7ypa5vkghhSwScFuIH9xC9n+M 9c+D97Jhavm2/C6c2S5v4M5zTK5o8Ig9R7w/qVBHQkE8lZdRBpCKD0Y7aXB7G0cAx6qp wG1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b=VKK0YIQp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=fb.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t15si1161455oij.189.2020.01.23.10.14.13; Thu, 23 Jan 2020 10:14:27 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b=VKK0YIQp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=fb.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728925AbgAWSL5 (ORCPT + 99 others); Thu, 23 Jan 2020 13:11:57 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:5154 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727278AbgAWSL4 (ORCPT ); Thu, 23 Jan 2020 13:11:56 -0500 Received: from pps.filterd (m0001303.ppops.net [127.0.0.1]) by m0001303.ppops.net (8.16.0.42/8.16.0.42) with SMTP id 00NI3AWU032331 for ; Thu, 23 Jan 2020 10:11:54 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=facebook; bh=CkmVwtrV35duuoCq5fkCbRvMAON5kuVztzk7kkKCe7I=; b=VKK0YIQp94Avd91W1DAnYqUlDRZyrveiIcM4UT+r6205KGhV19V/cosKrrgX06/c6Y7q GAuDjVibWiVu01k7yoIEf+HgKZBiZpdb7yAIFGXO69qVw/HiSjUIIkb2PhnxEEKrLhIU pSv3VShiQFcKTdPvir+WDpTOjVrN8veCqaQ= Received: from maileast.thefacebook.com ([163.114.130.16]) by m0001303.ppops.net with ESMTP id 2xqem00n8r-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 23 Jan 2020 10:11:54 -0800 Received: from intmgw005.03.ash8.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Thu, 23 Jan 2020 10:11:54 -0800 Received: by devbig006.ftw2.facebook.com (Postfix, from userid 4523) id D1F2E62E32CF; Thu, 23 Jan 2020 10:11:49 -0800 (PST) Smtp-Origin-Hostprefix: devbig From: Song Liu Smtp-Origin-Hostname: devbig006.ftw2.facebook.com To: CC: , Song Liu , Alexander Shishkin , Arnaldo Carvalho de Melo , Jiri Olsa , Peter Zijlstra Smtp-Origin-Cluster: ftw2c04 Subject: [PATCH v3] perf/core: fix mlock accounting in perf_mmap() Date: Thu, 23 Jan 2020 10:11:46 -0800 Message-ID: <20200123181146.2238074-1-songliubraving@fb.com> X-Mailer: git-send-email 2.17.1 X-FB-Internal: Safe MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-01-23_11:2020-01-23,2020-01-23 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 suspectscore=1 spamscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 adultscore=0 lowpriorityscore=0 phishscore=0 impostorscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1910280000 definitions=main-2001230140 X-FB-Internal: deliver Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Eecreasing sysctl_perf_event_mlock between two consecutive perf_mmap()s of a perf ring buffer may lead to an integer underflow in locked memory accounting. This may lead to the undesired behaviors, such as failures in BPF map creation. Address this by adjusting the accounting logic to take into account the possibility that the amount of already locked memory may exceed the current limit. Fixes: c4b75479741c ("perf/core: Make the mlock accounting simple again") Signed-off-by: Song Liu Suggested-by: Alexander Shishkin Cc: Alexander Shishkin Cc: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Peter Zijlstra --- kernel/events/core.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index e543bab787e5..fdb7f7ef380c 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -5917,7 +5917,15 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma) */ user_lock_limit *= num_online_cpus(); - user_locked = atomic_long_read(&user->locked_vm) + user_extra; + user_locked = atomic_long_read(&user->locked_vm); + + /* + * sysctl_perf_event_mlock may have changed, so that + * user->locked_vm > user_lock_limit + */ + if (user_locked > user_lock_limit) + user_locked = user_lock_limit; + user_locked += user_extra; if (user_locked > user_lock_limit) { /* -- 2.17.1