Message ID | 20211214162050.660953-34-glider@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add KernelMemorySanitizer infrastructure | expand |
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@google.com> > --- > > 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 >
On Wed, Dec 15, 2021 at 3:17 PM Mark Rutland <mark.rutland@arm.com> wrote: > > 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. Correct, thank you! > > + /* > > + * Merging consequent physical pages may not work correctly under KMSAN > > + * if their metadata pages aren't consequent. Just disable merging. > > + */ > > Likewise here. Ack.
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. + */ + 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))
KMSAN metadata for consequent physical pages may be inconsequent, 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@google.com> --- Link: https://linux-review.googlesource.com/id/Iece16041be5ee47904fbc98121b105e5be5fea5c --- block/blk.h | 7 +++++++ 1 file changed, 7 insertions(+)