Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp4890645imm; Tue, 11 Sep 2018 20:40:17 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbFEdFxN+annIw8GSC9Sz9YxPoeTOJMKWZmUNTvp88DZPRPKA/yxRgfeVzXO4wtH+VXEXgT X-Received: by 2002:a63:6a06:: with SMTP id f6-v6mr31463008pgc.63.1536723617064; Tue, 11 Sep 2018 20:40:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536723617; cv=none; d=google.com; s=arc-20160816; b=cLjsj6Vf6+TDrTgFhzAvitIOLXQn6LH4JIeK/gX1iXQOxrYdkuZmaL5rs9+OVL1Rkh rFjYgxRGKSsyyjnjjYknpKmW9CBCXtylho4cJ8I6yYxxGsqFSF2w+SviAvuNkca+OXpB PlMC1KDG/9HKn2AyMszU3ydvcin669+9JlyHIDoP0zeLA8Ug7YBcCJb3zXpAUP6Ymygr eJca0VFg7jr2iOP+s0rOnLm+j842hPePnesLXFOzyQO3Z8KgUfZZBRXBfwYt9N/ViCsA fiIQrJtxej9Im9qnM/Qb9gaZ+BQaJQVvacc/JQWQbvNa5YpZHhmOFOr09pdmuEwZ2yku t+OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:to:from; bh=0lU7YQrWOu0xmj04O/rBHN4noB21PDZVsIjNjLgIEQw=; b=bZFw2KV6qm0dblzOBdFGwletRlzFKjBdJEko9hu79hKsip1QY8vHSEGoh6KyzGJez7 dstU1ynw87LcGgiwWx+t39y5L5eqC7K2AUbqS5/4kX2lB/Ra4CVzqSDXsPcH0X/wcQmk zAxKKbFQjN8cdpH8EaLx2elGFMK+WS/zDVqEcyahL/JVyPwWGRI7PKc/N4rv+HZODRvc bsAWCjTsf2pLiRlOEsnMgf5dTEecWojAEPz/D5JguPCykrhYX1Nvt+a+YismCyiYA1aw yL/r4k5vvKtORpjxveLNFBXbyS+t88tyQVnOs6MTOkLgo3O1Y6ArGm9a9K4Hni5mcfFv MFDA== 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 u8-v6si20927614plz.481.2018.09.11.20.39.48; Tue, 11 Sep 2018 20:40:17 -0700 (PDT) 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 S1727044AbeILIjU (ORCPT + 99 others); Wed, 12 Sep 2018 04:39:20 -0400 Received: from mga12.intel.com ([192.55.52.136]:25880 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726646AbeILIjU (ORCPT ); Wed, 12 Sep 2018 04:39:20 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Sep 2018 20:36:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,363,1531810800"; d="scan'208";a="72252232" Received: from shbuild000.sh.intel.com (HELO byang_ol.sh.intel.com) ([10.239.144.215]) by orsmga007.jf.intel.com with ESMTP; 11 Sep 2018 20:36:40 -0700 From: Bin Yang To: keescook@chromium.org, anton@enomsg.org, ccross@android.com, tony.luck@intel.com, linux-kernel@vger.kernel.org, bin.yang@intel.com Subject: [PATCH] pstore: fix incorrect persistent ram buffer mapping Date: Wed, 12 Sep 2018 03:36:34 +0000 Message-Id: <1536723394-14616-1-git-send-email-bin.yang@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org persistent_ram_vmap() returns the page start vaddr. persistent_ram_iomap() supports non-page-aligned mapping. persistent_ram_buffer_map() always adds offset-in-page to the vaddr returned from these two functions, which causes incorrect mapping of non-page-aligned persistent ram buffer. Signed-off-by: Bin Yang --- fs/pstore/ram_core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c index 951a14e..7c05fdd 100644 --- a/fs/pstore/ram_core.c +++ b/fs/pstore/ram_core.c @@ -429,7 +429,7 @@ static void *persistent_ram_vmap(phys_addr_t start, size_t size, vaddr = vmap(pages, page_count, VM_MAP, prot); kfree(pages); - return vaddr; + return vaddr + offset_in_page(start); } static void *persistent_ram_iomap(phys_addr_t start, size_t size, @@ -468,7 +468,7 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size, return -ENOMEM; } - prz->buffer = prz->vaddr + offset_in_page(start); + prz->buffer = prz->vaddr; prz->buffer_size = size - sizeof(struct persistent_ram_buffer); return 0; @@ -515,7 +515,7 @@ void persistent_ram_free(struct persistent_ram_zone *prz) if (prz->vaddr) { if (pfn_valid(prz->paddr >> PAGE_SHIFT)) { - vunmap(prz->vaddr); + vunmap(prz->vaddr - offset_in_page(prz->paddr)); } else { iounmap(prz->vaddr); release_mem_region(prz->paddr, prz->size); -- 2.7.4