Re: [PATCH RFC v1 23/26] kmsan: unpoisoning buffers from devices etc.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 18, 2019 at 11:43:01AM +0200, glider@xxxxxxxxxx wrote:
> When data is copied to memory from a device KMSAN should treat it as
> initialized. In most cases it's enough to just unpoison the buffer that
> is known to come from a device.
> In the case with __do_page_cache_readahead() and bio_copy_user_iov() we
> have to mark the whole pages as ignored by KMSAN, as it's not obvious
> where these pages are read again.

...

> +++ b/mm/filemap.c
> @@ -18,6 +18,7 @@
>  #include <linux/uaccess.h>
>  #include <linux/capability.h>
>  #include <linux/kernel_stat.h>
> +#include <linux/kmsan-checks.h>
>  #include <linux/gfp.h>
>  #include <linux/mm.h>
>  #include <linux/swap.h>
> @@ -2810,6 +2811,8 @@ static struct page *do_read_cache_page(struct address_space *mapping,
>  		page = wait_on_page_read(page);
>  		if (IS_ERR(page))
>  			return page;
> +		/* Assume all pages in page cache are initialized. */
> +		kmsan_unpoison_shadow(page_address(page), PAGE_SIZE);

Why would you do that?  The page cache already keeps track of which
pages are initialised -- the PageUptodate flag is set on them.  Indeed,
just adding a kmsan call to SetPageUptodate and __SetPageUptodate would
probably be a very straightforward way of handling things, and probably
means you can get rid of a lot of these other calls.





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux