lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 11 Aug 2014 01:26:45 +0000
From:	"Sha, Ruibin" <ruibin.sha@...el.com>
To:	Chintan Pandya <cpandya@...eaurora.org>
CC:	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	"linux-mm@...ck.org" <linux-mm@...ck.org>,
	"mel@....ul.ie" <mel@....ul.ie>,
	"a.p.zijlstra@...llo.nl" <a.p.zijlstra@...llo.nl>,
	"mgorman@...e.de" <mgorman@...e.de>,
	"mingo@...hat.com" <mingo@...hat.com>,
	"Zhang, Yanmin" <yanmin.zhang@...el.com>,
	"He, Bo" <bo.he@...el.com>
Subject: RE: [PATCH]  export the function kmap_flush_unused.

Hi Chintan,
Thank you very much for your timely and kindly response and comments.

Here is more detail about our Scenario:

    We have a big driver on Android product. The driver allocates lots of
    DDR pages. When applications mmap a file exported from the driver,
    driver would mmap the pages to the application space, usually with
    uncachable prot.
    On ia32/x86_64 arch, we have to avoid page cache alias issue. When
    driver allocates the pages, it would change page original mapping in
    page table with uncachable prot. Sometimes, the allocated page was
    used by kmap/kunmap. After kunmap, the page is still mapped in KMAP
    space. The entries in KMAP page table are not cleaned up until a
    kernel thread flushes the freed KMAP pages(usually it is woken up by kunmap).
    It means the driver need  force to flush the KMAP page table entries before mapping pages to
    application space to be used. Otherwise, there is a race to create
    cache alias.

    To resolve this issue, we need export function kmap_flush_unused as
    the driver is compiled as module. Then, the driver calls
    kmap_flush_unused if the allocated pages are in HIGHMEM and being
    used by kmap.

Thanks again!

Best Regards
---------------------------------------------------------------
Sha, Rui bin ( Robin )
+86 13817890945
Android System Integration Shanghai

-----Original Message-----
From: Chintan Pandya [mailto:cpandya@...eaurora.org] 
Sent: Friday, August 8, 2014 9:40 PM
To: Sha, Ruibin
Cc: linux-kernel@...r.kernel.org; linux-mm@...ck.org; mel@....ul.ie; a.p.zijlstra@...llo.nl; mgorman@...e.de; mingo@...hat.com; Zhang, Yanmin; He, Bo
Subject: Re: [PATCH] export the function kmap_flush_unused.

On 08/08/2014 02:46 PM, Sha, Ruibin wrote:
> export the function kmap_flush_unused.
>
> Scenario: When graphic driver need high memory spece, we use 
> alloc_pages() to allocate. But if the allocated page has just been 
> mapped in the KMAP space(like first kmap then kunmap) and no flush 
> page happened on PKMAP, the page virtual address is not NULL.Then when 
> we get that page and set page attribute like set_memory_uc and 
> set_memory_wc, we hit error.

Could you explain your scenario with more details ? set_memory_* should be applied on mapped address. And in attempt to map your page (which was just kmap and kunmap'ed), it will overwrite the previous mappings.

Moreover, in my view, kmap_flush_unused is just helping us in keeping the cache clean for kmap virtual addresses if they are unmapped. Is it serving any more purpose here ?

>
> fix: For that scenario,when we get the allocated page and its virtual
> address is not NULL, we would like first flush that page.
> So need export that function kmap_flush_unused.
>
> Signed-off-by: sha, ruibin <ruibin.sha@...el.com>
>
> ---
> mm/highmem.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/mm/highmem.c b/mm/highmem.c
> index b32b70c..511299b 100644
> --- a/mm/highmem.c
> +++ b/mm/highmem.c
> @@ -156,6 +156,7 @@ void kmap_flush_unused(void)
> flush_all_zero_pkmaps();
> unlock_kmap();
> }
> +EXPORT_SYMBOL(kmap_flush_unused);
This symbol is already extern'ed. Is it not sufficient for your case ?
>
> static inline unsigned long map_new_virtual(struct page *page)
> {
> --
> 1.7.9.5
>
> Best Regards
>
> ---------------------------------------------------------------
>
> Sha, Rui bin ( Robin )
>
> +86 13817890945
>
> Android System Integration Shanghai
>


-- 
Chintan Pandya

QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member of the Code Aurora Forum, hosted by The Linux Foundation
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ