From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.4 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00B78C43463 for ; Fri, 18 Sep 2020 08:04:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 846D321D24 for ; Fri, 18 Sep 2020 08:04:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PZk5MVq7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726793AbgIRIET (ORCPT ); Fri, 18 Sep 2020 04:04:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726040AbgIRIES (ORCPT ); Fri, 18 Sep 2020 04:04:18 -0400 Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A7D6C06174A for ; Fri, 18 Sep 2020 01:04:18 -0700 (PDT) Received: by mail-wr1-x444.google.com with SMTP id c18so4623650wrm.9 for ; Fri, 18 Sep 2020 01:04:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=PZk5MVq76PLb8voUjCoMzWs1XoGAO4ZR887R7Cg/2rnSwE/SL1XhtlKCPq0pHBebvU AATshxx4m63RPPaLKbwcuf7QmnlquoaPOzyY5l4QguAWt+Z/37pBOhMeN1vgfhVC/RZC 7FArP7g8OJ/5iu2UGvFqpsZgUW8LHuRuh2G5i4YSbizCeD5qwzOJw3sih4+d6Q/T/b4j wQ+FiOBLnG/byVFS5KzTPaSRAKxJflAJgR8XSw6Bn9e6jjww5+7MqNSHpz55GMeX8oXy 7PDe9TUZMHpTYt9Bim/jB1KNI41IXQKKEnvxw+p7K9K4Ww9UYPs7QzFJStR38HrVGmrT qRPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=FUtqkWHUSUPOhl8nxsozDxEjEFEiYCMPX0kUbcskDA4bkbspjgZ9n5f4t797J7yx1r yw+BJhQjwAmp2LgOPr36SvpugNkqlvuXg8eL/V4Np74lWcrcWyHyZWImq6wSVKqxqriX P+LxzwFF+C0nXhv+iwHoRZd8tux6OCxlppVSynbk7ySfqzgtykpLM/y41uUgzdYmcVre rMy02bcqL3WIjA/NoktwJfb+Nmd68ODzb9ly3jfFwhlZ1csmOWiyGcqh/3HLULy3XOvJ eZok1mTdzI7zfW1QuMfefpeVXFH899pAAoc+LPhWCt+ASt4sW4XKxLnYoB2Pnvwil5W3 iPAQ== X-Gm-Message-State: AOAM530GKnPNsJGoL86qgcLWaj89GkuMndxpogww9Wdscy1g2xaFVp1g z+Cfvns/c2ZupvEmhPMGxwpo4O1HAFgZcU9qC547wA== X-Google-Smtp-Source: ABdhPJzHAMDajviQ9mONFnxn+IlAqn5XzYVWfQcO/oFLSPbcSbkEX0G2yKHTsoqXKmDxliOnnbFPKA+ldsGsNwKI2Aw= X-Received: by 2002:adf:e312:: with SMTP id b18mr14018593wrj.372.1600416256553; Fri, 18 Sep 2020 01:04:16 -0700 (PDT) MIME-Version: 1.0 References: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> In-Reply-To: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> From: Alexander Potapenko Date: Fri, 18 Sep 2020 10:04:05 +0200 Message-ID: Subject: Re: [PATCH v2 05/37] kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* To: Andrey Konovalov Cc: Dmitry Vyukov , Vincenzo Frascino , Catalin Marinas , kasan-dev , Andrey Ryabinin , Marco Elver , Evgenii Stepanov , Elena Petrova , Branislav Rankov , Kevin Brodsky , Will Deacon , Andrew Morton , Linux ARM , Linux Memory Management List , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 15, 2020 at 11:16 PM Andrey Konovalov w= rote: > > This is a preparatory commit for the upcoming addition of a new hardware > tag-based (MTE-based) KASAN mode. > > The new mode won't be using shadow memory, but will still use the concept > of memory granules. KASAN documentation doesn't seem to explain this concept anywhere (I also checked the "kasan: add documentation for hardware tag-based mode" patch), looks like it's only mentioned in MTE documentation. Could you please elaborate on what we consider a granule in each of KASAN m= odes? > Rename KASAN_SHADOW_SCALE_SIZE to KASAN_GRANULE_SIZE, > and KASAN_SHADOW_MASK to KASAN_GRANULE_MASK. > > Also use MASK when used as a mask, otherwise use SIZE. > > No functional changes. > > Signed-off-by: Andrey Konovalov > Signed-off-by: Vincenzo Frascino > --- > Change-Id: Iac733e2248aa9d29f6fc425d8946ba07cca73ecf > --- > Documentation/dev-tools/kasan.rst | 2 +- > lib/test_kasan.c | 2 +- > mm/kasan/common.c | 39 ++++++++++++++++--------------- > mm/kasan/generic.c | 14 +++++------ > mm/kasan/generic_report.c | 8 +++---- > mm/kasan/init.c | 8 +++---- > mm/kasan/kasan.h | 4 ++-- > mm/kasan/report.c | 10 ++++---- > mm/kasan/tags_report.c | 2 +- > 9 files changed, 45 insertions(+), 44 deletions(-) > > diff --git a/Documentation/dev-tools/kasan.rst b/Documentation/dev-tools/= kasan.rst > index 38fd5681fade..a3030fc6afe5 100644 > --- a/Documentation/dev-tools/kasan.rst > +++ b/Documentation/dev-tools/kasan.rst > @@ -264,7 +264,7 @@ Most mappings in vmalloc space are small, requiring l= ess than a full > page of shadow space. Allocating a full shadow page per mapping would > therefore be wasteful. Furthermore, to ensure that different mappings > use different shadow pages, mappings would have to be aligned to > -``KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE``. > +``KASAN_GRANULE_SIZE * PAGE_SIZE``. > > Instead, we share backing space across multiple mappings. We allocate > a backing page when a mapping in vmalloc space uses a particular page > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index 53e953bb1d1d..ddd0b80f24a1 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -25,7 +25,7 @@ > > #include "../mm/kasan/kasan.h" > > -#define OOB_TAG_OFF (IS_ENABLED(CONFIG_KASAN_GENERIC) ? 0 : KASAN_SHADOW= _SCALE_SIZE) > +#define OOB_TAG_OFF (IS_ENABLED(CONFIG_KASAN_GENERIC) ? 0 : KASAN_GRANUL= E_SIZE) > > /* > * We assign some test results to these globals to make sure the tests > diff --git a/mm/kasan/common.c b/mm/kasan/common.c > index 65933b27df81..c9daf2c33651 100644 > --- a/mm/kasan/common.c > +++ b/mm/kasan/common.c > @@ -111,7 +111,7 @@ void *memcpy(void *dest, const void *src, size_t len) > > /* > * Poisons the shadow memory for 'size' bytes starting from 'addr'. > - * Memory addresses should be aligned to KASAN_SHADOW_SCALE_SIZE. > + * Memory addresses should be aligned to KASAN_GRANULE_SIZE. > */ > void kasan_poison_memory(const void *address, size_t size, u8 value) > { > @@ -143,13 +143,13 @@ void kasan_unpoison_memory(const void *address, siz= e_t size) > > kasan_poison_memory(address, size, tag); > > - if (size & KASAN_SHADOW_MASK) { > + if (size & KASAN_GRANULE_MASK) { > u8 *shadow =3D (u8 *)kasan_mem_to_shadow(address + size); > > if (IS_ENABLED(CONFIG_KASAN_SW_TAGS)) > *shadow =3D tag; > else > - *shadow =3D size & KASAN_SHADOW_MASK; > + *shadow =3D size & KASAN_GRANULE_MASK; > } > } > > @@ -301,7 +301,7 @@ void kasan_unpoison_object_data(struct kmem_cache *ca= che, void *object) > void kasan_poison_object_data(struct kmem_cache *cache, void *object) > { > kasan_poison_memory(object, > - round_up(cache->object_size, KASAN_SHADOW_SCALE_S= IZE), > + round_up(cache->object_size, KASAN_GRANULE_SIZE), > KASAN_KMALLOC_REDZONE); > } > > @@ -373,7 +373,7 @@ static inline bool shadow_invalid(u8 tag, s8 shadow_b= yte) > { > if (IS_ENABLED(CONFIG_KASAN_GENERIC)) > return shadow_byte < 0 || > - shadow_byte >=3D KASAN_SHADOW_SCALE_SIZE; > + shadow_byte >=3D KASAN_GRANULE_SIZE; > > /* else CONFIG_KASAN_SW_TAGS: */ > if ((u8)shadow_byte =3D=3D KASAN_TAG_INVALID) > @@ -412,7 +412,7 @@ static bool __kasan_slab_free(struct kmem_cache *cach= e, void *object, > return true; > } > > - rounded_up_size =3D round_up(cache->object_size, KASAN_SHADOW_SCA= LE_SIZE); > + rounded_up_size =3D round_up(cache->object_size, KASAN_GRANULE_SI= ZE); > kasan_poison_memory(object, rounded_up_size, KASAN_KMALLOC_FREE); > > if ((IS_ENABLED(CONFIG_KASAN_GENERIC) && !quarantine) || > @@ -445,9 +445,9 @@ static void *__kasan_kmalloc(struct kmem_cache *cache= , const void *object, > return NULL; > > redzone_start =3D round_up((unsigned long)(object + size), > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > redzone_end =3D round_up((unsigned long)object + cache->object_si= ze, > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > > if (IS_ENABLED(CONFIG_KASAN_SW_TAGS)) > tag =3D assign_tag(cache, object, false, keep_tag); > @@ -491,7 +491,7 @@ void * __must_check kasan_kmalloc_large(const void *p= tr, size_t size, > > page =3D virt_to_page(ptr); > redzone_start =3D round_up((unsigned long)(ptr + size), > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > redzone_end =3D (unsigned long)ptr + page_size(page); > > kasan_unpoison_memory(ptr, size); > @@ -589,8 +589,8 @@ static int __meminit kasan_mem_notifier(struct notifi= er_block *nb, > shadow_size =3D nr_shadow_pages << PAGE_SHIFT; > shadow_end =3D shadow_start + shadow_size; > > - if (WARN_ON(mem_data->nr_pages % KASAN_SHADOW_SCALE_SIZE) || > - WARN_ON(start_kaddr % (KASAN_SHADOW_SCALE_SIZE << PAGE_SH= IFT))) > + if (WARN_ON(mem_data->nr_pages % KASAN_GRANULE_SIZE) || > + WARN_ON(start_kaddr % (KASAN_GRANULE_SIZE << PAGE_SHIFT))= ) > return NOTIFY_BAD; > > switch (action) { > @@ -748,7 +748,7 @@ void kasan_poison_vmalloc(const void *start, unsigned= long size) > if (!is_vmalloc_or_module_addr(start)) > return; > > - size =3D round_up(size, KASAN_SHADOW_SCALE_SIZE); > + size =3D round_up(size, KASAN_GRANULE_SIZE); > kasan_poison_memory(start, size, KASAN_VMALLOC_INVALID); > } > > @@ -861,22 +861,22 @@ void kasan_release_vmalloc(unsigned long start, uns= igned long end, > unsigned long region_start, region_end; > unsigned long size; > > - region_start =3D ALIGN(start, PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE= ); > - region_end =3D ALIGN_DOWN(end, PAGE_SIZE * KASAN_SHADOW_SCALE_SIZ= E); > + region_start =3D ALIGN(start, PAGE_SIZE * KASAN_GRANULE_SIZE); > + region_end =3D ALIGN_DOWN(end, PAGE_SIZE * KASAN_GRANULE_SIZE); > > free_region_start =3D ALIGN(free_region_start, > - PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE); > + PAGE_SIZE * KASAN_GRANULE_SIZE); > > if (start !=3D region_start && > free_region_start < region_start) > - region_start -=3D PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE; > + region_start -=3D PAGE_SIZE * KASAN_GRANULE_SIZE; > > free_region_end =3D ALIGN_DOWN(free_region_end, > - PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE)= ; > + PAGE_SIZE * KASAN_GRANULE_SIZE); > > if (end !=3D region_end && > free_region_end > region_end) > - region_end +=3D PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE; > + region_end +=3D PAGE_SIZE * KASAN_GRANULE_SIZE; > > shadow_start =3D kasan_mem_to_shadow((void *)region_start); > shadow_end =3D kasan_mem_to_shadow((void *)region_end); > @@ -902,7 +902,8 @@ int kasan_module_alloc(void *addr, size_t size) > unsigned long shadow_start; > > shadow_start =3D (unsigned long)kasan_mem_to_shadow(addr); > - scaled_size =3D (size + KASAN_SHADOW_MASK) >> KASAN_SHADOW_SCALE_= SHIFT; > + scaled_size =3D (size + KASAN_GRANULE_SIZE - 1) >> > + KASAN_SHADOW_SCALE_SHIFT; > shadow_size =3D round_up(scaled_size, PAGE_SIZE); > > if (WARN_ON(!PAGE_ALIGNED(shadow_start))) > diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c > index 4b5f905198d8..f6d68aa9872f 100644 > --- a/mm/kasan/generic.c > +++ b/mm/kasan/generic.c > @@ -51,7 +51,7 @@ static __always_inline bool memory_is_poisoned_1(unsign= ed long addr) > s8 shadow_value =3D *(s8 *)kasan_mem_to_shadow((void *)addr); > > if (unlikely(shadow_value)) { > - s8 last_accessible_byte =3D addr & KASAN_SHADOW_MASK; > + s8 last_accessible_byte =3D addr & KASAN_GRANULE_MASK; > return unlikely(last_accessible_byte >=3D shadow_value); > } > > @@ -67,7 +67,7 @@ static __always_inline bool memory_is_poisoned_2_4_8(un= signed long addr, > * Access crosses 8(shadow size)-byte boundary. Such access maps > * into 2 shadow bytes, so we need to check them both. > */ > - if (unlikely(((addr + size - 1) & KASAN_SHADOW_MASK) < size - 1)) > + if (unlikely(((addr + size - 1) & KASAN_GRANULE_MASK) < size - 1)= ) > return *shadow_addr || memory_is_poisoned_1(addr + size -= 1); > > return memory_is_poisoned_1(addr + size - 1); > @@ -78,7 +78,7 @@ static __always_inline bool memory_is_poisoned_16(unsig= ned long addr) > u16 *shadow_addr =3D (u16 *)kasan_mem_to_shadow((void *)addr); > > /* Unaligned 16-bytes access maps into 3 shadow bytes. */ > - if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE))) > + if (unlikely(!IS_ALIGNED(addr, KASAN_GRANULE_SIZE))) > return *shadow_addr || memory_is_poisoned_1(addr + 15); > > return *shadow_addr; > @@ -139,7 +139,7 @@ static __always_inline bool memory_is_poisoned_n(unsi= gned long addr, > s8 *last_shadow =3D (s8 *)kasan_mem_to_shadow((void *)las= t_byte); > > if (unlikely(ret !=3D (unsigned long)last_shadow || > - ((long)(last_byte & KASAN_SHADOW_MASK) >=3D *last= _shadow))) > + ((long)(last_byte & KASAN_GRANULE_MASK) >=3D *las= t_shadow))) > return true; > } > return false; > @@ -205,7 +205,7 @@ void kasan_cache_shutdown(struct kmem_cache *cache) > > static void register_global(struct kasan_global *global) > { > - size_t aligned_size =3D round_up(global->size, KASAN_SHADOW_SCALE= _SIZE); > + size_t aligned_size =3D round_up(global->size, KASAN_GRANULE_SIZE= ); > > kasan_unpoison_memory(global->beg, global->size); > > @@ -279,10 +279,10 @@ EXPORT_SYMBOL(__asan_handle_no_return); > /* Emitted by compiler to poison alloca()ed objects. */ > void __asan_alloca_poison(unsigned long addr, size_t size) > { > - size_t rounded_up_size =3D round_up(size, KASAN_SHADOW_SCALE_SIZE= ); > + size_t rounded_up_size =3D round_up(size, KASAN_GRANULE_SIZE); > size_t padding_size =3D round_up(size, KASAN_ALLOCA_REDZONE_SIZE)= - > rounded_up_size; > - size_t rounded_down_size =3D round_down(size, KASAN_SHADOW_SCALE_= SIZE); > + size_t rounded_down_size =3D round_down(size, KASAN_GRANULE_SIZE)= ; > > const void *left_redzone =3D (const void *)(addr - > KASAN_ALLOCA_REDZONE_SIZE); > diff --git a/mm/kasan/generic_report.c b/mm/kasan/generic_report.c > index a38c7a9e192a..4dce1633b082 100644 > --- a/mm/kasan/generic_report.c > +++ b/mm/kasan/generic_report.c > @@ -39,7 +39,7 @@ void *find_first_bad_addr(void *addr, size_t size) > void *p =3D addr; > > while (p < addr + size && !(*(u8 *)kasan_mem_to_shadow(p))) > - p +=3D KASAN_SHADOW_SCALE_SIZE; > + p +=3D KASAN_GRANULE_SIZE; > return p; > } > > @@ -51,14 +51,14 @@ static const char *get_shadow_bug_type(struct kasan_a= ccess_info *info) > shadow_addr =3D (u8 *)kasan_mem_to_shadow(info->first_bad_addr); > > /* > - * If shadow byte value is in [0, KASAN_SHADOW_SCALE_SIZE) we can= look > + * If shadow byte value is in [0, KASAN_GRANULE_SIZE) we can look > * at the next shadow byte to determine the type of the bad acces= s. > */ > - if (*shadow_addr > 0 && *shadow_addr <=3D KASAN_SHADOW_SCALE_SIZE= - 1) > + if (*shadow_addr > 0 && *shadow_addr <=3D KASAN_GRANULE_SIZE - 1) > shadow_addr++; > > switch (*shadow_addr) { > - case 0 ... KASAN_SHADOW_SCALE_SIZE - 1: > + case 0 ... KASAN_GRANULE_SIZE - 1: > /* > * In theory it's still possible to see these shadow valu= es > * due to a data race in the kernel code. > diff --git a/mm/kasan/init.c b/mm/kasan/init.c > index fe6be0be1f76..754b641c83c7 100644 > --- a/mm/kasan/init.c > +++ b/mm/kasan/init.c > @@ -447,8 +447,8 @@ void kasan_remove_zero_shadow(void *start, unsigned l= ong size) > end =3D addr + (size >> KASAN_SHADOW_SCALE_SHIFT); > > if (WARN_ON((unsigned long)start % > - (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE)) || > - WARN_ON(size % (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE))) > + (KASAN_GRANULE_SIZE * PAGE_SIZE)) || > + WARN_ON(size % (KASAN_GRANULE_SIZE * PAGE_SIZE))) > return; > > for (; addr < end; addr =3D next) { > @@ -482,8 +482,8 @@ int kasan_add_zero_shadow(void *start, unsigned long = size) > shadow_end =3D shadow_start + (size >> KASAN_SHADOW_SCALE_SHIFT); > > if (WARN_ON((unsigned long)start % > - (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE)) || > - WARN_ON(size % (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE))) > + (KASAN_GRANULE_SIZE * PAGE_SIZE)) || > + WARN_ON(size % (KASAN_GRANULE_SIZE * PAGE_SIZE))) > return -EINVAL; > > ret =3D kasan_populate_early_shadow(shadow_start, shadow_end); > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 03450d3b31f7..c31e2c739301 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -5,8 +5,8 @@ > #include > #include > > -#define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT) > -#define KASAN_SHADOW_MASK (KASAN_SHADOW_SCALE_SIZE - 1) > +#define KASAN_GRANULE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT) > +#define KASAN_GRANULE_MASK (KASAN_GRANULE_SIZE - 1) > > #define KASAN_TAG_KERNEL 0xFF /* native kernel pointers tag */ > #define KASAN_TAG_INVALID 0xFE /* inaccessible memory tag */ > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 4f49fa6cd1aa..7c025d792e2f 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -317,24 +317,24 @@ static bool __must_check get_address_stack_frame_in= fo(const void *addr, > return false; > > aligned_addr =3D round_down((unsigned long)addr, sizeof(long)); > - mem_ptr =3D round_down(aligned_addr, KASAN_SHADOW_SCALE_SIZE); > + mem_ptr =3D round_down(aligned_addr, KASAN_GRANULE_SIZE); > shadow_ptr =3D kasan_mem_to_shadow((void *)aligned_addr); > shadow_bottom =3D kasan_mem_to_shadow(end_of_stack(current)); > > while (shadow_ptr >=3D shadow_bottom && *shadow_ptr !=3D KASAN_ST= ACK_LEFT) { > shadow_ptr--; > - mem_ptr -=3D KASAN_SHADOW_SCALE_SIZE; > + mem_ptr -=3D KASAN_GRANULE_SIZE; > } > > while (shadow_ptr >=3D shadow_bottom && *shadow_ptr =3D=3D KASAN_= STACK_LEFT) { > shadow_ptr--; > - mem_ptr -=3D KASAN_SHADOW_SCALE_SIZE; > + mem_ptr -=3D KASAN_GRANULE_SIZE; > } > > if (shadow_ptr < shadow_bottom) > return false; > > - frame =3D (const unsigned long *)(mem_ptr + KASAN_SHADOW_SCALE_SI= ZE); > + frame =3D (const unsigned long *)(mem_ptr + KASAN_GRANULE_SIZE); > if (frame[0] !=3D KASAN_CURRENT_STACK_FRAME_MAGIC) { > pr_err("KASAN internal error: frame info validation faile= d; invalid marker: %lu\n", > frame[0]); > @@ -572,6 +572,6 @@ void kasan_non_canonical_hook(unsigned long addr) > else > bug_type =3D "maybe wild-memory-access"; > pr_alert("KASAN: %s in range [0x%016lx-0x%016lx]\n", bug_type, > - orig_addr, orig_addr + KASAN_SHADOW_MASK); > + orig_addr, orig_addr + KASAN_GRANULE_SIZE - 1); > } > #endif > diff --git a/mm/kasan/tags_report.c b/mm/kasan/tags_report.c > index bee43717d6f0..6ddb55676a7c 100644 > --- a/mm/kasan/tags_report.c > +++ b/mm/kasan/tags_report.c > @@ -81,7 +81,7 @@ void *find_first_bad_addr(void *addr, size_t size) > void *end =3D p + size; > > while (p < end && tag =3D=3D *(u8 *)kasan_mem_to_shadow(p)) > - p +=3D KASAN_SHADOW_SCALE_SIZE; > + p +=3D KASAN_GRANULE_SIZE; > return p; > } > > -- > 2.28.0.618.gf4bc123cb7-goog > --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.4 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CEA7CC43464 for ; Fri, 18 Sep 2020 08:04:20 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2FC8921481 for ; Fri, 18 Sep 2020 08:04:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PZk5MVq7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2FC8921481 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 874FA6B0055; Fri, 18 Sep 2020 04:04:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8257C6B005A; Fri, 18 Sep 2020 04:04:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6ED216B005C; Fri, 18 Sep 2020 04:04:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0166.hostedemail.com [216.40.44.166]) by kanga.kvack.org (Postfix) with ESMTP id 4FDF06B0055 for ; Fri, 18 Sep 2020 04:04:19 -0400 (EDT) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 0E02012D5 for ; Fri, 18 Sep 2020 08:04:19 +0000 (UTC) X-FDA: 77275444638.09.head23_1b1380527129 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin09.hostedemail.com (Postfix) with ESMTP id E4AB1180AD81D for ; Fri, 18 Sep 2020 08:04:18 +0000 (UTC) X-HE-Tag: head23_1b1380527129 X-Filterd-Recvd-Size: 22033 Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by imf24.hostedemail.com (Postfix) with ESMTP for ; Fri, 18 Sep 2020 08:04:18 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id a17so4626484wrn.6 for ; Fri, 18 Sep 2020 01:04:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=PZk5MVq76PLb8voUjCoMzWs1XoGAO4ZR887R7Cg/2rnSwE/SL1XhtlKCPq0pHBebvU AATshxx4m63RPPaLKbwcuf7QmnlquoaPOzyY5l4QguAWt+Z/37pBOhMeN1vgfhVC/RZC 7FArP7g8OJ/5iu2UGvFqpsZgUW8LHuRuh2G5i4YSbizCeD5qwzOJw3sih4+d6Q/T/b4j wQ+FiOBLnG/byVFS5KzTPaSRAKxJflAJgR8XSw6Bn9e6jjww5+7MqNSHpz55GMeX8oXy 7PDe9TUZMHpTYt9Bim/jB1KNI41IXQKKEnvxw+p7K9K4Ww9UYPs7QzFJStR38HrVGmrT qRPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=dtJUd0ZXtQjopMYFKs8imHbkbixq/IbkOt0WTirmGRpRcPM/mlm39IEEx/8dfchX41 pfMsSLgix9Aew4fGpt83oAYVMaG86I3OOtmIMwO4e4SGFFJLVClbndzlBqI+cYz6zAd7 p6n6ePChAnG9R6HtLzNytlLI5KX/h4jYS4lMkHM+9JMxdL8i+fYBkPLuR2CVsOoNTMf4 RWBnX4VnAbaSqXmsr70OxU+M9yeJaSekaIZga2IPCxyf6QG1XQWgZcHuaYKaKbIS/5i5 z1alfTFSC2RxjdO7nTMYl5oN9F77B4RUHbIv5RS9Vk5MT2EqtgsYA0NXvTIrPD8AaNIK Bf0A== X-Gm-Message-State: AOAM532oFAM55r/CpjfckdqyOu7n2+08HQJ811bqeEC/CY4lobRTiVcI a3rZXr7n9WMXG5n6SUgWUWFsjfFiw254DV3QoynQnA== X-Google-Smtp-Source: ABdhPJzHAMDajviQ9mONFnxn+IlAqn5XzYVWfQcO/oFLSPbcSbkEX0G2yKHTsoqXKmDxliOnnbFPKA+ldsGsNwKI2Aw= X-Received: by 2002:adf:e312:: with SMTP id b18mr14018593wrj.372.1600416256553; Fri, 18 Sep 2020 01:04:16 -0700 (PDT) MIME-Version: 1.0 References: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> In-Reply-To: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> From: Alexander Potapenko Date: Fri, 18 Sep 2020 10:04:05 +0200 Message-ID: Subject: Re: [PATCH v2 05/37] kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* To: Andrey Konovalov Cc: Dmitry Vyukov , Vincenzo Frascino , Catalin Marinas , kasan-dev , Andrey Ryabinin , Marco Elver , Evgenii Stepanov , Elena Petrova , Branislav Rankov , Kevin Brodsky , Will Deacon , Andrew Morton , Linux ARM , Linux Memory Management List , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Sep 15, 2020 at 11:16 PM Andrey Konovalov w= rote: > > This is a preparatory commit for the upcoming addition of a new hardware > tag-based (MTE-based) KASAN mode. > > The new mode won't be using shadow memory, but will still use the concept > of memory granules. KASAN documentation doesn't seem to explain this concept anywhere (I also checked the "kasan: add documentation for hardware tag-based mode" patch), looks like it's only mentioned in MTE documentation. Could you please elaborate on what we consider a granule in each of KASAN m= odes? > Rename KASAN_SHADOW_SCALE_SIZE to KASAN_GRANULE_SIZE, > and KASAN_SHADOW_MASK to KASAN_GRANULE_MASK. > > Also use MASK when used as a mask, otherwise use SIZE. > > No functional changes. > > Signed-off-by: Andrey Konovalov > Signed-off-by: Vincenzo Frascino > --- > Change-Id: Iac733e2248aa9d29f6fc425d8946ba07cca73ecf > --- > Documentation/dev-tools/kasan.rst | 2 +- > lib/test_kasan.c | 2 +- > mm/kasan/common.c | 39 ++++++++++++++++--------------- > mm/kasan/generic.c | 14 +++++------ > mm/kasan/generic_report.c | 8 +++---- > mm/kasan/init.c | 8 +++---- > mm/kasan/kasan.h | 4 ++-- > mm/kasan/report.c | 10 ++++---- > mm/kasan/tags_report.c | 2 +- > 9 files changed, 45 insertions(+), 44 deletions(-) > > diff --git a/Documentation/dev-tools/kasan.rst b/Documentation/dev-tools/= kasan.rst > index 38fd5681fade..a3030fc6afe5 100644 > --- a/Documentation/dev-tools/kasan.rst > +++ b/Documentation/dev-tools/kasan.rst > @@ -264,7 +264,7 @@ Most mappings in vmalloc space are small, requiring l= ess than a full > page of shadow space. Allocating a full shadow page per mapping would > therefore be wasteful. Furthermore, to ensure that different mappings > use different shadow pages, mappings would have to be aligned to > -``KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE``. > +``KASAN_GRANULE_SIZE * PAGE_SIZE``. > > Instead, we share backing space across multiple mappings. We allocate > a backing page when a mapping in vmalloc space uses a particular page > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index 53e953bb1d1d..ddd0b80f24a1 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -25,7 +25,7 @@ > > #include "../mm/kasan/kasan.h" > > -#define OOB_TAG_OFF (IS_ENABLED(CONFIG_KASAN_GENERIC) ? 0 : KASAN_SHADOW= _SCALE_SIZE) > +#define OOB_TAG_OFF (IS_ENABLED(CONFIG_KASAN_GENERIC) ? 0 : KASAN_GRANUL= E_SIZE) > > /* > * We assign some test results to these globals to make sure the tests > diff --git a/mm/kasan/common.c b/mm/kasan/common.c > index 65933b27df81..c9daf2c33651 100644 > --- a/mm/kasan/common.c > +++ b/mm/kasan/common.c > @@ -111,7 +111,7 @@ void *memcpy(void *dest, const void *src, size_t len) > > /* > * Poisons the shadow memory for 'size' bytes starting from 'addr'. > - * Memory addresses should be aligned to KASAN_SHADOW_SCALE_SIZE. > + * Memory addresses should be aligned to KASAN_GRANULE_SIZE. > */ > void kasan_poison_memory(const void *address, size_t size, u8 value) > { > @@ -143,13 +143,13 @@ void kasan_unpoison_memory(const void *address, siz= e_t size) > > kasan_poison_memory(address, size, tag); > > - if (size & KASAN_SHADOW_MASK) { > + if (size & KASAN_GRANULE_MASK) { > u8 *shadow =3D (u8 *)kasan_mem_to_shadow(address + size); > > if (IS_ENABLED(CONFIG_KASAN_SW_TAGS)) > *shadow =3D tag; > else > - *shadow =3D size & KASAN_SHADOW_MASK; > + *shadow =3D size & KASAN_GRANULE_MASK; > } > } > > @@ -301,7 +301,7 @@ void kasan_unpoison_object_data(struct kmem_cache *ca= che, void *object) > void kasan_poison_object_data(struct kmem_cache *cache, void *object) > { > kasan_poison_memory(object, > - round_up(cache->object_size, KASAN_SHADOW_SCALE_S= IZE), > + round_up(cache->object_size, KASAN_GRANULE_SIZE), > KASAN_KMALLOC_REDZONE); > } > > @@ -373,7 +373,7 @@ static inline bool shadow_invalid(u8 tag, s8 shadow_b= yte) > { > if (IS_ENABLED(CONFIG_KASAN_GENERIC)) > return shadow_byte < 0 || > - shadow_byte >=3D KASAN_SHADOW_SCALE_SIZE; > + shadow_byte >=3D KASAN_GRANULE_SIZE; > > /* else CONFIG_KASAN_SW_TAGS: */ > if ((u8)shadow_byte =3D=3D KASAN_TAG_INVALID) > @@ -412,7 +412,7 @@ static bool __kasan_slab_free(struct kmem_cache *cach= e, void *object, > return true; > } > > - rounded_up_size =3D round_up(cache->object_size, KASAN_SHADOW_SCA= LE_SIZE); > + rounded_up_size =3D round_up(cache->object_size, KASAN_GRANULE_SI= ZE); > kasan_poison_memory(object, rounded_up_size, KASAN_KMALLOC_FREE); > > if ((IS_ENABLED(CONFIG_KASAN_GENERIC) && !quarantine) || > @@ -445,9 +445,9 @@ static void *__kasan_kmalloc(struct kmem_cache *cache= , const void *object, > return NULL; > > redzone_start =3D round_up((unsigned long)(object + size), > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > redzone_end =3D round_up((unsigned long)object + cache->object_si= ze, > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > > if (IS_ENABLED(CONFIG_KASAN_SW_TAGS)) > tag =3D assign_tag(cache, object, false, keep_tag); > @@ -491,7 +491,7 @@ void * __must_check kasan_kmalloc_large(const void *p= tr, size_t size, > > page =3D virt_to_page(ptr); > redzone_start =3D round_up((unsigned long)(ptr + size), > - KASAN_SHADOW_SCALE_SIZE); > + KASAN_GRANULE_SIZE); > redzone_end =3D (unsigned long)ptr + page_size(page); > > kasan_unpoison_memory(ptr, size); > @@ -589,8 +589,8 @@ static int __meminit kasan_mem_notifier(struct notifi= er_block *nb, > shadow_size =3D nr_shadow_pages << PAGE_SHIFT; > shadow_end =3D shadow_start + shadow_size; > > - if (WARN_ON(mem_data->nr_pages % KASAN_SHADOW_SCALE_SIZE) || > - WARN_ON(start_kaddr % (KASAN_SHADOW_SCALE_SIZE << PAGE_SH= IFT))) > + if (WARN_ON(mem_data->nr_pages % KASAN_GRANULE_SIZE) || > + WARN_ON(start_kaddr % (KASAN_GRANULE_SIZE << PAGE_SHIFT))= ) > return NOTIFY_BAD; > > switch (action) { > @@ -748,7 +748,7 @@ void kasan_poison_vmalloc(const void *start, unsigned= long size) > if (!is_vmalloc_or_module_addr(start)) > return; > > - size =3D round_up(size, KASAN_SHADOW_SCALE_SIZE); > + size =3D round_up(size, KASAN_GRANULE_SIZE); > kasan_poison_memory(start, size, KASAN_VMALLOC_INVALID); > } > > @@ -861,22 +861,22 @@ void kasan_release_vmalloc(unsigned long start, uns= igned long end, > unsigned long region_start, region_end; > unsigned long size; > > - region_start =3D ALIGN(start, PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE= ); > - region_end =3D ALIGN_DOWN(end, PAGE_SIZE * KASAN_SHADOW_SCALE_SIZ= E); > + region_start =3D ALIGN(start, PAGE_SIZE * KASAN_GRANULE_SIZE); > + region_end =3D ALIGN_DOWN(end, PAGE_SIZE * KASAN_GRANULE_SIZE); > > free_region_start =3D ALIGN(free_region_start, > - PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE); > + PAGE_SIZE * KASAN_GRANULE_SIZE); > > if (start !=3D region_start && > free_region_start < region_start) > - region_start -=3D PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE; > + region_start -=3D PAGE_SIZE * KASAN_GRANULE_SIZE; > > free_region_end =3D ALIGN_DOWN(free_region_end, > - PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE)= ; > + PAGE_SIZE * KASAN_GRANULE_SIZE); > > if (end !=3D region_end && > free_region_end > region_end) > - region_end +=3D PAGE_SIZE * KASAN_SHADOW_SCALE_SIZE; > + region_end +=3D PAGE_SIZE * KASAN_GRANULE_SIZE; > > shadow_start =3D kasan_mem_to_shadow((void *)region_start); > shadow_end =3D kasan_mem_to_shadow((void *)region_end); > @@ -902,7 +902,8 @@ int kasan_module_alloc(void *addr, size_t size) > unsigned long shadow_start; > > shadow_start =3D (unsigned long)kasan_mem_to_shadow(addr); > - scaled_size =3D (size + KASAN_SHADOW_MASK) >> KASAN_SHADOW_SCALE_= SHIFT; > + scaled_size =3D (size + KASAN_GRANULE_SIZE - 1) >> > + KASAN_SHADOW_SCALE_SHIFT; > shadow_size =3D round_up(scaled_size, PAGE_SIZE); > > if (WARN_ON(!PAGE_ALIGNED(shadow_start))) > diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c > index 4b5f905198d8..f6d68aa9872f 100644 > --- a/mm/kasan/generic.c > +++ b/mm/kasan/generic.c > @@ -51,7 +51,7 @@ static __always_inline bool memory_is_poisoned_1(unsign= ed long addr) > s8 shadow_value =3D *(s8 *)kasan_mem_to_shadow((void *)addr); > > if (unlikely(shadow_value)) { > - s8 last_accessible_byte =3D addr & KASAN_SHADOW_MASK; > + s8 last_accessible_byte =3D addr & KASAN_GRANULE_MASK; > return unlikely(last_accessible_byte >=3D shadow_value); > } > > @@ -67,7 +67,7 @@ static __always_inline bool memory_is_poisoned_2_4_8(un= signed long addr, > * Access crosses 8(shadow size)-byte boundary. Such access maps > * into 2 shadow bytes, so we need to check them both. > */ > - if (unlikely(((addr + size - 1) & KASAN_SHADOW_MASK) < size - 1)) > + if (unlikely(((addr + size - 1) & KASAN_GRANULE_MASK) < size - 1)= ) > return *shadow_addr || memory_is_poisoned_1(addr + size -= 1); > > return memory_is_poisoned_1(addr + size - 1); > @@ -78,7 +78,7 @@ static __always_inline bool memory_is_poisoned_16(unsig= ned long addr) > u16 *shadow_addr =3D (u16 *)kasan_mem_to_shadow((void *)addr); > > /* Unaligned 16-bytes access maps into 3 shadow bytes. */ > - if (unlikely(!IS_ALIGNED(addr, KASAN_SHADOW_SCALE_SIZE))) > + if (unlikely(!IS_ALIGNED(addr, KASAN_GRANULE_SIZE))) > return *shadow_addr || memory_is_poisoned_1(addr + 15); > > return *shadow_addr; > @@ -139,7 +139,7 @@ static __always_inline bool memory_is_poisoned_n(unsi= gned long addr, > s8 *last_shadow =3D (s8 *)kasan_mem_to_shadow((void *)las= t_byte); > > if (unlikely(ret !=3D (unsigned long)last_shadow || > - ((long)(last_byte & KASAN_SHADOW_MASK) >=3D *last= _shadow))) > + ((long)(last_byte & KASAN_GRANULE_MASK) >=3D *las= t_shadow))) > return true; > } > return false; > @@ -205,7 +205,7 @@ void kasan_cache_shutdown(struct kmem_cache *cache) > > static void register_global(struct kasan_global *global) > { > - size_t aligned_size =3D round_up(global->size, KASAN_SHADOW_SCALE= _SIZE); > + size_t aligned_size =3D round_up(global->size, KASAN_GRANULE_SIZE= ); > > kasan_unpoison_memory(global->beg, global->size); > > @@ -279,10 +279,10 @@ EXPORT_SYMBOL(__asan_handle_no_return); > /* Emitted by compiler to poison alloca()ed objects. */ > void __asan_alloca_poison(unsigned long addr, size_t size) > { > - size_t rounded_up_size =3D round_up(size, KASAN_SHADOW_SCALE_SIZE= ); > + size_t rounded_up_size =3D round_up(size, KASAN_GRANULE_SIZE); > size_t padding_size =3D round_up(size, KASAN_ALLOCA_REDZONE_SIZE)= - > rounded_up_size; > - size_t rounded_down_size =3D round_down(size, KASAN_SHADOW_SCALE_= SIZE); > + size_t rounded_down_size =3D round_down(size, KASAN_GRANULE_SIZE)= ; > > const void *left_redzone =3D (const void *)(addr - > KASAN_ALLOCA_REDZONE_SIZE); > diff --git a/mm/kasan/generic_report.c b/mm/kasan/generic_report.c > index a38c7a9e192a..4dce1633b082 100644 > --- a/mm/kasan/generic_report.c > +++ b/mm/kasan/generic_report.c > @@ -39,7 +39,7 @@ void *find_first_bad_addr(void *addr, size_t size) > void *p =3D addr; > > while (p < addr + size && !(*(u8 *)kasan_mem_to_shadow(p))) > - p +=3D KASAN_SHADOW_SCALE_SIZE; > + p +=3D KASAN_GRANULE_SIZE; > return p; > } > > @@ -51,14 +51,14 @@ static const char *get_shadow_bug_type(struct kasan_a= ccess_info *info) > shadow_addr =3D (u8 *)kasan_mem_to_shadow(info->first_bad_addr); > > /* > - * If shadow byte value is in [0, KASAN_SHADOW_SCALE_SIZE) we can= look > + * If shadow byte value is in [0, KASAN_GRANULE_SIZE) we can look > * at the next shadow byte to determine the type of the bad acces= s. > */ > - if (*shadow_addr > 0 && *shadow_addr <=3D KASAN_SHADOW_SCALE_SIZE= - 1) > + if (*shadow_addr > 0 && *shadow_addr <=3D KASAN_GRANULE_SIZE - 1) > shadow_addr++; > > switch (*shadow_addr) { > - case 0 ... KASAN_SHADOW_SCALE_SIZE - 1: > + case 0 ... KASAN_GRANULE_SIZE - 1: > /* > * In theory it's still possible to see these shadow valu= es > * due to a data race in the kernel code. > diff --git a/mm/kasan/init.c b/mm/kasan/init.c > index fe6be0be1f76..754b641c83c7 100644 > --- a/mm/kasan/init.c > +++ b/mm/kasan/init.c > @@ -447,8 +447,8 @@ void kasan_remove_zero_shadow(void *start, unsigned l= ong size) > end =3D addr + (size >> KASAN_SHADOW_SCALE_SHIFT); > > if (WARN_ON((unsigned long)start % > - (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE)) || > - WARN_ON(size % (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE))) > + (KASAN_GRANULE_SIZE * PAGE_SIZE)) || > + WARN_ON(size % (KASAN_GRANULE_SIZE * PAGE_SIZE))) > return; > > for (; addr < end; addr =3D next) { > @@ -482,8 +482,8 @@ int kasan_add_zero_shadow(void *start, unsigned long = size) > shadow_end =3D shadow_start + (size >> KASAN_SHADOW_SCALE_SHIFT); > > if (WARN_ON((unsigned long)start % > - (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE)) || > - WARN_ON(size % (KASAN_SHADOW_SCALE_SIZE * PAGE_SIZE))) > + (KASAN_GRANULE_SIZE * PAGE_SIZE)) || > + WARN_ON(size % (KASAN_GRANULE_SIZE * PAGE_SIZE))) > return -EINVAL; > > ret =3D kasan_populate_early_shadow(shadow_start, shadow_end); > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 03450d3b31f7..c31e2c739301 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -5,8 +5,8 @@ > #include > #include > > -#define KASAN_SHADOW_SCALE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT) > -#define KASAN_SHADOW_MASK (KASAN_SHADOW_SCALE_SIZE - 1) > +#define KASAN_GRANULE_SIZE (1UL << KASAN_SHADOW_SCALE_SHIFT) > +#define KASAN_GRANULE_MASK (KASAN_GRANULE_SIZE - 1) > > #define KASAN_TAG_KERNEL 0xFF /* native kernel pointers tag */ > #define KASAN_TAG_INVALID 0xFE /* inaccessible memory tag */ > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 4f49fa6cd1aa..7c025d792e2f 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -317,24 +317,24 @@ static bool __must_check get_address_stack_frame_in= fo(const void *addr, > return false; > > aligned_addr =3D round_down((unsigned long)addr, sizeof(long)); > - mem_ptr =3D round_down(aligned_addr, KASAN_SHADOW_SCALE_SIZE); > + mem_ptr =3D round_down(aligned_addr, KASAN_GRANULE_SIZE); > shadow_ptr =3D kasan_mem_to_shadow((void *)aligned_addr); > shadow_bottom =3D kasan_mem_to_shadow(end_of_stack(current)); > > while (shadow_ptr >=3D shadow_bottom && *shadow_ptr !=3D KASAN_ST= ACK_LEFT) { > shadow_ptr--; > - mem_ptr -=3D KASAN_SHADOW_SCALE_SIZE; > + mem_ptr -=3D KASAN_GRANULE_SIZE; > } > > while (shadow_ptr >=3D shadow_bottom && *shadow_ptr =3D=3D KASAN_= STACK_LEFT) { > shadow_ptr--; > - mem_ptr -=3D KASAN_SHADOW_SCALE_SIZE; > + mem_ptr -=3D KASAN_GRANULE_SIZE; > } > > if (shadow_ptr < shadow_bottom) > return false; > > - frame =3D (const unsigned long *)(mem_ptr + KASAN_SHADOW_SCALE_SI= ZE); > + frame =3D (const unsigned long *)(mem_ptr + KASAN_GRANULE_SIZE); > if (frame[0] !=3D KASAN_CURRENT_STACK_FRAME_MAGIC) { > pr_err("KASAN internal error: frame info validation faile= d; invalid marker: %lu\n", > frame[0]); > @@ -572,6 +572,6 @@ void kasan_non_canonical_hook(unsigned long addr) > else > bug_type =3D "maybe wild-memory-access"; > pr_alert("KASAN: %s in range [0x%016lx-0x%016lx]\n", bug_type, > - orig_addr, orig_addr + KASAN_SHADOW_MASK); > + orig_addr, orig_addr + KASAN_GRANULE_SIZE - 1); > } > #endif > diff --git a/mm/kasan/tags_report.c b/mm/kasan/tags_report.c > index bee43717d6f0..6ddb55676a7c 100644 > --- a/mm/kasan/tags_report.c > +++ b/mm/kasan/tags_report.c > @@ -81,7 +81,7 @@ void *find_first_bad_addr(void *addr, size_t size) > void *end =3D p + size; > > while (p < end && tag =3D=3D *(u8 *)kasan_mem_to_shadow(p)) > - p +=3D KASAN_SHADOW_SCALE_SIZE; > + p +=3D KASAN_GRANULE_SIZE; > return p; > } > > -- > 2.28.0.618.gf4bc123cb7-goog > --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44260C43463 for ; Fri, 18 Sep 2020 08:06:07 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C59862100A for ; Fri, 18 Sep 2020 08:06:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="N42v/Ex/"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="PZk5MVq7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C59862100A Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=XEpAGbCs5n2GIBo4yZUcDnMcwQe42a7QwjlrDshCCYI=; b=N42v/Ex/zs09SMo+LYyIR4usJ Bb2DU3TQux6/G5+PO9KTsToPgWo1kXd0EhUXlfXuDy6Asjve2qCfc+rtIMB9q1izw9YUFR0tFn6x3 P+Y5g/Zl2FNPVPtnPx/To0mgu1SrN8qnEDuN4/trnNToNUJpErx6GEtd/zfl5xr55CWpXJjSFEMO6 vhFOsrbIG2RvHhObr3LWheW7eIfp305Jq+joUH8cTCK0F6f4t1N9FfIsuOYfUegD3xPw3HrKrbdq7 A7gDoy+sGnbLKULygVSv1IDTxKQ8fq5eiXsjG8sBK0QurdkjlruZHGQjw8TvqDs9Zpc/tooAcPkKA vdPTkfj9A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kJBNV-0007wO-5p; Fri, 18 Sep 2020 08:04:21 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kJBNS-0007vl-EC for linux-arm-kernel@lists.infradead.org; Fri, 18 Sep 2020 08:04:19 +0000 Received: by mail-wr1-x444.google.com with SMTP id k15so4617394wrn.10 for ; Fri, 18 Sep 2020 01:04:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=PZk5MVq76PLb8voUjCoMzWs1XoGAO4ZR887R7Cg/2rnSwE/SL1XhtlKCPq0pHBebvU AATshxx4m63RPPaLKbwcuf7QmnlquoaPOzyY5l4QguAWt+Z/37pBOhMeN1vgfhVC/RZC 7FArP7g8OJ/5iu2UGvFqpsZgUW8LHuRuh2G5i4YSbizCeD5qwzOJw3sih4+d6Q/T/b4j wQ+FiOBLnG/byVFS5KzTPaSRAKxJflAJgR8XSw6Bn9e6jjww5+7MqNSHpz55GMeX8oXy 7PDe9TUZMHpTYt9Bim/jB1KNI41IXQKKEnvxw+p7K9K4Ww9UYPs7QzFJStR38HrVGmrT qRPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sN6WRoJbr99xIOpz0jJ0Fxcd65Efp6vGcy18bVZTF7Y=; b=XF4oLQcf9aVUFSigwPOwvPLEJjZq3TGyIlvRHMe0WPN8xaRSWfyr+S8qhbuTU13x0L wo8YJ2XeMQq0opTA4mK+Bi3XKda2J2+k5DN29lhqfh1n5ybpZtbutinopT6XD8pk/KAj Ri02pbjnO2mCagpbfxei3NR9fzYoimIh2HzyBvnATFm1zHycHlp443hcWCPxElJWOivE 4rLvoxmzyYRyJQV2zu4Tn++8uVzANu8B8qdLFF7qHtmSdCLxjLYS/YExmkKHlSKzynmC mE8qyMH3JUIjXjRNj/oxRwNOfEVM2aGDDI/oY40OpWh3QxVFg2Kg9c9ivwSP34SN6YY0 1PPQ== X-Gm-Message-State: AOAM531Ewj2DUwXYNQZt28owJTkz/QxOcoRjG83V08cFZHJs72ngPQbd YDPbRC6zZGtKeQpIEGpcr6HjnzvfLi37+oe4xSEyiQ== X-Google-Smtp-Source: ABdhPJzHAMDajviQ9mONFnxn+IlAqn5XzYVWfQcO/oFLSPbcSbkEX0G2yKHTsoqXKmDxliOnnbFPKA+ldsGsNwKI2Aw= X-Received: by 2002:adf:e312:: with SMTP id b18mr14018593wrj.372.1600416256553; Fri, 18 Sep 2020 01:04:16 -0700 (PDT) MIME-Version: 1.0 References: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> In-Reply-To: <0d1862fec200eec644bbf0e2d5969fb94d2e923e.1600204505.git.andreyknvl@google.com> From: Alexander Potapenko Date: Fri, 18 Sep 2020 10:04:05 +0200 Message-ID: Subject: Re: [PATCH v2 05/37] kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* To: Andrey Konovalov X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200918_040418_529747_F8A02B1A X-CRM114-Status: GOOD ( 30.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Linux ARM , Marco Elver , Elena Petrova , Catalin Marinas , Kevin Brodsky , Will Deacon , Branislav Rankov , kasan-dev , LKML , Linux Memory Management List , Evgenii Stepanov , Andrey Ryabinin , Andrew Morton , Vincenzo Frascino , Dmitry Vyukov Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBTZXAgMTUsIDIwMjAgYXQgMTE6MTYgUE0gQW5kcmV5IEtvbm92YWxvdiA8YW5kcmV5 a252bEBnb29nbGUuY29tPiB3cm90ZToKPgo+IFRoaXMgaXMgYSBwcmVwYXJhdG9yeSBjb21taXQg Zm9yIHRoZSB1cGNvbWluZyBhZGRpdGlvbiBvZiBhIG5ldyBoYXJkd2FyZQo+IHRhZy1iYXNlZCAo TVRFLWJhc2VkKSBLQVNBTiBtb2RlLgo+Cj4gVGhlIG5ldyBtb2RlIHdvbid0IGJlIHVzaW5nIHNo YWRvdyBtZW1vcnksIGJ1dCB3aWxsIHN0aWxsIHVzZSB0aGUgY29uY2VwdAo+IG9mIG1lbW9yeSBn cmFudWxlcy4KCktBU0FOIGRvY3VtZW50YXRpb24gZG9lc24ndCBzZWVtIHRvIGV4cGxhaW4gdGhp cyBjb25jZXB0IGFueXdoZXJlIChJCmFsc28gY2hlY2tlZCB0aGUgImthc2FuOiBhZGQgZG9jdW1l bnRhdGlvbiBmb3IgaGFyZHdhcmUgdGFnLWJhc2VkCm1vZGUiIHBhdGNoKSwgbG9va3MgbGlrZSBp dCdzIG9ubHkgbWVudGlvbmVkIGluIE1URSBkb2N1bWVudGF0aW9uLgpDb3VsZCB5b3UgcGxlYXNl IGVsYWJvcmF0ZSBvbiB3aGF0IHdlIGNvbnNpZGVyIGEgZ3JhbnVsZSBpbiBlYWNoIG9mIEtBU0FO IG1vZGVzPwoKPiBSZW5hbWUgS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkUgdG8gS0FTQU5fR1JBTlVM RV9TSVpFLAo+IGFuZCBLQVNBTl9TSEFET1dfTUFTSyB0byBLQVNBTl9HUkFOVUxFX01BU0suCj4K PiBBbHNvIHVzZSBNQVNLIHdoZW4gdXNlZCBhcyBhIG1hc2ssIG90aGVyd2lzZSB1c2UgU0laRS4K Pgo+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KPgo+IFNpZ25lZC1vZmYtYnk6IEFuZHJleSBLb25v dmFsb3YgPGFuZHJleWtudmxAZ29vZ2xlLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBWaW5jZW56byBG cmFzY2lubyA8dmluY2Vuem8uZnJhc2Npbm9AYXJtLmNvbT4KPiAtLS0KPiBDaGFuZ2UtSWQ6IElh YzczM2UyMjQ4YWE5ZDI5ZjZmYzQyNWQ4OTQ2YmEwN2NjYTczZWNmCj4gLS0tCj4gIERvY3VtZW50 YXRpb24vZGV2LXRvb2xzL2thc2FuLnJzdCB8ICAyICstCj4gIGxpYi90ZXN0X2thc2FuLmMgICAg ICAgICAgICAgICAgICB8ICAyICstCj4gIG1tL2thc2FuL2NvbW1vbi5jICAgICAgICAgICAgICAg ICB8IDM5ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiAgbW0va2FzYW4vZ2VuZXJp Yy5jICAgICAgICAgICAgICAgIHwgMTQgKysrKystLS0tLS0KPiAgbW0va2FzYW4vZ2VuZXJpY19y ZXBvcnQuYyAgICAgICAgIHwgIDggKysrLS0tLQo+ICBtbS9rYXNhbi9pbml0LmMgICAgICAgICAg ICAgICAgICAgfCAgOCArKystLS0tCj4gIG1tL2thc2FuL2thc2FuLmggICAgICAgICAgICAgICAg ICB8ICA0ICsrLS0KPiAgbW0va2FzYW4vcmVwb3J0LmMgICAgICAgICAgICAgICAgIHwgMTAgKysr Ky0tLS0KPiAgbW0va2FzYW4vdGFnc19yZXBvcnQuYyAgICAgICAgICAgIHwgIDIgKy0KPiAgOSBm aWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkKPgo+IGRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QgYi9Eb2N1bWVudGF0aW9u L2Rldi10b29scy9rYXNhbi5yc3QKPiBpbmRleCAzOGZkNTY4MWZhZGUuLmEzMDMwZmM2YWZlNSAx MDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QKPiArKysgYi9E b2N1bWVudGF0aW9uL2Rldi10b29scy9rYXNhbi5yc3QKPiBAQCAtMjY0LDcgKzI2NCw3IEBAIE1v c3QgbWFwcGluZ3MgaW4gdm1hbGxvYyBzcGFjZSBhcmUgc21hbGwsIHJlcXVpcmluZyBsZXNzIHRo YW4gYSBmdWxsCj4gIHBhZ2Ugb2Ygc2hhZG93IHNwYWNlLiBBbGxvY2F0aW5nIGEgZnVsbCBzaGFk b3cgcGFnZSBwZXIgbWFwcGluZyB3b3VsZAo+ICB0aGVyZWZvcmUgYmUgd2FzdGVmdWwuIEZ1cnRo ZXJtb3JlLCB0byBlbnN1cmUgdGhhdCBkaWZmZXJlbnQgbWFwcGluZ3MKPiAgdXNlIGRpZmZlcmVu dCBzaGFkb3cgcGFnZXMsIG1hcHBpbmdzIHdvdWxkIGhhdmUgdG8gYmUgYWxpZ25lZCB0bwo+IC1g YEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFICogUEFHRV9TSVpFYGAuCj4gK2BgS0FTQU5fR1JBTlVM RV9TSVpFICogUEFHRV9TSVpFYGAuCj4KPiAgSW5zdGVhZCwgd2Ugc2hhcmUgYmFja2luZyBzcGFj ZSBhY3Jvc3MgbXVsdGlwbGUgbWFwcGluZ3MuIFdlIGFsbG9jYXRlCj4gIGEgYmFja2luZyBwYWdl IHdoZW4gYSBtYXBwaW5nIGluIHZtYWxsb2Mgc3BhY2UgdXNlcyBhIHBhcnRpY3VsYXIgcGFnZQo+ IGRpZmYgLS1naXQgYS9saWIvdGVzdF9rYXNhbi5jIGIvbGliL3Rlc3Rfa2FzYW4uYwo+IGluZGV4 IDUzZTk1M2JiMWQxZC4uZGRkMGI4MGYyNGExIDEwMDY0NAo+IC0tLSBhL2xpYi90ZXN0X2thc2Fu LmMKPiArKysgYi9saWIvdGVzdF9rYXNhbi5jCj4gQEAgLTI1LDcgKzI1LDcgQEAKPgo+ICAjaW5j bHVkZSAiLi4vbW0va2FzYW4va2FzYW4uaCIKPgo+IC0jZGVmaW5lIE9PQl9UQUdfT0ZGIChJU19F TkFCTEVEKENPTkZJR19LQVNBTl9HRU5FUklDKSA/IDAgOiBLQVNBTl9TSEFET1dfU0NBTEVfU0la RSkKPiArI2RlZmluZSBPT0JfVEFHX09GRiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU5fR0VORVJJ QykgPyAwIDogS0FTQU5fR1JBTlVMRV9TSVpFKQo+Cj4gIC8qCj4gICAqIFdlIGFzc2lnbiBzb21l IHRlc3QgcmVzdWx0cyB0byB0aGVzZSBnbG9iYWxzIHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMKPiBk aWZmIC0tZ2l0IGEvbW0va2FzYW4vY29tbW9uLmMgYi9tbS9rYXNhbi9jb21tb24uYwo+IGluZGV4 IDY1OTMzYjI3ZGY4MS4uYzlkYWYyYzMzNjUxIDEwMDY0NAo+IC0tLSBhL21tL2thc2FuL2NvbW1v bi5jCj4gKysrIGIvbW0va2FzYW4vY29tbW9uLmMKPiBAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQg Km1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCj4KPiAgLyoK PiAgICogUG9pc29ucyB0aGUgc2hhZG93IG1lbW9yeSBmb3IgJ3NpemUnIGJ5dGVzIHN0YXJ0aW5n IGZyb20gJ2FkZHInLgo+IC0gKiBNZW1vcnkgYWRkcmVzc2VzIHNob3VsZCBiZSBhbGlnbmVkIHRv IEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFLgo+ICsgKiBNZW1vcnkgYWRkcmVzc2VzIHNob3VsZCBi ZSBhbGlnbmVkIHRvIEtBU0FOX0dSQU5VTEVfU0laRS4KPiAgICovCj4gIHZvaWQga2FzYW5fcG9p c29uX21lbW9yeShjb25zdCB2b2lkICphZGRyZXNzLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUpCj4g IHsKPiBAQCAtMTQzLDEzICsxNDMsMTMgQEAgdm9pZCBrYXNhbl91bnBvaXNvbl9tZW1vcnkoY29u c3Qgdm9pZCAqYWRkcmVzcywgc2l6ZV90IHNpemUpCj4KPiAgICAgICAgIGthc2FuX3BvaXNvbl9t ZW1vcnkoYWRkcmVzcywgc2l6ZSwgdGFnKTsKPgo+IC0gICAgICAgaWYgKHNpemUgJiBLQVNBTl9T SEFET1dfTUFTSykgewo+ICsgICAgICAgaWYgKHNpemUgJiBLQVNBTl9HUkFOVUxFX01BU0spIHsK PiAgICAgICAgICAgICAgICAgdTggKnNoYWRvdyA9ICh1OCAqKWthc2FuX21lbV90b19zaGFkb3co YWRkcmVzcyArIHNpemUpOwo+Cj4gICAgICAgICAgICAgICAgIGlmIChJU19FTkFCTEVEKENPTkZJ R19LQVNBTl9TV19UQUdTKSkKPiAgICAgICAgICAgICAgICAgICAgICAgICAqc2hhZG93ID0gdGFn Owo+ICAgICAgICAgICAgICAgICBlbHNlCj4gLSAgICAgICAgICAgICAgICAgICAgICAgKnNoYWRv dyA9IHNpemUgJiBLQVNBTl9TSEFET1dfTUFTSzsKPiArICAgICAgICAgICAgICAgICAgICAgICAq c2hhZG93ID0gc2l6ZSAmIEtBU0FOX0dSQU5VTEVfTUFTSzsKPiAgICAgICAgIH0KPiAgfQo+Cj4g QEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIGthc2FuX3VucG9pc29uX29iamVjdF9kYXRhKHN0cnVj dCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KQo+ICB2b2lkIGthc2FuX3BvaXNvbl9v YmplY3RfZGF0YShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdCkKPiAgewo+ ICAgICAgICAga2FzYW5fcG9pc29uX21lbW9yeShvYmplY3QsCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgcm91bmRfdXAoY2FjaGUtPm9iamVjdF9zaXplLCBLQVNBTl9TSEFET1dfU0NBTEVfU0la RSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcm91bmRfdXAoY2FjaGUtPm9iamVjdF9zaXpl LCBLQVNBTl9HUkFOVUxFX1NJWkUpLAo+ICAgICAgICAgICAgICAgICAgICAgICAgIEtBU0FOX0tN QUxMT0NfUkVEWk9ORSk7Cj4gIH0KPgo+IEBAIC0zNzMsNyArMzczLDcgQEAgc3RhdGljIGlubGlu ZSBib29sIHNoYWRvd19pbnZhbGlkKHU4IHRhZywgczggc2hhZG93X2J5dGUpCj4gIHsKPiAgICAg ICAgIGlmIChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9HRU5FUklDKSkKPiAgICAgICAgICAgICAg ICAgcmV0dXJuIHNoYWRvd19ieXRlIDwgMCB8fAo+IC0gICAgICAgICAgICAgICAgICAgICAgIHNo YWRvd19ieXRlID49IEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHNoYWRvd19ieXRlID49IEtBU0FOX0dSQU5VTEVfU0laRTsKPgo+ICAgICAgICAgLyog ZWxzZSBDT05GSUdfS0FTQU5fU1dfVEFHUzogKi8KPiAgICAgICAgIGlmICgodTgpc2hhZG93X2J5 dGUgPT0gS0FTQU5fVEFHX0lOVkFMSUQpCj4gQEAgLTQxMiw3ICs0MTIsNyBAQCBzdGF0aWMgYm9v bCBfX2thc2FuX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVj dCwKPiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gICAgICAgICB9Cj4KPiAtICAgICAg IHJvdW5kZWRfdXBfc2l6ZSA9IHJvdW5kX3VwKGNhY2hlLT5vYmplY3Rfc2l6ZSwgS0FTQU5fU0hB RE9XX1NDQUxFX1NJWkUpOwo+ICsgICAgICAgcm91bmRlZF91cF9zaXplID0gcm91bmRfdXAoY2Fj aGUtPm9iamVjdF9zaXplLCBLQVNBTl9HUkFOVUxFX1NJWkUpOwo+ICAgICAgICAga2FzYW5fcG9p c29uX21lbW9yeShvYmplY3QsIHJvdW5kZWRfdXBfc2l6ZSwgS0FTQU5fS01BTExPQ19GUkVFKTsK Pgo+ICAgICAgICAgaWYgKChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9HRU5FUklDKSAmJiAhcXVh cmFudGluZSkgfHwKPiBAQCAtNDQ1LDkgKzQ0NSw5IEBAIHN0YXRpYyB2b2lkICpfX2thc2FuX2tt YWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBjb25zdCB2b2lkICpvYmplY3QsCj4gICAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+Cj4gICAgICAgICByZWR6b25lX3N0YXJ0ID0gcm91 bmRfdXAoKHVuc2lnbmVkIGxvbmcpKG9iamVjdCArIHNpemUpLAo+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkUpOwo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgS0FTQU5fR1JBTlVMRV9TSVpFKTsKPiAgICAgICAgIHJlZHpvbmVf ZW5kID0gcm91bmRfdXAoKHVuc2lnbmVkIGxvbmcpb2JqZWN0ICsgY2FjaGUtPm9iamVjdF9zaXpl LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FTQU5fU0hBRE9XX1NDQUxFX1NJ WkUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FTQU5fR1JBTlVMRV9TSVpF KTsKPgo+ICAgICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpKQo+ICAg ICAgICAgICAgICAgICB0YWcgPSBhc3NpZ25fdGFnKGNhY2hlLCBvYmplY3QsIGZhbHNlLCBrZWVw X3RhZyk7Cj4gQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkICogX19tdXN0X2NoZWNrIGthc2FuX2tt YWxsb2NfbGFyZ2UoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKPgo+ICAgICAgICAgcGFn ZSA9IHZpcnRfdG9fcGFnZShwdHIpOwo+ICAgICAgICAgcmVkem9uZV9zdGFydCA9IHJvdW5kX3Vw KCh1bnNpZ25lZCBsb25nKShwdHIgKyBzaXplKSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEtBU0FOX0dSQU5VTEVfU0laRSk7Cj4gICAgICAgICByZWR6b25lX2VuZCA9ICh1 bnNpZ25lZCBsb25nKXB0ciArIHBhZ2Vfc2l6ZShwYWdlKTsKPgo+ICAgICAgICAga2FzYW5fdW5w b2lzb25fbWVtb3J5KHB0ciwgc2l6ZSk7Cj4gQEAgLTU4OSw4ICs1ODksOCBAQCBzdGF0aWMgaW50 IF9fbWVtaW5pdCBrYXNhbl9tZW1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwK PiAgICAgICAgIHNoYWRvd19zaXplID0gbnJfc2hhZG93X3BhZ2VzIDw8IFBBR0VfU0hJRlQ7Cj4g ICAgICAgICBzaGFkb3dfZW5kID0gc2hhZG93X3N0YXJ0ICsgc2hhZG93X3NpemU7Cj4KPiAtICAg ICAgIGlmIChXQVJOX09OKG1lbV9kYXRhLT5ucl9wYWdlcyAlIEtBU0FOX1NIQURPV19TQ0FMRV9T SVpFKSB8fAo+IC0gICAgICAgICAgICAgICBXQVJOX09OKHN0YXJ0X2thZGRyICUgKEtBU0FOX1NI QURPV19TQ0FMRV9TSVpFIDw8IFBBR0VfU0hJRlQpKSkKPiArICAgICAgIGlmIChXQVJOX09OKG1l bV9kYXRhLT5ucl9wYWdlcyAlIEtBU0FOX0dSQU5VTEVfU0laRSkgfHwKPiArICAgICAgICAgICAg ICAgV0FSTl9PTihzdGFydF9rYWRkciAlIChLQVNBTl9HUkFOVUxFX1NJWkUgPDwgUEFHRV9TSElG VCkpKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gTk9USUZZX0JBRDsKPgo+ICAgICAgICAgc3dp dGNoIChhY3Rpb24pIHsKPiBAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQga2FzYW5fcG9pc29uX3Zt YWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKPiAgICAgICAgIGlm ICghaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihzdGFydCkpCj4gICAgICAgICAgICAgICAgIHJl dHVybjsKPgo+IC0gICAgICAgc2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX1NIQURPV19TQ0FM RV9TSVpFKTsKPiArICAgICAgIHNpemUgPSByb3VuZF91cChzaXplLCBLQVNBTl9HUkFOVUxFX1NJ WkUpOwo+ICAgICAgICAga2FzYW5fcG9pc29uX21lbW9yeShzdGFydCwgc2l6ZSwgS0FTQU5fVk1B TExPQ19JTlZBTElEKTsKPiAgfQo+Cj4gQEAgLTg2MSwyMiArODYxLDIyIEBAIHZvaWQga2FzYW5f cmVsZWFzZV92bWFsbG9jKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAo+ ICAgICAgICAgdW5zaWduZWQgbG9uZyByZWdpb25fc3RhcnQsIHJlZ2lvbl9lbmQ7Cj4gICAgICAg ICB1bnNpZ25lZCBsb25nIHNpemU7Cj4KPiAtICAgICAgIHJlZ2lvbl9zdGFydCA9IEFMSUdOKHN0 YXJ0LCBQQUdFX1NJWkUgKiBLQVNBTl9TSEFET1dfU0NBTEVfU0laRSk7Cj4gLSAgICAgICByZWdp b25fZW5kID0gQUxJR05fRE9XTihlbmQsIFBBR0VfU0laRSAqIEtBU0FOX1NIQURPV19TQ0FMRV9T SVpFKTsKPiArICAgICAgIHJlZ2lvbl9zdGFydCA9IEFMSUdOKHN0YXJ0LCBQQUdFX1NJWkUgKiBL QVNBTl9HUkFOVUxFX1NJWkUpOwo+ICsgICAgICAgcmVnaW9uX2VuZCA9IEFMSUdOX0RPV04oZW5k LCBQQUdFX1NJWkUgKiBLQVNBTl9HUkFOVUxFX1NJWkUpOwo+Cj4gICAgICAgICBmcmVlX3JlZ2lv bl9zdGFydCA9IEFMSUdOKGZyZWVfcmVnaW9uX3N0YXJ0LAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQQUdFX1NJWkUgKiBLQVNBTl9TSEFET1dfU0NBTEVfU0laRSk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfU0laRSAqIEtBU0FOX0dSQU5VTEVf U0laRSk7Cj4KPiAgICAgICAgIGlmIChzdGFydCAhPSByZWdpb25fc3RhcnQgJiYKPiAgICAgICAg ICAgICBmcmVlX3JlZ2lvbl9zdGFydCA8IHJlZ2lvbl9zdGFydCkKPiAtICAgICAgICAgICAgICAg cmVnaW9uX3N0YXJ0IC09IFBBR0VfU0laRSAqIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFOwo+ICsg ICAgICAgICAgICAgICByZWdpb25fc3RhcnQgLT0gUEFHRV9TSVpFICogS0FTQU5fR1JBTlVMRV9T SVpFOwo+Cj4gICAgICAgICBmcmVlX3JlZ2lvbl9lbmQgPSBBTElHTl9ET1dOKGZyZWVfcmVnaW9u X2VuZCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFICog S0FTQU5fU0hBRE9XX1NDQUxFX1NJWkUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQQUdFX1NJWkUgKiBLQVNBTl9HUkFOVUxFX1NJWkUpOwo+Cj4gICAgICAgICBpZiAo ZW5kICE9IHJlZ2lvbl9lbmQgJiYKPiAgICAgICAgICAgICBmcmVlX3JlZ2lvbl9lbmQgPiByZWdp b25fZW5kKQo+IC0gICAgICAgICAgICAgICByZWdpb25fZW5kICs9IFBBR0VfU0laRSAqIEtBU0FO X1NIQURPV19TQ0FMRV9TSVpFOwo+ICsgICAgICAgICAgICAgICByZWdpb25fZW5kICs9IFBBR0Vf U0laRSAqIEtBU0FOX0dSQU5VTEVfU0laRTsKPgo+ICAgICAgICAgc2hhZG93X3N0YXJ0ID0ga2Fz YW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKXJlZ2lvbl9zdGFydCk7Cj4gICAgICAgICBzaGFkb3df ZW5kID0ga2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKXJlZ2lvbl9lbmQpOwo+IEBAIC05MDIs NyArOTAyLDggQEAgaW50IGthc2FuX21vZHVsZV9hbGxvYyh2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSkKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2hhZG93X3N0YXJ0Owo+Cj4gICAgICAgICBzaGFk b3dfc3RhcnQgPSAodW5zaWduZWQgbG9uZylrYXNhbl9tZW1fdG9fc2hhZG93KGFkZHIpOwo+IC0g ICAgICAgc2NhbGVkX3NpemUgPSAoc2l6ZSArIEtBU0FOX1NIQURPV19NQVNLKSA+PiBLQVNBTl9T SEFET1dfU0NBTEVfU0hJRlQ7Cj4gKyAgICAgICBzY2FsZWRfc2l6ZSA9IChzaXplICsgS0FTQU5f R1JBTlVMRV9TSVpFIC0gMSkgPj4KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtB U0FOX1NIQURPV19TQ0FMRV9TSElGVDsKPiAgICAgICAgIHNoYWRvd19zaXplID0gcm91bmRfdXAo c2NhbGVkX3NpemUsIFBBR0VfU0laRSk7Cj4KPiAgICAgICAgIGlmIChXQVJOX09OKCFQQUdFX0FM SUdORUQoc2hhZG93X3N0YXJ0KSkpCj4gZGlmZiAtLWdpdCBhL21tL2thc2FuL2dlbmVyaWMuYyBi L21tL2thc2FuL2dlbmVyaWMuYwo+IGluZGV4IDRiNWY5MDUxOThkOC4uZjZkNjhhYTk4NzJmIDEw MDY0NAo+IC0tLSBhL21tL2thc2FuL2dlbmVyaWMuYwo+ICsrKyBiL21tL2thc2FuL2dlbmVyaWMu Ywo+IEBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtZW1vcnlf aXNfcG9pc29uZWRfMSh1bnNpZ25lZCBsb25nIGFkZHIpCj4gICAgICAgICBzOCBzaGFkb3dfdmFs dWUgPSAqKHM4ICopa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKWFkZHIpOwo+Cj4gICAgICAg ICBpZiAodW5saWtlbHkoc2hhZG93X3ZhbHVlKSkgewo+IC0gICAgICAgICAgICAgICBzOCBsYXN0 X2FjY2Vzc2libGVfYnl0ZSA9IGFkZHIgJiBLQVNBTl9TSEFET1dfTUFTSzsKPiArICAgICAgICAg ICAgICAgczggbGFzdF9hY2Nlc3NpYmxlX2J5dGUgPSBhZGRyICYgS0FTQU5fR1JBTlVMRV9NQVNL Owo+ICAgICAgICAgICAgICAgICByZXR1cm4gdW5saWtlbHkobGFzdF9hY2Nlc3NpYmxlX2J5dGUg Pj0gc2hhZG93X3ZhbHVlKTsKPiAgICAgICAgIH0KPgo+IEBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRp YyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBtZW1vcnlfaXNfcG9pc29uZWRfMl80XzgodW5zaWduZWQg bG9uZyBhZGRyLAo+ICAgICAgICAgICogQWNjZXNzIGNyb3NzZXMgOChzaGFkb3cgc2l6ZSktYnl0 ZSBib3VuZGFyeS4gU3VjaCBhY2Nlc3MgbWFwcwo+ICAgICAgICAgICogaW50byAyIHNoYWRvdyBi eXRlcywgc28gd2UgbmVlZCB0byBjaGVjayB0aGVtIGJvdGguCj4gICAgICAgICAgKi8KPiAtICAg ICAgIGlmICh1bmxpa2VseSgoKGFkZHIgKyBzaXplIC0gMSkgJiBLQVNBTl9TSEFET1dfTUFTSykg PCBzaXplIC0gMSkpCj4gKyAgICAgICBpZiAodW5saWtlbHkoKChhZGRyICsgc2l6ZSAtIDEpICYg S0FTQU5fR1JBTlVMRV9NQVNLKSA8IHNpemUgLSAxKSkKPiAgICAgICAgICAgICAgICAgcmV0dXJu ICpzaGFkb3dfYWRkciB8fCBtZW1vcnlfaXNfcG9pc29uZWRfMShhZGRyICsgc2l6ZSAtIDEpOwo+ Cj4gICAgICAgICByZXR1cm4gbWVtb3J5X2lzX3BvaXNvbmVkXzEoYWRkciArIHNpemUgLSAxKTsK PiBAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbWVtb3J5X2lz X3BvaXNvbmVkXzE2KHVuc2lnbmVkIGxvbmcgYWRkcikKPiAgICAgICAgIHUxNiAqc2hhZG93X2Fk ZHIgPSAodTE2ICopa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKWFkZHIpOwo+Cj4gICAgICAg ICAvKiBVbmFsaWduZWQgMTYtYnl0ZXMgYWNjZXNzIG1hcHMgaW50byAzIHNoYWRvdyBieXRlcy4g Ki8KPiAtICAgICAgIGlmICh1bmxpa2VseSghSVNfQUxJR05FRChhZGRyLCBLQVNBTl9TSEFET1df U0NBTEVfU0laRSkpKQo+ICsgICAgICAgaWYgKHVubGlrZWx5KCFJU19BTElHTkVEKGFkZHIsIEtB U0FOX0dSQU5VTEVfU0laRSkpKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gKnNoYWRvd19hZGRy IHx8IG1lbW9yeV9pc19wb2lzb25lZF8xKGFkZHIgKyAxNSk7Cj4KPiAgICAgICAgIHJldHVybiAq c2hhZG93X2FkZHI7Cj4gQEAgLTEzOSw3ICsxMzksNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5l IGJvb2wgbWVtb3J5X2lzX3BvaXNvbmVkX24odW5zaWduZWQgbG9uZyBhZGRyLAo+ICAgICAgICAg ICAgICAgICBzOCAqbGFzdF9zaGFkb3cgPSAoczggKilrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lk ICopbGFzdF9ieXRlKTsKPgo+ICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkocmV0ICE9ICh1 bnNpZ25lZCBsb25nKWxhc3Rfc2hhZG93IHx8Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgKChs b25nKShsYXN0X2J5dGUgJiBLQVNBTl9TSEFET1dfTUFTSykgPj0gKmxhc3Rfc2hhZG93KSkpCj4g KyAgICAgICAgICAgICAgICAgICAgICAgKChsb25nKShsYXN0X2J5dGUgJiBLQVNBTl9HUkFOVUxF X01BU0spID49ICpsYXN0X3NoYWRvdykpKQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOwo+ICAgICAgICAgfQo+ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IEBAIC0yMDUsNyAr MjA1LDcgQEAgdm9pZCBrYXNhbl9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqY2Fj aGUpCj4KPiAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfZ2xvYmFsKHN0cnVjdCBrYXNhbl9nbG9iYWwg Kmdsb2JhbCkKPiAgewo+IC0gICAgICAgc2l6ZV90IGFsaWduZWRfc2l6ZSA9IHJvdW5kX3VwKGds b2JhbC0+c2l6ZSwgS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkUpOwo+ICsgICAgICAgc2l6ZV90IGFs aWduZWRfc2l6ZSA9IHJvdW5kX3VwKGdsb2JhbC0+c2l6ZSwgS0FTQU5fR1JBTlVMRV9TSVpFKTsK Pgo+ICAgICAgICAga2FzYW5fdW5wb2lzb25fbWVtb3J5KGdsb2JhbC0+YmVnLCBnbG9iYWwtPnNp emUpOwo+Cj4gQEAgLTI3OSwxMCArMjc5LDEwIEBAIEVYUE9SVF9TWU1CT0woX19hc2FuX2hhbmRs ZV9ub19yZXR1cm4pOwo+ICAvKiBFbWl0dGVkIGJ5IGNvbXBpbGVyIHRvIHBvaXNvbiBhbGxvY2Eo KWVkIG9iamVjdHMuICovCj4gIHZvaWQgX19hc2FuX2FsbG9jYV9wb2lzb24odW5zaWduZWQgbG9u ZyBhZGRyLCBzaXplX3Qgc2l6ZSkKPiAgewo+IC0gICAgICAgc2l6ZV90IHJvdW5kZWRfdXBfc2l6 ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKPiArICAgICAgIHNp emVfdCByb3VuZGVkX3VwX3NpemUgPSByb3VuZF91cChzaXplLCBLQVNBTl9HUkFOVUxFX1NJWkUp Owo+ICAgICAgICAgc2l6ZV90IHBhZGRpbmdfc2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX0FM TE9DQV9SRURaT05FX1NJWkUpIC0KPiAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkX3Vw X3NpemU7Cj4gLSAgICAgICBzaXplX3Qgcm91bmRlZF9kb3duX3NpemUgPSByb3VuZF9kb3duKHNp emUsIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKPiArICAgICAgIHNpemVfdCByb3VuZGVkX2Rv d25fc2l6ZSA9IHJvdW5kX2Rvd24oc2l6ZSwgS0FTQU5fR1JBTlVMRV9TSVpFKTsKPgo+ICAgICAg ICAgY29uc3Qgdm9pZCAqbGVmdF9yZWR6b25lID0gKGNvbnN0IHZvaWQgKikoYWRkciAtCj4gICAg ICAgICAgICAgICAgICAgICAgICAgS0FTQU5fQUxMT0NBX1JFRFpPTkVfU0laRSk7Cj4gZGlmZiAt LWdpdCBhL21tL2thc2FuL2dlbmVyaWNfcmVwb3J0LmMgYi9tbS9rYXNhbi9nZW5lcmljX3JlcG9y dC5jCj4gaW5kZXggYTM4YzdhOWUxOTJhLi40ZGNlMTYzM2IwODIgMTAwNjQ0Cj4gLS0tIGEvbW0v a2FzYW4vZ2VuZXJpY19yZXBvcnQuYwo+ICsrKyBiL21tL2thc2FuL2dlbmVyaWNfcmVwb3J0LmMK PiBAQCAtMzksNyArMzksNyBAQCB2b2lkICpmaW5kX2ZpcnN0X2JhZF9hZGRyKHZvaWQgKmFkZHIs IHNpemVfdCBzaXplKQo+ICAgICAgICAgdm9pZCAqcCA9IGFkZHI7Cj4KPiAgICAgICAgIHdoaWxl IChwIDwgYWRkciArIHNpemUgJiYgISgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhwKSkpCj4g LSAgICAgICAgICAgICAgIHAgKz0gS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkU7Cj4gKyAgICAgICAg ICAgICAgIHAgKz0gS0FTQU5fR1JBTlVMRV9TSVpFOwo+ICAgICAgICAgcmV0dXJuIHA7Cj4gIH0K Pgo+IEBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zaGFkb3dfYnVn X3R5cGUoc3RydWN0IGthc2FuX2FjY2Vzc19pbmZvICppbmZvKQo+ICAgICAgICAgc2hhZG93X2Fk ZHIgPSAodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KGluZm8tPmZpcnN0X2JhZF9hZGRyKTsKPgo+ ICAgICAgICAgLyoKPiAtICAgICAgICAqIElmIHNoYWRvdyBieXRlIHZhbHVlIGlzIGluIFswLCBL QVNBTl9TSEFET1dfU0NBTEVfU0laRSkgd2UgY2FuIGxvb2sKPiArICAgICAgICAqIElmIHNoYWRv dyBieXRlIHZhbHVlIGlzIGluIFswLCBLQVNBTl9HUkFOVUxFX1NJWkUpIHdlIGNhbiBsb29rCj4g ICAgICAgICAgKiBhdCB0aGUgbmV4dCBzaGFkb3cgYnl0ZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUg b2YgdGhlIGJhZCBhY2Nlc3MuCj4gICAgICAgICAgKi8KPiAtICAgICAgIGlmICgqc2hhZG93X2Fk ZHIgPiAwICYmICpzaGFkb3dfYWRkciA8PSBLQVNBTl9TSEFET1dfU0NBTEVfU0laRSAtIDEpCj4g KyAgICAgICBpZiAoKnNoYWRvd19hZGRyID4gMCAmJiAqc2hhZG93X2FkZHIgPD0gS0FTQU5fR1JB TlVMRV9TSVpFIC0gMSkKPiAgICAgICAgICAgICAgICAgc2hhZG93X2FkZHIrKzsKPgo+ICAgICAg ICAgc3dpdGNoICgqc2hhZG93X2FkZHIpIHsKPiAtICAgICAgIGNhc2UgMCAuLi4gS0FTQU5fU0hB RE9XX1NDQUxFX1NJWkUgLSAxOgo+ICsgICAgICAgY2FzZSAwIC4uLiBLQVNBTl9HUkFOVUxFX1NJ WkUgLSAxOgo+ICAgICAgICAgICAgICAgICAvKgo+ICAgICAgICAgICAgICAgICAgKiBJbiB0aGVv cnkgaXQncyBzdGlsbCBwb3NzaWJsZSB0byBzZWUgdGhlc2Ugc2hhZG93IHZhbHVlcwo+ICAgICAg ICAgICAgICAgICAgKiBkdWUgdG8gYSBkYXRhIHJhY2UgaW4gdGhlIGtlcm5lbCBjb2RlLgo+IGRp ZmYgLS1naXQgYS9tbS9rYXNhbi9pbml0LmMgYi9tbS9rYXNhbi9pbml0LmMKPiBpbmRleCBmZTZi ZTBiZTFmNzYuLjc1NGI2NDFjODNjNyAxMDA2NDQKPiAtLS0gYS9tbS9rYXNhbi9pbml0LmMKPiAr KysgYi9tbS9rYXNhbi9pbml0LmMKPiBAQCAtNDQ3LDggKzQ0Nyw4IEBAIHZvaWQga2FzYW5fcmVt b3ZlX3plcm9fc2hhZG93KHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCj4gICAgICAg ICBlbmQgPSBhZGRyICsgKHNpemUgPj4gS0FTQU5fU0hBRE9XX1NDQUxFX1NISUZUKTsKPgo+ICAg ICAgICAgaWYgKFdBUk5fT04oKHVuc2lnbmVkIGxvbmcpc3RhcnQgJQo+IC0gICAgICAgICAgICAg ICAgICAgICAgIChLQVNBTl9TSEFET1dfU0NBTEVfU0laRSAqIFBBR0VfU0laRSkpIHx8Cj4gLSAg ICAgICAgICAgV0FSTl9PTihzaXplICUgKEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFICogUEFHRV9T SVpFKSkpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKEtBU0FOX0dSQU5VTEVfU0laRSAqIFBB R0VfU0laRSkpIHx8Cj4gKyAgICAgICAgICAgV0FSTl9PTihzaXplICUgKEtBU0FOX0dSQU5VTEVf U0laRSAqIFBBR0VfU0laRSkpKQo+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4KPiAgICAgICAg IGZvciAoOyBhZGRyIDwgZW5kOyBhZGRyID0gbmV4dCkgewo+IEBAIC00ODIsOCArNDgyLDggQEAg aW50IGthc2FuX2FkZF96ZXJvX3NoYWRvdyh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXpl KQo+ICAgICAgICAgc2hhZG93X2VuZCA9IHNoYWRvd19zdGFydCArIChzaXplID4+IEtBU0FOX1NI QURPV19TQ0FMRV9TSElGVCk7Cj4KPiAgICAgICAgIGlmIChXQVJOX09OKCh1bnNpZ25lZCBsb25n KXN0YXJ0ICUKPiAtICAgICAgICAgICAgICAgICAgICAgICAoS0FTQU5fU0hBRE9XX1NDQUxFX1NJ WkUgKiBQQUdFX1NJWkUpKSB8fAo+IC0gICAgICAgICAgIFdBUk5fT04oc2l6ZSAlIChLQVNBTl9T SEFET1dfU0NBTEVfU0laRSAqIFBBR0VfU0laRSkpKQo+ICsgICAgICAgICAgICAgICAgICAgICAg IChLQVNBTl9HUkFOVUxFX1NJWkUgKiBQQUdFX1NJWkUpKSB8fAo+ICsgICAgICAgICAgIFdBUk5f T04oc2l6ZSAlIChLQVNBTl9HUkFOVUxFX1NJWkUgKiBQQUdFX1NJWkUpKSkKPiAgICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4KPiAgICAgICAgIHJldCA9IGthc2FuX3BvcHVsYXRlX2Vh cmx5X3NoYWRvdyhzaGFkb3dfc3RhcnQsIHNoYWRvd19lbmQpOwo+IGRpZmYgLS1naXQgYS9tbS9r YXNhbi9rYXNhbi5oIGIvbW0va2FzYW4va2FzYW4uaAo+IGluZGV4IDAzNDUwZDNiMzFmNy4uYzMx ZTJjNzM5MzAxIDEwMDY0NAo+IC0tLSBhL21tL2thc2FuL2thc2FuLmgKPiArKysgYi9tbS9rYXNh bi9rYXNhbi5oCj4gQEAgLTUsOCArNSw4IEBACj4gICNpbmNsdWRlIDxsaW51eC9rYXNhbi5oPgo+ ICAjaW5jbHVkZSA8bGludXgvc3RhY2tkZXBvdC5oPgo+Cj4gLSNkZWZpbmUgS0FTQU5fU0hBRE9X X1NDQUxFX1NJWkUgKDFVTCA8PCBLQVNBTl9TSEFET1dfU0NBTEVfU0hJRlQpCj4gLSNkZWZpbmUg S0FTQU5fU0hBRE9XX01BU0sgICAgICAgKEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFIC0gMSkKPiAr I2RlZmluZSBLQVNBTl9HUkFOVUxFX1NJWkUgICAgICgxVUwgPDwgS0FTQU5fU0hBRE9XX1NDQUxF X1NISUZUKQo+ICsjZGVmaW5lIEtBU0FOX0dSQU5VTEVfTUFTSyAgICAgKEtBU0FOX0dSQU5VTEVf U0laRSAtIDEpCj4KPiAgI2RlZmluZSBLQVNBTl9UQUdfS0VSTkVMICAgICAgIDB4RkYgLyogbmF0 aXZlIGtlcm5lbCBwb2ludGVycyB0YWcgKi8KPiAgI2RlZmluZSBLQVNBTl9UQUdfSU5WQUxJRCAg ICAgIDB4RkUgLyogaW5hY2Nlc3NpYmxlIG1lbW9yeSB0YWcgKi8KPiBkaWZmIC0tZ2l0IGEvbW0v a2FzYW4vcmVwb3J0LmMgYi9tbS9rYXNhbi9yZXBvcnQuYwo+IGluZGV4IDRmNDlmYTZjZDFhYS4u N2MwMjVkNzkyZTJmIDEwMDY0NAo+IC0tLSBhL21tL2thc2FuL3JlcG9ydC5jCj4gKysrIGIvbW0v a2FzYW4vcmVwb3J0LmMKPiBAQCAtMzE3LDI0ICszMTcsMjQgQEAgc3RhdGljIGJvb2wgX19tdXN0 X2NoZWNrIGdldF9hZGRyZXNzX3N0YWNrX2ZyYW1lX2luZm8oY29uc3Qgdm9pZCAqYWRkciwKPiAg ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Cj4gICAgICAgICBhbGlnbmVkX2FkZHIgPSBy b3VuZF9kb3duKCh1bnNpZ25lZCBsb25nKWFkZHIsIHNpemVvZihsb25nKSk7Cj4gLSAgICAgICBt ZW1fcHRyID0gcm91bmRfZG93bihhbGlnbmVkX2FkZHIsIEtBU0FOX1NIQURPV19TQ0FMRV9TSVpF KTsKPiArICAgICAgIG1lbV9wdHIgPSByb3VuZF9kb3duKGFsaWduZWRfYWRkciwgS0FTQU5fR1JB TlVMRV9TSVpFKTsKPiAgICAgICAgIHNoYWRvd19wdHIgPSBrYXNhbl9tZW1fdG9fc2hhZG93KCh2 b2lkICopYWxpZ25lZF9hZGRyKTsKPiAgICAgICAgIHNoYWRvd19ib3R0b20gPSBrYXNhbl9tZW1f dG9fc2hhZG93KGVuZF9vZl9zdGFjayhjdXJyZW50KSk7Cj4KPiAgICAgICAgIHdoaWxlIChzaGFk b3dfcHRyID49IHNoYWRvd19ib3R0b20gJiYgKnNoYWRvd19wdHIgIT0gS0FTQU5fU1RBQ0tfTEVG VCkgewo+ICAgICAgICAgICAgICAgICBzaGFkb3dfcHRyLS07Cj4gLSAgICAgICAgICAgICAgIG1l bV9wdHIgLT0gS0FTQU5fU0hBRE9XX1NDQUxFX1NJWkU7Cj4gKyAgICAgICAgICAgICAgIG1lbV9w dHIgLT0gS0FTQU5fR1JBTlVMRV9TSVpFOwo+ICAgICAgICAgfQo+Cj4gICAgICAgICB3aGlsZSAo c2hhZG93X3B0ciA+PSBzaGFkb3dfYm90dG9tICYmICpzaGFkb3dfcHRyID09IEtBU0FOX1NUQUNL X0xFRlQpIHsKPiAgICAgICAgICAgICAgICAgc2hhZG93X3B0ci0tOwo+IC0gICAgICAgICAgICAg ICBtZW1fcHRyIC09IEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFOwo+ICsgICAgICAgICAgICAgICBt ZW1fcHRyIC09IEtBU0FOX0dSQU5VTEVfU0laRTsKPiAgICAgICAgIH0KPgo+ICAgICAgICAgaWYg KHNoYWRvd19wdHIgPCBzaGFkb3dfYm90dG9tKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4KPiAtICAgICAgIGZyYW1lID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikobWVtX3B0ciAr IEtBU0FOX1NIQURPV19TQ0FMRV9TSVpFKTsKPiArICAgICAgIGZyYW1lID0gKGNvbnN0IHVuc2ln bmVkIGxvbmcgKikobWVtX3B0ciArIEtBU0FOX0dSQU5VTEVfU0laRSk7Cj4gICAgICAgICBpZiAo ZnJhbWVbMF0gIT0gS0FTQU5fQ1VSUkVOVF9TVEFDS19GUkFNRV9NQUdJQykgewo+ICAgICAgICAg ICAgICAgICBwcl9lcnIoIktBU0FOIGludGVybmFsIGVycm9yOiBmcmFtZSBpbmZvIHZhbGlkYXRp b24gZmFpbGVkOyBpbnZhbGlkIG1hcmtlcjogJWx1XG4iLAo+ICAgICAgICAgICAgICAgICAgICAg ICAgZnJhbWVbMF0pOwo+IEBAIC01NzIsNiArNTcyLDYgQEAgdm9pZCBrYXNhbl9ub25fY2Fub25p Y2FsX2hvb2sodW5zaWduZWQgbG9uZyBhZGRyKQo+ICAgICAgICAgZWxzZQo+ICAgICAgICAgICAg ICAgICBidWdfdHlwZSA9ICJtYXliZSB3aWxkLW1lbW9yeS1hY2Nlc3MiOwo+ICAgICAgICAgcHJf YWxlcnQoIktBU0FOOiAlcyBpbiByYW5nZSBbMHglMDE2bHgtMHglMDE2bHhdXG4iLCBidWdfdHlw ZSwKPiAtICAgICAgICAgICAgICAgIG9yaWdfYWRkciwgb3JpZ19hZGRyICsgS0FTQU5fU0hBRE9X X01BU0spOwo+ICsgICAgICAgICAgICAgICAgb3JpZ19hZGRyLCBvcmlnX2FkZHIgKyBLQVNBTl9H UkFOVUxFX1NJWkUgLSAxKTsKPiAgfQo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvbW0va2FzYW4v dGFnc19yZXBvcnQuYyBiL21tL2thc2FuL3RhZ3NfcmVwb3J0LmMKPiBpbmRleCBiZWU0MzcxN2Q2 ZjAuLjZkZGI1NTY3NmE3YyAxMDA2NDQKPiAtLS0gYS9tbS9rYXNhbi90YWdzX3JlcG9ydC5jCj4g KysrIGIvbW0va2FzYW4vdGFnc19yZXBvcnQuYwo+IEBAIC04MSw3ICs4MSw3IEBAIHZvaWQgKmZp bmRfZmlyc3RfYmFkX2FkZHIodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCj4gICAgICAgICB2b2lk ICplbmQgPSBwICsgc2l6ZTsKPgo+ICAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgdGFnID09ICoo dTggKilrYXNhbl9tZW1fdG9fc2hhZG93KHApKQo+IC0gICAgICAgICAgICAgICBwICs9IEtBU0FO X1NIQURPV19TQ0FMRV9TSVpFOwo+ICsgICAgICAgICAgICAgICBwICs9IEtBU0FOX0dSQU5VTEVf U0laRTsKPiAgICAgICAgIHJldHVybiBwOwo+ICB9Cj4KPiAtLQo+IDIuMjguMC42MTguZ2Y0YmMx MjNjYjctZ29vZwo+CgoKLS0gCkFsZXhhbmRlciBQb3RhcGVua28KU29mdHdhcmUgRW5naW5lZXIK Ckdvb2dsZSBHZXJtYW55IEdtYkgKRXJpa2EtTWFubi1TdHJhw59lLCAzMwo4MDYzNiBNw7xuY2hl bgoKR2VzY2jDpGZ0c2bDvGhyZXI6IFBhdWwgTWFuaWNsZSwgSGFsaW1haCBEZUxhaW5lIFByYWRv ClJlZ2lzdGVyZ2VyaWNodCB1bmQgLW51bW1lcjogSGFtYnVyZywgSFJCIDg2ODkxClNpdHogZGVy IEdlc2VsbHNjaGFmdDogSGFtYnVyZwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=