Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1752754ybl; Thu, 5 Dec 2019 06:31:01 -0800 (PST) X-Google-Smtp-Source: APXvYqyv7e5ycJFuXJRrDABQVVP41RsjZMmX5YXL3WloZ01Glea1L3iANZigJfl+4jBbhgiIaPyd X-Received: by 2002:a05:6830:18e6:: with SMTP id d6mr7010116otf.170.1575556261033; Thu, 05 Dec 2019 06:31:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575556261; cv=none; d=google.com; s=arc-20160816; b=pmHNDVPq4ydzG/cTpcCH8VpHswJ/tSBC5A4RrfoI8Z+YapqT1kaMg7NWrMY8dz6KJl 9QtEY5QGx3kmmTnrY5VjNOjlGZq/Xc95wQyBmZFnHlc7OGkggyz2GvuBori3Ecky5lFv TiMmveptVI1YSFdTjV355o/iMIS2/AJd581C8QkX5Jb/D8lRQenHb3kRJ5z2pERxWraU mBIvftF2gh1V5vqOhWH/PYSkhjIBqvwKFXW+3Kge9QpXxorTMD2d6c+MV9QmO0dp46Sk djbmpkKCF+q16v6bXKorM8q58nOKMkv+HLT8wLEPQKdyezOofAvjVADylH85jkSCAMnP rsbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=xyvK4tdCluWMTiO0L4jC4Qy1PthCSOFpXjRaN7Y8PhU=; b=sV90PDjiE2H/CAIno745uz5OIDhq49b4cvA/yoftKKtlDP0dYWnrXRAmMLcMeOZ9kX FV2fK9P6EeRpbLZ9ITNFWw9Em1CA3RQsMHbdY6K880wyLxaW1OrW4PMQB4RmuZ6x2nVk StA0BPylgjD/p1owwwODbtbIJgz8fxN0iEh46nDt2mSsuPBdgg+uaPXKYYUGA2P3UoAl 76VRpXXLFdAYoqM76aUW2bTs9K1JgRQLXcaUjfceI5kQfTwVQDJvTIN0PxXdxvAr8ekM jImDcXrs5rAm8yOnszcbq1udxu3nepfJsbTk6H0KJONyoitV5HtjzUPS1Pft9CDZ8mhj G1+w== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s17si4545461otr.155.2019.12.05.06.30.46; Thu, 05 Dec 2019 06:31:01 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729572AbfLEO3E (ORCPT + 99 others); Thu, 5 Dec 2019 09:29:04 -0500 Received: from mga18.intel.com ([134.134.136.126]:12291 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729530AbfLEO3C (ORCPT ); Thu, 5 Dec 2019 09:29:02 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Dec 2019 06:29:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,281,1571727600"; d="scan'208";a="209170931" Received: from black.fi.intel.com (HELO black.fi.intel.com.) ([10.237.72.28]) by fmsmga007.fm.intel.com with ESMTP; 05 Dec 2019 06:29:00 -0800 From: Alexander Shishkin To: Peter Zijlstra Cc: Arnaldo Carvalho de Melo , Ingo Molnar , linux-kernel@vger.kernel.org, Jiri Olsa , Alexander Shishkin Subject: [PATCH 2/2] perf/x86/intel/bts: Fix the use of page_private() Date: Thu, 5 Dec 2019 17:28:53 +0300 Message-Id: <20191205142853.28894-3-alexander.shishkin@linux.intel.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191205142853.28894-1-alexander.shishkin@linux.intel.com> References: <20191205142853.28894-1-alexander.shishkin@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 8062382c8dbe2 ("perf/x86/intel/bts: Add BTS PMU driver") uses page_private(page) without checking the PagePrivate(page) first, which seems like a potential bug, considering that page->private aliases with other stuff in struct page. Fix this by checking PagePrivate() first. Signed-off-by: Alexander Shishkin Fixes: 8062382c8dbe2 ("perf/x86/intel/bts: Add BTS PMU driver") --- arch/x86/events/intel/bts.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c index d53b4fb86d87..9e4da1c5a129 100644 --- a/arch/x86/events/intel/bts.c +++ b/arch/x86/events/intel/bts.c @@ -63,9 +63,17 @@ struct bts_buffer { static struct pmu bts_pmu; +static int buf_nr_pages(struct page *page) +{ + if (!PagePrivate(page)) + return 1; + + return 1 << page_private(page); +} + static size_t buf_size(struct page *page) { - return 1 << (PAGE_SHIFT + page_private(page)); + return 1 << (PAGE_SHIFT + buf_nr_pages(page)); } static void * @@ -83,7 +91,7 @@ bts_buffer_setup_aux(struct perf_event *event, void **pages, /* count all the high order buffers */ for (pg = 0, nbuf = 0; pg < nr_pages;) { page = virt_to_page(pages[pg]); - pg += 1 << page_private(page); + pg += buf_nr_pages(page); nbuf++; } @@ -107,7 +115,7 @@ bts_buffer_setup_aux(struct perf_event *event, void **pages, unsigned int __nr_pages; page = virt_to_page(pages[pg]); - __nr_pages = PagePrivate(page) ? 1 << page_private(page) : 1; + __nr_pages = buf_nr_pages(page); buf->buf[nbuf].page = page; buf->buf[nbuf].offset = offset; buf->buf[nbuf].displacement = (pad ? BTS_RECORD_SIZE - pad : 0); -- 2.24.0