On Mon, Aug 19, 2024 at 12:34 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Mon, Aug 19, 2024 at 08:15:11AM -0700, Suren Baghdasaryan wrote: > > @@ -91,7 +97,7 @@ > > #endif > > > > #if ZONES_WIDTH + LRU_GEN_WIDTH + SECTIONS_WIDTH + NODES_WIDTH + \ > > - KASAN_TAG_WIDTH + LAST_CPUPID_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS > > + KASAN_TAG_WIDTH + ALLOC_TAG_REF_WIDTH + LAST_CPUPID_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS > > #define LAST_CPUPID_WIDTH LAST_CPUPID_SHIFT > > #else > > #define LAST_CPUPID_WIDTH 0 > > So if ALLOC_TAG_REF_WIDTH is big enough, it's going to force last_cpupid > into struct page. Thanks for taking a look! Yes, but how is this field different from say KASAN_TAG_WIDTH which can also force last_cpupid out of page flags? > That will misalign struct page and disable HVO -- with no warning! mminit_verify_pageflags_layout already has a mminit_dprintk() to indicate this condition. Is that not enough? >