Re: [PATCH 33/43] kmsan: disable physical page merging in biovec

From: Mark Rutland
Date: Wed Dec 15 2021 - 09:17:21 EST


On Tue, Dec 14, 2021 at 05:20:40PM +0100, Alexander Potapenko wrote:
> KMSAN metadata for consequent physical pages may be inconsequent,

I think you mean 'adjacent'/ rather than 'consequent' here, i.e.

| KMSAN metadata for adjacent physical pages may not be adjacent

> therefore accessing such pages together may lead to metadata
> corruption.
> We disable merging pages in biovec to prevent such corruptions.
>
> Signed-off-by: Alexander Potapenko <glider@xxxxxxxxxx>
> ---
>
> Link: https://linux-review.googlesource.com/id/Iece16041be5ee47904fbc98121b105e5be5fea5c
> ---
> block/blk.h | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/block/blk.h b/block/blk.h
> index ccde6e6f17360..e0c62a5d5639e 100644
> --- a/block/blk.h
> +++ b/block/blk.h
> @@ -103,6 +103,13 @@ static inline bool biovec_phys_mergeable(struct request_queue *q,
> phys_addr_t addr1 = page_to_phys(vec1->bv_page) + vec1->bv_offset;
> phys_addr_t addr2 = page_to_phys(vec2->bv_page) + vec2->bv_offset;
>
> + /*
> + * Merging consequent physical pages may not work correctly under KMSAN
> + * if their metadata pages aren't consequent. Just disable merging.
> + */

Likewise here.

Mark.

> + if (IS_ENABLED(CONFIG_KMSAN))
> + return false;
> +
> if (addr1 + vec1->bv_len != addr2)
> return false;
> if (xen_domain() && !xen_biovec_phys_mergeable(vec1, vec2->bv_page))
> --
> 2.34.1.173.g76aa8bc2d0-goog
>