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 78F8EC63703 for ; Wed, 7 Dec 2022 15:32:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F2E688E0005; Wed, 7 Dec 2022 10:32:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EDE3C8E0001; Wed, 7 Dec 2022 10:32:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7E9E8E0005; Wed, 7 Dec 2022 10:32:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id C6B618E0001 for ; Wed, 7 Dec 2022 10:32:24 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7C875120E6D for ; Wed, 7 Dec 2022 15:32:24 +0000 (UTC) X-FDA: 80215901808.08.6A2009A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf10.hostedemail.com (Postfix) with ESMTP id 1B6A8C0016 for ; Wed, 7 Dec 2022 15:32:22 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=flH161qT; spf=pass (imf10.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670427143; 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=e8ryV25b0m4bce95ce9vfJ2IOhLFPyLKVGSqrAIw7Vk=; b=o45PYWevQ5Kn1GBznJfnE+4fYMgGZhCLI684xjFxdiKpmKomXJZvmrx+ZOY0KWaWS5S8RX y50p+cfj+zGJI9sd6KV1BscGxUR8NqtQSp6oT2PuMIGWsU7iCUUmb0ZOAzH4UIqSEC5nW/ Re2ZY7aJcRo2Q45w/oVVLjDQ+GBOEQc= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=flH161qT; spf=pass (imf10.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670427143; a=rsa-sha256; cv=none; b=ffQWqdEv08c03LpaiVa0rqLhAnByVzSMPlmNpmkPDhPpdjO5w5okKUjhZ3f6KR5ie42mew lAh+o7ykkXC0LiOoGcKCoNMym8xfEjt1KB+lcH+cWqaWPBEBUe1fY93HZJlkiDEaqgu7pj WHb3UKtbUzbDog0i1ZFcyWrFj7uVTaM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1670427142; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=e8ryV25b0m4bce95ce9vfJ2IOhLFPyLKVGSqrAIw7Vk=; b=flH161qTUo6TQzDj0RceY20BGnUCvKJZGGhkoDlxkw73HbxxB8tb2rOHfo61vpbVXojO6r fWFwtmdy6K/iH9YblXBoknpcPk699lZhM+DQaE2m4TjoXaMR/U5AUIDnFGuNRVgdqCyGE9 +KlCpNk6tcjg57yt+LOqoEDVFmyN0Rc= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-191-vTwhIVskOMGo-9fzR1xaOQ-1; Wed, 07 Dec 2022 10:32:20 -0500 X-MC-Unique: vTwhIVskOMGo-9fzR1xaOQ-1 Received: by mail-wm1-f69.google.com with SMTP id f1-20020a1cc901000000b003cf703a4f08so735436wmb.2 for ; Wed, 07 Dec 2022 07:32:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:subject:organization:from:references:cc:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2nI23qKURDk6eVp9CxCt+uXO/ZCpFRupAOr1zW0mjEQ=; b=1zH5kxN9La5ktjL+6xqk2ZZyg6DyCn5ZuaXA3+uF0/2QPmYJ1H+C0wlbq41BrksAyU pRiLzO3GugZtKkivwiUX3q2B5mWhrxr92aEE68hx82i9nX8HVulxnUxh0PcxCM1C1Y9m kbLXbPsFvLwPS2siMYA1Co+z3F/W3lZJT9OUVl9elCrbXXUJIcmNulNAU3FSEtqXDNTa CKlbNGLWb02JxEYO/B50R8yHUk3gQ8WDsUQZk4U+m/vCYV5PFpEf6AuZtotlQOd2kssW lmQ/rna8jJX6unOa5HmCzm1ZPL4S73Tuv7Rdma0xw4KhfXQ+Br5JmAj6tZwdPGm/4K77 ZFYg== X-Gm-Message-State: ANoB5plECp2ihoiwLtzTkZEt3iEH5CawBWn9xByIV1H+Gn+c9X1mV855 gk7LBV/ZI0X1yU/5iEhFOuk9BGLtON2Hfu/Bj9RoYOY2t1FxAVchQQvs7Al37sv1AIN9Wc34oGi SYo/K/O41MB4= X-Received: by 2002:a1c:7401:0:b0:3cf:934b:b7ad with SMTP id p1-20020a1c7401000000b003cf934bb7admr53987909wmc.22.1670427139424; Wed, 07 Dec 2022 07:32:19 -0800 (PST) X-Google-Smtp-Source: AA0mqf7O35hsuo8dbjtox4fvfog9RkwM8WRapY5ELWbC2kzgYi/8JBrDdoJ/iLrtdUl92Q2i4Ny42g== X-Received: by 2002:a1c:7401:0:b0:3cf:934b:b7ad with SMTP id p1-20020a1c7401000000b003cf934bb7admr53987890wmc.22.1670427139005; Wed, 07 Dec 2022 07:32:19 -0800 (PST) Received: from ?IPV6:2003:cb:c702:2500:fe2d:7534:ffa4:c1e5? (p200300cbc7022500fe2d7534ffa4c1e5.dip0.t-ipconnect.de. [2003:cb:c702:2500:fe2d:7534:ffa4:c1e5]) by smtp.gmail.com with ESMTPSA id i2-20020adff302000000b002421a8f4fa6sm19595033wro.92.2022.12.07.07.32.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Dec 2022 07:32:18 -0800 (PST) Message-ID: Date: Wed, 7 Dec 2022 16:32:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 To: Peter Xu , Hugh Dickins Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Ives van Hoorne , Andrew Morton , Hugh Dickins , Alistair Popple , Mike Rapoport , Nadav Amit , Andrea Arcangeli References: <20221202122748.113774-1-david@redhat.com> <690afe0f-c9a0-9631-b365-d11d98fdf56f@redhat.com> <19800718-9cb6-9355-da1c-c7961b01e922@redhat.com> <92173bad-caa3-6b43-9d1e-9a471fdbc184@redhat.com> <22d8e8ac-d75-a66-2650-b4d59f89855e@google.com> From: David Hildenbrand Organization: Red Hat Subject: Re: [PATCH RFC] mm/userfaultfd: enable writenotify while userfaultfd-wp is enabled for a VMA In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------goKdyuB03uIJj0avVFOrEX4v" Content-Language: en-US X-Spamd-Result: default: False [1.30 / 9.00]; BAYES_HAM(-6.00)[100.00%]; SORBS_IRL_BL(3.00)[209.85.128.69:received]; MIME_BAD_ATTACHMENT(1.60)[c:text/x-csrc]; SUSPICIOUS_RECIPS(1.50)[]; MIME_BASE64_TEXT_BOGUS(1.00)[]; MIME_BASE64_TEXT(0.10)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-csrc]; BAD_REP_POLICIES(0.10)[]; RCVD_NO_TLS_LAST(0.10)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(0.00)[redhat.com:s=mimecast20190719]; TAGGED_RCPT(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[linux-mm@kvack.org]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DMARC_POLICY_ALLOW(0.00)[redhat.com,none]; HAS_ATTACHMENT(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:170.10.129.0/24]; TO_DN_SOME(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:+]; ARC_SIGNED(0.00)[hostedemail.com:s=arc-20220608:i=1]; RCVD_COUNT_THREE(0.00)[4]; HAS_ORG_HEADER(0.00)[]; RCPT_COUNT_SEVEN(0.00)[11]; DKIM_TRACE(0.00)[redhat.com:+]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 1B6A8C0016 X-Stat-Signature: 7og9hpznt3w1xmeg3zx8qah9hypda1ng X-HE-Tag: 1670427142-732726 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: This is a multi-part message in MIME format. --------------goKdyuB03uIJj0avVFOrEX4v Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > > David, would you please repost a new patch for this one and copy Ives to > make sure it'll work for him in his systems? Yes, will do. I think has was already cc'ed. > > I'd suggest to drop the mprotect example, I'll reply later on that to the > other email but I still don't know whether it's a good example for a reader > to understand the problem. Yes, can do. > > No reproducer needed for numa I think - I guess Ives's test case would be > far enough to verify it if possible. I also hope what Ives saw was the > numa balancing issue you reported, so maybe it'll resolve all problem he > has. Then with that verified and queued we can drop the mm/migrate patch. I tried writing a numa hinting reproducer, but so far I assume that it's with current code not (easily) possible for shmem. We'd have to call change_prot_numa() in order to protnone these PTEs. That can either happen via a) mbind() with MPOL_MF_LAZY. However, user space is currently not able to set that flag (dead code ...). b) task_numa_work(). However, vma_policy_mof() seems to always fail on shmem and prevent us from reaching that code. Reason is that shmem implements vm_ops->get_policy, and it seems to be impossible to get MPOL_F_MOF set. At least I haven't found an easy way or I am missing something. So numa hinting might not immediately explain the lost write faults. ... but are there other ways to reach do_numa_page(), even without active NUMA hinting? I found at least one: map = mmap(NULL, size, PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); memset(map, 0, size); uffd_wp_range(map, size); On upstream during the next write fault, we'll end up in do_numa_page() and simply remap the page writable due to vm_page_prot, not triggering a write fault. I can see the "numa_hint_faults" counter in /proc/vmstat increasing accordingly, so we're really in do_numa_page(). PROT_WRITE on shmem with uffd-wp is completely non-functional as it seems. It seems to work with anon memory. And with my patch, it also works with shmem. Attaching a simple reproducer (uffd-wp-prot-write.c). Independent of uffd-wp on shmem, we seem to be missing propagating the uffd-wp bit when splitting the huge zeropage. So uffd-wp'ing the huge zeropage and then splitting it loses the uffd-wp markers. :/ Fix seems easy and I just tested my possible fix. Attaching a simple reproducer (uffd-wp-huge-zero.c). -- Thanks, David / dhildenb --------------goKdyuB03uIJj0avVFOrEX4v Content-Type: text/x-csrc; charset=UTF-8; name="uffd-wp-prot-write.c" Content-Disposition: attachment; filename="uffd-wp-prot-write.c" Content-Transfer-Encoding: base64 I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5o PgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0 eXBlcy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8 dW5pc3RkLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8cG9sbC5oPgojaW5jbHVkZSA8 cHRocmVhZC5oPgojaW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+ CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KI2luY2x1ZGUgPGxpbnV4L21lbWZkLmg+CiNpbmNsdWRl IDxsaW51eC91c2VyZmF1bHRmZC5oPgoKc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKc3RhdGljIGlu dCB1ZmZkOwpzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CgojZGVmaW5lIFNJWkUgKDEwMjQqMTAyNCox MDI0dWxsKQojZGVmaW5lIGJhcnJpZXIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1l bW9yeSIpCgp2b2xhdGlsZSBib29sIHVmZmRfdHJpZ2dlcmVkOwoKc3RhdGljIHZvaWQgdWZmZF93 cF9yYW5nZShjaGFyICpzdGFydCwgc2l6ZV90IHNpemUsIGJvb2wgd3ApCnsKCXN0cnVjdCB1ZmZk aW9fd3JpdGVwcm90ZWN0IHVmZmRfd3JpdGVwcm90ZWN0OwoKCXVmZmRfd3JpdGVwcm90ZWN0LnJh bmdlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIHN0YXJ0OwoJdWZmZF93cml0ZXByb3RlY3QucmFu Z2UubGVuID0gc2l6ZTsKCWlmICh3cCkgewoJCXVmZmRfd3JpdGVwcm90ZWN0Lm1vZGUgPSBVRkZE SU9fV1JJVEVQUk9URUNUX01PREVfV1A7Cgl9IGVsc2UgewoJCXVmZmRfd3JpdGVwcm90ZWN0Lm1v ZGUgPSAwOwoJfQoJaWYgKGlvY3RsKHVmZmQsIFVGRkRJT19XUklURVBST1RFQ1QsICZ1ZmZkX3dy aXRlcHJvdGVjdCkpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIlVGRkRJT19XUklURVBST1RFQ1QgZmFp bGVkOiAlZFxuIiwgZXJybm8pOwoJCWV4aXQoMSk7Cgl9Cn0KCnN0YXRpYyB2b2lkICp1ZmZkX3Ro cmVhZF9mbih2b2lkICphcmcpCnsKCXN0YXRpYyBzdHJ1Y3QgdWZmZF9tc2cgbXNnOwoJc3NpemVf dCBucmVhZDsKCgl3aGlsZSAoMSkgewoJCXN0cnVjdCBwb2xsZmQgcG9sbGZkOwoJCWludCBucmVh ZHk7CgoJCXBvbGxmZC5mZCA9IHVmZmQ7CgkJcG9sbGZkLmV2ZW50cyA9IFBPTExJTjsKCQlucmVh ZHkgPSBwb2xsKCZwb2xsZmQsIDEsIC0xKTsKCQlpZiAobnJlYWR5ID09IC0xKSB7CgkJCWZwcmlu dGYoc3RkZXJyLCAicG9sbCgpIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKCQkJZXhpdCgxKTsKCQl9 CgoJCW5yZWFkID0gcmVhZCh1ZmZkLCAmbXNnLCBzaXplb2YobXNnKSk7CgkJaWYgKG5yZWFkIDw9 IDApCgkJCWNvbnRpbnVlOwoKCQlpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxU IHx8CgkJICAgICEobXNnLmFyZy5wYWdlZmF1bHQuZmxhZ3MgJiBVRkZEX1BBR0VGQVVMVF9GTEFH X1dQKSkgewoJCQlwcmludGYoIkZBSUw6IHdyb25nIHVmZmQtd3AgZXZlbnQgZmlyZWRcbiIpOwoJ CQlleGl0KDEpOwoJCX0KCgkJLyogdW4tcHJvdGVjdCAqLwoJCXVmZmRfdHJpZ2dlcmVkID0gdHJ1 ZTsKCQl1ZmZkX3dwX3JhbmdlKChjaGFyICopKHVpbnRwdHJfdCltc2cuYXJnLnBhZ2VmYXVsdC5h ZGRyZXNzLCBwYWdlc2l6ZSwgZmFsc2UpOwoJfQoJcmV0dXJuIGFyZzsKfQoKc3RhdGljIGludCBz ZXR1cF91ZmZkKGNoYXIgKm1hcCwgc2l6ZV90IHNpemUpCnsKCXN0cnVjdCB1ZmZkaW9fYXBpIHVm ZmRpb19hcGk7CglzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHVmZmRpb19yZWdpc3RlcjsKCXB0aHJl YWRfdCB0aHJlYWQ7CgoJdWZmZCA9IHN5c2NhbGwoX19OUl91c2VyZmF1bHRmZCwKCQkgICAgICAg T19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpOwoJaWYgKHVmZmQg PCAwKSB7CgkJZnByaW50ZihzdGRlcnIsICJzeXNjYWxsKCkgZmFpbGVkOiAlZFxuIiwgZXJybm8p OwoJCXJldHVybiAtZXJybm87Cgl9CgoJdWZmZGlvX2FwaS5hcGkgPSBVRkZEX0FQSTsKCXVmZmRp b19hcGkuZmVhdHVyZXMgPSBVRkZEX0ZFQVRVUkVfUEFHRUZBVUxUX0ZMQUdfV1A7CglpZiAoaW9j dGwodWZmZCwgVUZGRElPX0FQSSwgJnVmZmRpb19hcGkpIDwgMCkgewoJCWZwcmludGYoc3RkZXJy LCAiVUZGRElPX0FQSSBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CgkJcmV0dXJuIC1lcnJubzsKCX0K CglpZiAoISh1ZmZkaW9fYXBpLmZlYXR1cmVzICYgVUZGRF9GRUFUVVJFX1BBR0VGQVVMVF9GTEFH X1dQKSkgewoJCWZwcmludGYoc3RkZXJyLCAiVUZGRF9GRUFUVVJFX1dSSVRFUFJPVEVDVCBtaXNz aW5nXG4iKTsKCQlyZXR1cm4gLUVOT1NZUzsKCX0KCgl1ZmZkaW9fcmVnaXN0ZXIucmFuZ2Uuc3Rh cnQgPSAodW5zaWduZWQgbG9uZykgbWFwOwoJdWZmZGlvX3JlZ2lzdGVyLnJhbmdlLmxlbiA9IHNp emU7Cgl1ZmZkaW9fcmVnaXN0ZXIubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX1dQOwoJaWYg KGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgJnVmZmRpb19yZWdpc3RlcikgPCAwKSB7CgkJ ZnByaW50ZihzdGRlcnIsICJVRkZESU9fUkVHSVNURVIgZmFpbGVkOiAlZFxuIiwgZXJybm8pOwoJ CXJldHVybiAtZXJybm87Cgl9CgoJcHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgdWZmZF90 aHJlYWRfZm4sIE5VTEwpOwoKCXJldHVybiAwOwp9CgppbnQgbWFpbih2b2lkKQp7Cgljb25zdCBz aXplX3Qgc2l6ZSA9IFNJWkU7CgljaGFyICptYXAsICpjdXI7CgoJcGFnZXNpemUgPSBnZXRwYWdl c2l6ZSgpOwoJcGFnZW1hcF9mZCA9IG9wZW4oIi9wcm9jL3NlbGYvcGFnZW1hcCIsIE9fUkRPTkxZ KTsKCWlmIChwYWdlbWFwX2ZkIDwgMCkgewoJCWZwcmludGYoc3RkZXJyLCAiT3BlbmluZyAvcHJv Yy9zZWxmL3BhZ2VtYXAgZmFpbGVkXG4iKTsKCQlyZXR1cm4gMTsKCX0KCgltYXAgPSBtbWFwKE5V TEwsIHNpemUsIFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OLCAtMSwgMCk7CglpZiAo bWFwID09IE1BUF9GQUlMRUQpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIm1tYXAoKSBmYWlsZWRcbiIp OwoJCXJldHVybiAtZXJybm87Cgl9CgoJaWYgKG1hZHZpc2UobWFwLCBzaXplLCBNQURWX05PSFVH RVBBR0UpKSB7CgkJZnByaW50ZihzdGRlcnIsICJNQURWX0hVR0VQQUdFIGZhaWxlZFxuIik7CgkJ cmV0dXJuIC1lcnJubzsKCX0KCgkvKiBQb3B1bGF0ZSBhbGwgcGFnZXMgLi4uICovCgltZW1zZXQo bWFwLCAwLCBzaXplKTsKCglpZiAoc2V0dXBfdWZmZChtYXAsIHNpemUpKQoJCXJldHVybiAxOwoK CS8qIC4uLiBhbmQgd3JpdGUtcHJvdGVjdCB0aGVtIHVzaW5nIHVmZmQtd3AuICovCgl1ZmZkX3dw X3JhbmdlKG1hcCwgc2l6ZSwgdHJ1ZSk7CgoJLyogVGVzdCBpZiBhbGwgZmF1bHRzIHRyaWdnZXIu ICovCglmb3IgKGN1ciA9IG1hcDsgY3VyIDwgbWFwICsgc2l6ZTsgY3VyICs9IHBhZ2VzaXplKSB7 CgkJdWZmZF90cmlnZ2VyZWQgPSBmYWxzZTsKCQliYXJyaWVyKCk7CgoJCS8qIFRyaWdnZXIgYSB3 cml0ZSBmYXVsdC4gKi8KCQkqY3VyID0gMTsKCgkJYmFycmllcigpOwoJCWlmICghdWZmZF90cmln Z2VyZWQpIHsKCQkJcHJpbnRmKCJGQUlMOiB1ZmZkLXdwIGRpZCBub3QgdHJpZ2dlclxuIik7CgkJ CXJldHVybiAxOwoJCX0KCX0KCglwcmludGYoIlBBU1M6IHVmZmQtd3AgdHJpZ2dlcmVkXG4iKTsK CXJldHVybiAwOwp9Cg== --------------goKdyuB03uIJj0avVFOrEX4v Content-Type: text/x-csrc; charset=UTF-8; name="uffd-wp-huge-zero.c" Content-Disposition: attachment; filename="uffd-wp-huge-zero.c" Content-Transfer-Encoding: base64 I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5o PgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxpbnR0 eXBlcy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8 dW5pc3RkLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8cG9sbC5oPgojaW5jbHVkZSA8 cHRocmVhZC5oPgojaW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+ CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KI2luY2x1ZGUgPGxpbnV4L21lbWZkLmg+CiNpbmNsdWRl IDxsaW51eC91c2VyZmF1bHRmZC5oPgoKc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKc3RhdGljIGlu dCB1ZmZkOwpzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CgojZGVmaW5lIFNJWkUgKDEyOCoxMDI0KjEw MjR1bGwpCiNkZWZpbmUgYmFycmllcigpIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVt b3J5IikKCnZvbGF0aWxlIGJvb2wgdWZmZF90cmlnZ2VyZWQ7CgpzdGF0aWMgdm9pZCB1ZmZkX3dw X3JhbmdlKGNoYXIgKnN0YXJ0LCBzaXplX3Qgc2l6ZSwgYm9vbCB3cCkKewoJc3RydWN0IHVmZmRp b193cml0ZXByb3RlY3QgdWZmZF93cml0ZXByb3RlY3Q7CgoJdWZmZF93cml0ZXByb3RlY3QucmFu Z2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZykgc3RhcnQ7Cgl1ZmZkX3dyaXRlcHJvdGVjdC5yYW5n ZS5sZW4gPSBzaXplOwoJaWYgKHdwKSB7CgkJdWZmZF93cml0ZXByb3RlY3QubW9kZSA9IFVGRkRJ T19XUklURVBST1RFQ1RfTU9ERV9XUDsKCX0gZWxzZSB7CgkJdWZmZF93cml0ZXByb3RlY3QubW9k ZSA9IDA7Cgl9CglpZiAoaW9jdGwodWZmZCwgVUZGRElPX1dSSVRFUFJPVEVDVCwgJnVmZmRfd3Jp dGVwcm90ZWN0KSkgewoJCWZwcmludGYoc3RkZXJyLCAiVUZGRElPX1dSSVRFUFJPVEVDVCBmYWls ZWQ6ICVkXG4iLCBlcnJubyk7CgkJZXhpdCgxKTsKCX0KfQoKc3RhdGljIHZvaWQgKnVmZmRfdGhy ZWFkX2ZuKHZvaWQgKmFyZykKewoJc3RhdGljIHN0cnVjdCB1ZmZkX21zZyBtc2c7Cglzc2l6ZV90 IG5yZWFkOwoKCXdoaWxlICgxKSB7CgkJc3RydWN0IHBvbGxmZCBwb2xsZmQ7CgkJaW50IG5yZWFk eTsKCgkJcG9sbGZkLmZkID0gdWZmZDsKCQlwb2xsZmQuZXZlbnRzID0gUE9MTElOOwoJCW5yZWFk eSA9IHBvbGwoJnBvbGxmZCwgMSwgLTEpOwoJCWlmIChucmVhZHkgPT0gLTEpIHsKCQkJZnByaW50 ZihzdGRlcnIsICJwb2xsKCkgZmFpbGVkOiAlZFxuIiwgZXJybm8pOwoJCQlleGl0KDEpOwoJCX0K CgkJbnJlYWQgPSByZWFkKHVmZmQsICZtc2csIHNpemVvZihtc2cpKTsKCQlpZiAobnJlYWQgPD0g MCkKCQkJY29udGludWU7CgoJCWlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQg fHwKCQkgICAgIShtc2cuYXJnLnBhZ2VmYXVsdC5mbGFncyAmIFVGRkRfUEFHRUZBVUxUX0ZMQUdf V1ApKSB7CgkJCXByaW50ZigiRkFJTDogd3JvbmcgdWZmZC13cCBldmVudCBmaXJlZFxuIik7CgkJ CWV4aXQoMSk7CgkJfQoKCQkvKiB1bi1wcm90ZWN0ICovCgkJdWZmZF90cmlnZ2VyZWQgPSB0cnVl OwoJCXVmZmRfd3BfcmFuZ2UoKGNoYXIgKikodWludHB0cl90KW1zZy5hcmcucGFnZWZhdWx0LmFk ZHJlc3MsIHBhZ2VzaXplLCBmYWxzZSk7Cgl9CglyZXR1cm4gYXJnOwp9CgpzdGF0aWMgaW50IHNl dHVwX3VmZmQoY2hhciAqbWFwLCBzaXplX3Qgc2l6ZSkKewoJc3RydWN0IHVmZmRpb19hcGkgdWZm ZGlvX2FwaTsKCXN0cnVjdCB1ZmZkaW9fcmVnaXN0ZXIgdWZmZGlvX3JlZ2lzdGVyOwoJcHRocmVh ZF90IHRocmVhZDsKCgl1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLAoJCSAgICAgICBP X0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSk7CglpZiAodWZmZCA8 IDApIHsKCQlmcHJpbnRmKHN0ZGVyciwgInN5c2NhbGwoKSBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7 CgkJcmV0dXJuIC1lcnJubzsKCX0KCgl1ZmZkaW9fYXBpLmFwaSA9IFVGRkRfQVBJOwoJdWZmZGlv X2FwaS5mZWF0dXJlcyA9IFVGRkRfRkVBVFVSRV9QQUdFRkFVTFRfRkxBR19XUDsKCWlmIChpb2N0 bCh1ZmZkLCBVRkZESU9fQVBJLCAmdWZmZGlvX2FwaSkgPCAwKSB7CgkJZnByaW50ZihzdGRlcnIs ICJVRkZESU9fQVBJIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKCQlyZXR1cm4gLWVycm5vOwoJfQoK CWlmICghKHVmZmRpb19hcGkuZmVhdHVyZXMgJiBVRkZEX0ZFQVRVUkVfUEFHRUZBVUxUX0ZMQUdf V1ApKSB7CgkJZnByaW50ZihzdGRlcnIsICJVRkZEX0ZFQVRVUkVfV1JJVEVQUk9URUNUIG1pc3Np bmdcbiIpOwoJCXJldHVybiAtRU5PU1lTOwoJfQoKCXVmZmRpb19yZWdpc3Rlci5yYW5nZS5zdGFy dCA9ICh1bnNpZ25lZCBsb25nKSBtYXA7Cgl1ZmZkaW9fcmVnaXN0ZXIucmFuZ2UubGVuID0gc2l6 ZTsKCXVmZmRpb19yZWdpc3Rlci5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfV1A7CglpZiAo aW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCAmdWZmZGlvX3JlZ2lzdGVyKSA8IDApIHsKCQlm cHJpbnRmKHN0ZGVyciwgIlVGRkRJT19SRUdJU1RFUiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7CgkJ cmV0dXJuIC1lcnJubzsKCX0KCglwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCBOVUxMLCB1ZmZkX3Ro cmVhZF9mbiwgTlVMTCk7CgoJcmV0dXJuIDA7Cn0KCmludCBtYWluKHZvaWQpCnsKCWNvbnN0IHNp emVfdCBzaXplID0gU0laRTsKCWNoYXIgKm1hcCwgKmN1cjsKCglwYWdlc2l6ZSA9IGdldHBhZ2Vz aXplKCk7CglwYWdlbWFwX2ZkID0gb3BlbigiL3Byb2Mvc2VsZi9wYWdlbWFwIiwgT19SRE9OTFkp OwoJaWYgKHBhZ2VtYXBfZmQgPCAwKSB7CgkJZnByaW50ZihzdGRlcnIsICJPcGVuaW5nIC9wcm9j L3NlbGYvcGFnZW1hcCBmYWlsZWRcbiIpOwoJCXJldHVybiAxOwoJfQoKCW1hcCA9IG1tYXAoTlVM TCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OLCAtMSwg MCk7CglpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIm1tYXAoKSBm YWlsZWRcbiIpOwoJCXJldHVybiAtZXJybm87Cgl9CgoJaWYgKG1hZHZpc2UobWFwLCBzaXplLCBN QURWX0hVR0VQQUdFKSkgewoJCWZwcmludGYoc3RkZXJyLCAiTUFEVl9IVUdFUEFHRSBmYWlsZWRc biIpOwoJCXJldHVybiAtZXJybm87Cgl9CgoJaWYgKHNldHVwX3VmZmQobWFwLCBzaXplKSkKCQly ZXR1cm4gMTsKCgkvKiBQb3B1bGF0ZSB0aGUgc2hhcmVkIHplcm9wYWdlLCBob3BlZnVsbHQgYWxz byB0aGUgaHVnZSBvbmUuKi8KCW1hZHZpc2UobWFwLCBzaXplLCBNQURWX1BPUFVMQVRFX1JFQUQp OwoKCS8qIC4uLiBhbmQgd3JpdGUtcHJvdGVjdCBhbGwgcGFnZXMgdXNpbmcgdWZmZC13cC4gKi8K CXVmZmRfd3BfcmFuZ2UobWFwLCBzaXplLCB0cnVlKTsKCgkvKgoJICogRGlzY2FyZCBldmVyeSBz ZWNvbmQgb2RkIHBhZ2UsIHRoaXMgd2lsbCBzcGxpdCBhbnkgaHVnZSB6ZXJvCgkgKiBUSFAgYW5k IHdpbGwgaG9wZWZ1bGx5IGtlZXAgdGhlIFBURSBwcm90ZWN0ZWQgdXNpbmcgdWZmZC13cC4KCSAq CgkgKiBBbnkgbWVjaGFuaXNtIHRvIFBURS1tYXAgdGhlIFRIUCB3b3VsZCBkby4KCSAqLwoJZm9y IChjdXIgPSBtYXAgKyBwYWdlc2l6ZTsgY3VyIDwgbWFwICsgc2l6ZTsgY3VyICs9IDIgKiBwYWdl c2l6ZSkKCQltYWR2aXNlKGN1ciwgcGFnZXNpemUsIE1BRFZfRE9OVE5FRUQpOwoKCS8qCgkgKiBU ZXN0IGV2ZXJ5IHNlY29uZCBldmVuIHBhZ2UgKC0+IGFsbCByZW1haW5pbmcgb25lcykgaWYgd2Ug Z2V0IG91cgoJICogdWZmZC13cCBldmVudHMuCgkgKi8KCWZvciAoY3VyID0gbWFwOyBjdXIgPCBt YXAgKyBzaXplOyBjdXIgKz0gMiAqIHBhZ2VzaXplKSB7CgkJdWZmZF90cmlnZ2VyZWQgPSBmYWxz ZTsKCgkJYmFycmllcigpOwoJCS8qIFRyaWdnZXIgYSB3cml0ZSBmYXVsdC4gKi8KCQkqY3VyID0g MTsKCQliYXJyaWVyKCk7CgoJCWlmICghdWZmZF90cmlnZ2VyZWQpIHsKCQkJcHJpbnRmKCJGQUlM OiB1ZmZkLXdwIGRpZCBub3QgdHJpZ2dlclxuIik7CgkJCXJldHVybiAxOwoJCX0KCX0KCglwcmlu dGYoIlBBU1M6IHVmZmQtd3AgdHJpZ2dlcmVkXG4iKTsKCXJldHVybiAwOwp9Cg== --------------goKdyuB03uIJj0avVFOrEX4v--