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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1B60C282C5 for ; Sat, 1 Mar 2025 00:22:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 061216B0082; Fri, 28 Feb 2025 19:22:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0101C6B0083; Fri, 28 Feb 2025 19:22:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DCBE5280001; Fri, 28 Feb 2025 19:22:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id BD0A16B0082 for ; Fri, 28 Feb 2025 19:22:07 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 505E6B6B2E for ; Sat, 1 Mar 2025 00:22:07 +0000 (UTC) X-FDA: 83171079894.13.306A6F9 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by imf06.hostedemail.com (Postfix) with ESMTP id 4D2AE18000D for ; Sat, 1 Mar 2025 00:22:05 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=cxX+iR5k; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740788525; a=rsa-sha256; cv=none; b=TPUadsk3vuBs4NTblg3oNIER/cj0wfl3kOORj69ElFFRsH4PMGeMHS+cntx4l6Zc/KsAeS 2v9VPxI/Wfsp337Lx70i45FPXQHT+S5Q+M7pIHjEGJJL2mE9BhE6+F3Lv0Gc3a+qKyaSbV QYWHP/Ui6rv7cmg652D7rOw64orrlbE= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=cxX+iR5k; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740788525; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=17XNK1hQwkcmGrY7OjaJII0SHza23hpB66sdZO0tw4M=; b=q5zehYtlVcGwSStPlKtaoGZngP2i61QtZMDJG0iCZU9jnhz1Usl1M0YetRsX0lT4sNVBhV epZEMm77DsbIfWqN/XDk1QYTTscGVHz29ZVp+ME7EymHYgyGFcWCtR9KZ9usgfgAi1LBEU smf3vrlorvky+t70ibX1xpaWOdXwtn4= Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-390dd3403fdso2314496f8f.0 for ; Fri, 28 Feb 2025 16:22:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740788524; x=1741393324; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=17XNK1hQwkcmGrY7OjaJII0SHza23hpB66sdZO0tw4M=; b=cxX+iR5kMxPwcRWVNhuqknMo+QNikwozfvVGnvDUbJ53VPpz0Zccdng6qdUb8i2wVz UMg+x5Dp5dRff1PAvUP9gSwiCvcZ2e9sTEjyCozMW6jBYHpzSHz6SnVCHtM/KJN3kziT Mhs60Z+oTdBl69KIDWEcrp/yk0/ZnTY28GRO1ddZUrbTH1pOrvXtSgaRbUI/qxQ0Wb6Y /34KRmzsS2ZpKgUBQPwqde1RmZVmHPIsVk5kxCBjl36mfY3pyR/ojUlU99azfKhCYZ5b p2LkPBj6oS/dP6VcyCJz84dtoegtURnl4hb7YgCLa6kmc8HEz1YmPT4Segfqcn96Nlpz Mw9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740788524; x=1741393324; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=17XNK1hQwkcmGrY7OjaJII0SHza23hpB66sdZO0tw4M=; b=dl4UeQGj24PEx03iL11FXkImVb2/foQl+l5cei8bfSVTuIExpjneXf5uH0GjdNQQN6 xEOhIckA1/5u2ix4EOoqsAY56KjVRAj6DKG3V0uSH0iO0IDPpEzsIv74KyrL4VzGMgYJ c4w4ii4XOEz4A1/wvuFGlsUhfmB81hIfHlskPydTIwvr52icbtFSgY1ghFMRbz3/+SgE zM5slUzxBQ/9VMYw634iaL1gJpUSRp2LVczgcuqyFa4XWuRKlCbEffgvAsy/bhqEGMm8 rUCRUWo7fvhy8UFK5WHo92ICoMFPcs18U7AhiM3wTVHj0gvYCtqHCecySC+qRoh8TzxI C6vg== X-Forwarded-Encrypted: i=1; AJvYcCV8+Iqej+Ju481d5BUoD+OebkXjDMBh12lsrg7OEAlkK9hW5hXrtfKO3ruH7hYc8JHjEk92zXzDXw==@kvack.org X-Gm-Message-State: AOJu0Yz80u9+4SN4cbAcWv1g6kpc5CsOHpA1xA/1T60b99ouu0YMF/97 bpmczurUhk2vC4ajSMLUVlLHP+wj5CZGR1gWt/0CjeQB4Q1fcgncrLC2vOhZRVFht01WBHZRpYT hiCCfKm7m8RHGTEiBfYY7vYsEbmA= X-Gm-Gg: ASbGncup4qlmfSjsbQH/zGhXkTMAMx1tsOPsRQD1BB7Wb2iTdHYd5xU0E9oUxZhoMG4 NDswx2AiD917Twq84ToXc46DfMJmue8lD9u0UMM2nDSfp7eEyiHlp4md5P6FxNQYwozwzMugfu6 tNN28DRpZiJwThxqHQXCxv4mSa0xjL X-Google-Smtp-Source: AGHT+IFOnLZU+7AsXdT1fH8V+V/ZM0jdpOVpC0yjysXv6NywZMSeHr/25idU/t84Fmf1uu7X+n2FH1vjxT1JyqNqBv8= X-Received: by 2002:a5d:6da3:0:b0:390:eb32:3fee with SMTP id ffacd0b85a97d-390eca80548mr4682267f8f.49.1740788523425; Fri, 28 Feb 2025 16:22:03 -0800 (PST) MIME-Version: 1.0 References: <6wdzi5lszeaycdfjjowrbsnniks35zhatavknktskslwop5fne@uv5wzotu4ri4> In-Reply-To: From: Andrey Konovalov Date: Sat, 1 Mar 2025 01:21:52 +0100 X-Gm-Features: AQ5f1Job2uTJiDaFRVhtBwap-aEMFc-I22BIiCb20obah84ENVZn9xQZFsNgYZY Message-ID: Subject: Re: [PATCH v2 01/14] kasan: sw_tags: Use arithmetic shift for shadow computation To: Maciej Wieczor-Retman Cc: Vitaly Buka , kees@kernel.org, julian.stecklina@cyberus-technology.de, kevinloughlin@google.com, peterz@infradead.org, tglx@linutronix.de, justinstitt@google.com, catalin.marinas@arm.com, wangkefeng.wang@huawei.com, bhe@redhat.com, ryabinin.a.a@gmail.com, kirill.shutemov@linux.intel.com, will@kernel.org, ardb@kernel.org, jason.andryuk@amd.com, dave.hansen@linux.intel.com, pasha.tatashin@soleen.com, guoweikang.kernel@gmail.com, dwmw@amazon.co.uk, mark.rutland@arm.com, broonie@kernel.org, apopple@nvidia.com, bp@alien8.de, rppt@kernel.org, kaleshsingh@google.com, richard.weiyang@gmail.com, luto@kernel.org, glider@google.com, pankaj.gupta@amd.com, pawan.kumar.gupta@linux.intel.com, kuan-ying.lee@canonical.com, tony.luck@intel.com, tj@kernel.org, jgross@suse.com, dvyukov@google.com, baohua@kernel.org, samuel.holland@sifive.com, dennis@kernel.org, akpm@linux-foundation.org, thomas.weissschuh@linutronix.de, surenb@google.com, kbingham@kernel.org, ankita@nvidia.com, nathan@kernel.org, ziy@nvidia.com, xin@zytor.com, rafael.j.wysocki@intel.com, andriy.shevchenko@linux.intel.com, cl@linux.com, jhubbard@nvidia.com, hpa@zytor.com, scott@os.amperecomputing.com, david@redhat.com, jan.kiszka@siemens.com, vincenzo.frascino@arm.com, corbet@lwn.net, maz@kernel.org, mingo@redhat.com, arnd@arndb.de, ytcoode@gmail.com, xur@google.com, morbo@google.com, thiago.bauermann@linaro.org, linux-doc@vger.kernel.org, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, x86@kernel.org Content-Type: multipart/mixed; boundary="0000000000009180c7062f3ce9f2" X-Rspamd-Queue-Id: 4D2AE18000D X-Stat-Signature: dni7zhqu6cru7x6utdzphxmse7xnfntq X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1740788525-6709 X-HE-Meta: U2FsdGVkX1/ZQOgBGIrBzzWQKADgri6LZWiQyCw5+eKMoH+UZY8aEGp8+uhX9RYnqUG9PsCRZYaIgavPI6wbXRqrUSTT+093CCSVtKFvKC/3EujcaNu+aZ18ToRHOC26w5DDN2XQcEI38B2t+QB3ooeS9LUQEY6466AtCQma42IBugo7iEDxqUi+RprJezNt/oFYMS8wHslUZVv9gwAPLC+5nad/dUle+wEl/BDdSzzhMCagpnMKUvyiT/MQ7afbbHD3sd3MbWRyM+VHaNbPRIoXEOUdbDkaSxe6If21qI/kvxvgSfyDS8wWq2IbrV0Pqi/q+KiX9e5NshCuEZC70n7M+H4Jep3n8nvGnYvkntIp7fN3WV/gj8WPngbP61C6xICrl+Zc0ogzEELV1M7UZv/AGPP5fmAe668N9zqxssfvm3GqZsGBd0d6w+XVM6ZmQVy7n9O7JcAqw4ep7bMAXnbVo1TloxiwH/m8NksDO6F4QIyfZDDVQQweRTWSYgLzXmwQ5GRjE19tL/I87PgjxS03uoH1bF59JROfAP8NpcXcXT/19NTsZnztxve1UOmEU/UP37RQLIfKKgytzs5M6rqhkPEAg5S5vTtp+urF860NiOx2fN+hKlT0Hb48amhY5fFMLxT0fJeGJBHlOPf5bGG+Cw6IZk08E3QI1nLDLImrb/fuIR0pIf3Ie0ppK1xGr1iuTOobFt38xeAy7fWwLBpmpZ9VjxaPJl6NhFs2qJ7cWkUFmct1e7GFEc9r7q6Q2rtuzXUsOEjOAqWi7DXWNiVRD3ohHquNb4+q2kMdh4vnADcWdPhR+EUZYg+pre6kmrKnT+NVp7a53317akBDmleO7EDhWjPwDhzsA2pviHZrewNZODaC0b+rMK9wrGxKEQ705CfQZmOMneOB8yRUBa2S1sqyFz0qza1NWUSUG0oP5/XdzhhAAjJ6echVKt1EHExuShuyIe6dF9eXjDH h6j7Cp0W e/oC2KAHx6ztNYmV5uZROsZHF6wMC02cScXc6Qp7DIxHfE/Hod2DRps4neYoXaTAAdVAraFUbnAS7Nv6U+CUELQ2bXT7BHQrLbJtAs7FtgTCwkt36bcY0pqu0cQNrZewyOyzEDRPRMiOYx2GX0RIgW6yqNWtR2keTxDfPAC4B0Ze9WzYh1/3OXt/eY/tHdo869FNf+OhmWhih/3rQejQ+zc2Kt/Q16caChA6vPd5CzUU7HmNVqy5MA1yADuzlfWdk0HU1JoCSvcK/ZAln1XbvRHxe1e5IiZ5Etc7weNobs6yHo6EEFv5dFKNUktHklEH5/ia8Hb5ygBWZEVrgaw0CHfnDBAOLmZ+C/biF4p0DRZ5mEmc3h8izc/T0x9fV4hnE+RtAbfAx/+FgpQ9xuFIW54yuUV0R3r2uHShOLhY28FFmwft+fF9ao4tND3cUIlg5FNES9NMA3zj0o826nmlrL999VAQ+pJqNmRWL9COCdXy3UDSSqcjFsGRt2azYQIvp8CFv9q7FEKGx5pSvYXlFNeF+9eIFxCxa/RxAuv4SUAhkq0z1uC2dSy+IENjdIkrxw3x0Gd7HQJ0Rb3JaZwQHzP/Ig6jxp2WR/cbOPsDv2Z1eXHQ7LuhQPhVptsrqp7i7ZOJt+n7QV4Dta1fK7HDLGWScIXxbk8grNX5cbLW6AFaJDz7tj6d91MPD3w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000292, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: --0000000000009180c7062f3ce9f2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 28, 2025 at 5:13=E2=80=AFPM Maciej Wieczor-Retman wrote: > > I was applying your other comments to the series and came up with somethi= ng like > this. What do you think? > > /* > * With the default kasan_mem_to_shadow() algorithm, all addresse= s > * returned by the memory-to-shadow mapping (even for bogus point= ers) > * must be within a certain displacement from KASAN_SHADOW_OFFSET= . > * > * For Generic KASAN the displacement is unsigned so the mapping = from zero > * to the last kernel address needs checking. > */ > if (IS_ENABLED(CONFIG_KASAN_GENERIC)) { > if (addr < KASAN_SHADOW_OFFSET || > addr >=3D KASAN_SHADOW_OFFSET + max_shadow_size) > return; > } else { > /* > * For the tag-based mode the compiler resets tags in add= resses at > * the start of kasan_mem_to_shadow(). Because of this it= 's not > * necessary to check a mapping of the entire address spa= ce but only > * whether a range of [0xFF00000000000000 - 0xFFFFFFFFFFF= FFFFF] is a > * valid memory-to-shadow mapping. On x86, tags are locat= ed in bits > * 62:57 so the range becomes [0x7E00000000000000 - 0xFFF= FFFFFFFFFFFFF]. > * The check below tries to exclude invalid addresses by > * checking spaces between [0x7E00000000000000 - 0x7FFFFF= FFFFFFFFFF] > * (which are positive and will overflow the memory-to-sh= adow > * mapping) and [0xFE00000000000000 - 0xFFFFFFFFFFFFFFFF] > */ > if (addr > KASAN_SHADOW_OFFSET || > (addr < (u64)kasan_mem_to_shadow((void *)(0xFEUL << = 56)) && > addr > (u64)kasan_mem_to_shadow((void *)(~0UL >> 1))= ) || > addr < (u64)kasan_mem_to_shadow((void *)(0x7EUL << 5= 6))) > return; > } > > The comment is a bit long and has a lot of hexes but maybe it's good to l= eave a > longer explanation so no one has to dig through the mailing archives to > understand the logic :b Explaining the logic sounds good to me! I think your patch is close to what would look good, but I think the parentheses in the long if condition look suspicious. Please check the attached diff (Gmail makes it hard to inline code): I fixed the parentheses (if I'm right about them being wrong), made the checks look uniform, added an arm-specific check, and reworked the comments (please check if they make sense). If the diff looks good to you, let's use that. It also would be great, if you could test this: add some code that dereferences various bad addresses and see if the extra KASAN message line gets printed during the GPF. --0000000000009180c7062f3ce9f2 Content-Type: text/x-patch; charset="US-ASCII"; name="kasan_non_canonical_hook.patch" Content-Disposition: attachment; filename="kasan_non_canonical_hook.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7pg3pxi0 ZGlmZiAtLWdpdCBhL21tL2thc2FuL3JlcG9ydC5jIGIvbW0va2FzYW4vcmVwb3J0LmMKaW5kZXgg ODM1N2UxYTMzNjk5Li43ZWRkZTFhMjZhNDEgMTAwNjQ0Ci0tLSBhL21tL2thc2FuL3JlcG9ydC5j CisrKyBiL21tL2thc2FuL3JlcG9ydC5jCkBAIC02ODEsMTEgKzY4MSw1NiBAQCB2b2lkIGthc2Fu X25vbl9jYW5vbmljYWxfaG9vayh1bnNpZ25lZCBsb25nIGFkZHIpCiAJY29uc3QgY2hhciAqYnVn X3R5cGU7CiAKIAkvKgotCSAqIEFsbCBhZGRyZXNzZXMgdGhhdCBjYW1lIGFzIGEgcmVzdWx0IG9m IHRoZSBtZW1vcnktdG8tc2hhZG93IG1hcHBpbmcKLQkgKiAoZXZlbiBmb3IgYm9ndXMgcG9pbnRl cnMpIG11c3QgYmUgPj0gS0FTQU5fU0hBRE9XX09GRlNFVC4KKwkgKiBGb3IgR2VuZXJpYyBLQVNB Tiwga2FzYW5fbWVtX3RvX3NoYWRvdygpIHVzZXMgdGhlIGxvZ2ljYWwgcmlnaHQgc2hpZnQKKwkg KiBhbmQgbmV2ZXIgb3ZlcmZsb3dzIHdpdGggdGhlIGNob3NlbiBLQVNBTl9TSEFET1dfT0ZGU0VU IHZhbHVlcyAob24KKwkgKiBib3RoIHg4NiBhbmQgYXJtNjQpLiBUaHVzLCB0aGUgcG9zc2libGUg c2hhZG93IGFkZHJlc3NlcyAoZXZlbiBmb3IKKwkgKiBib2d1cyBwb2ludGVycykgYmVsb25nIHRv IGEgc2luZ2xlIGNvbnRpZ3VvdXMgcmVnaW9uIHRoYXQgaXMgdGhlCisJICogcmVzdWx0IG9mIGth c2FuX21lbV90b19zaGFkb3coKSBhcHBsaWVkIHRvIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlLgog CSAqLwotCWlmIChhZGRyIDwgS0FTQU5fU0hBRE9XX09GRlNFVCkKLQkJcmV0dXJuOworCWlmIChJ U19FTkFCTEVEKENPTkZJR19LQVNBTl9HRU5FUklDKSkgeworCQlpZiAoYWRkciA8ICh1NjQpa2Fz YW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKSgwVUwpKSB8fAorCQkgICAgYWRkciA+ICh1NjQpa2Fz YW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKSh+MFVMKSkpCisJCQlyZXR1cm47CisJfQorCisJLyoK KwkgKiBGb3IgU29mdHdhcmUgVGFnLUJhc2VkIEtBU0FOLCBrYXNhbl9tZW1fdG9fc2hhZG93KCkg dXNlcyB0aGUKKwkgKiBhcml0aG1ldGljIHNoaWZ0LiBOb3JtYWxseSwgdGhpcyB3b3VsZCBtYWtl IGNoZWNraW5nIGZvciBhIHBvc3NpYmxlCisJICogc2hhZG93IGFkZHJlc3MgY29tcGxpY2F0ZWQs IGFzIHRoZSBzaGFkb3cgYWRkcmVzcyBjb21wdXRhdGlvbgorCSAqIG9wZXJhdGlvbiB3b3VsZCBv dmVyZmxvdyBvbmx5IGZvciBzb21lIG1lbW9yeSBhZGRyZXNzZXMuIEhvd2V2ZXIsIGR1ZQorCSAq IHRvIHRoZSBjaG9zZW4gS0FTQU5fU0hBRE9XX09GRlNFVCB2YWx1ZXMgYW5kIHRoZSBmYWN0IHRo ZQorCSAqIGthc2FuX21lbV90b19zaGFkb3coKSBvbmx5IG9wZXJhdGVzIG9uIHBvaW50ZXJzIHdp dGggdGhlIHRhZyByZXNldCwKKwkgKiB0aGUgb3ZlcmZsb3cgYWx3YXlzIGhhcHBlbnMgKGZvciBi b3RoIHg4NiBhbmQgYXJtNjQpLgorCSAqCisJICogRm9yIGFybTY0LCB0aGUgdG9wIGJ5dGUgb2Yg dGhlIHBvaW50ZXIgZ2V0cyByZXNldCB0byAweEZGLiBUaHVzLCB0aGUKKwkgKiBwb3NzaWJsZSBz aGFkb3cgYWRkcmVzc2VzIGJlbG9uZyB0byBhIHJlZ2lvbiB0aGF0IGlzIHRoZSByZXN1bHQgb2YK KwkgKiBrYXNhbl9tZW1fdG9fc2hhZG93KCkgYXBwbGllZCB0byB0aGUgbWVtb3J5IHJhbmdlCisJ ICogWzB4RkYwMDAwMDAwMDAwMDAsIDB4RkZGRkZGRkZGRkZGRkZGRl0uIERlc3BpdGUgdGhlIG92 ZXJmbG93LCB0aGUKKwkgKiByZXN1bHRpbmcgcG9zc2libGUgc2hhZG93IHJlZ2lvbiBpcyBjb250 aWd1b3VzLCBhcyB0aGUgb3ZlcmZsb3cKKwkgKiBoYXBwZW5zIGZvciBib3RoIDB4RkYwMDAwMDAw MDAwMDAgYW5kIDB4RkZGRkZGRkZGRkZGRkZGRi4KKwkgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05G SUdfS0FTQU5fU1dfVEFHUykgJiYgSVNfRU5BQkxFRChDT05GSUdfQVJNNjQpKSB7CisJCWlmIChh ZGRyIDwgKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopKDB4RkZVTCA8PCA1NikpIHx8 CisJCSAgICBhZGRyID4gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopKH4wVUwpKSkK KwkJCXJldHVybjsKKwl9CisKKwkgLyoKKwkgICogRm9yIHg4Ni02NCwgb25seSB0aGUgcG9pbnRl ciBiaXRzIFs2Mjo1N10gZ2V0IHJlc2V0LCBhbmQgYml0cyAjNjMKKwkgICogYW5kICM1NiBjYW4g YmUgMCBvciAxLiBUaHVzLCBrYXNhbl9tZW1fdG9fc2hhZG93KCkgY2FuIGJlIHBvc3NpYmx5CisJ ICAqIGFwcGxpZWQgdG8gdHdvIHJlZ2lvbnMgb2YgbWVtb3J5OgorCSAgKiBbMHg3RTAwMDAwMDAw MDAwMDAwLCAweDdGRkZGRkZGRkZGRkZGRkZdIGFuZAorCSAgKiBbMHhGRTAwMDAwMDAwMDAwMDAw LCAweEZGRkZGRkZGRkZGRkZGRkZdLiBBcyB0aGUgb3ZlcmZsb3cgaGFwcGVucworCSAgKiBmb3Ig Ym90aCBlbmRzIG9mIGJvdGggbWVtb3J5IHJhbmdlcywgYm90aCBwb3NzaWJsZSBzaGFkb3cgcmVn aW9ucworCSAgKiBhcmUgY29udGlndW91cy4KKwkgKi8KKwlpZiAoSVNfRU5BQkxFRChDT05GSUdf S0FTQU5fU1dfVEFHUykgJiYgSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSkgeworCQlpZiAoKGFk ZHIgPCAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKikoMHg3RVVMIDw8IDU2KSkgfHwK KwkJICAgICBhZGRyID4gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopKH4wVUwgPj4g MSkpKSAmJgorCQkgICAgKGFkZHIgPCAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKiko MHhGRVVMIDw8IDU2KSkgfHwKKwkJICAgICBhZGRyID4gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93 KCh2b2lkICopKH4wVUwpKSkpCisJCQlyZXR1cm47CisJfQogCiAJb3JpZ19hZGRyID0gKHVuc2ln bmVkIGxvbmcpa2FzYW5fc2hhZG93X3RvX21lbSgodm9pZCAqKWFkZHIpOwogCg== --0000000000009180c7062f3ce9f2--