From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129402 invoked by alias); 11 Jul 2017 21:20:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 129380 invoked by uid 89); 11 Jul 2017 21:20:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=primarily, prevention, 42,6, SIZE X-HELO: mail-qt0-f172.google.com Received: from mail-qt0-f172.google.com (HELO mail-qt0-f172.google.com) (209.85.216.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Jul 2017 21:20:17 +0000 Received: by mail-qt0-f172.google.com with SMTP id 32so4161615qtv.1 for ; Tue, 11 Jul 2017 14:20:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:message-id:date:user-agent :mime-version:content-language; bh=fEw8rzAbWp/QxhVKFHcXWEH3IZrMctpKLPGwzpV7lGc=; b=Ro+S6o/oXiBhgs/k7psH9VgVx1DkPPaTQcm/HStEwf9xk707otlD6tiQH79mAnj1rA yPbopXjhA9XqZ8YyT3Yfl6oe0dj3hmQ61/elF7UtIE9LX75NS3FYf4hYSs+eQM1/qhBI wNWslXYx87dbnbTkLVW6hZBMaXykVbP7wNwVi3MQQwAleP7TWYaSzmlJVqM4zjhJ4RSZ Srl7QWlEapFdkgz3DfAKcxynx8F1KUA4cM+aBmsdjxI3mDEQzEtXNRMOD0LvdOE19tjO RyaoFXGalIl+fEvYHCrJRWv5Bpv7ttwUmMil95tLWG0Hy92kVqybE6oegYJCfsO7RxQv GyaQ== X-Gm-Message-State: AIVw1110lf01W2qYnIie9F0DepoEUTNlgKl/77miDZmJA3ZXWo+L9tm0 ZcOaD9UbwC6QNjS6 X-Received: by 10.200.4.140 with SMTP id s12mr2448314qtg.35.1499808015243; Tue, 11 Jul 2017 14:20:15 -0700 (PDT) Received: from localhost.localdomain (c-24-11-92-212.hsd1.ut.comcast.net. [24.11.92.212]) by smtp.googlemail.com with ESMTPSA id g83sm335278qke.19.2017.07.11.14.20.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Jul 2017 14:20:13 -0700 (PDT) From: Jeff Law X-Google-Original-From: Jeff Law Subject: [PATCH][RFA/RFC] Stack clash mitigation patch 02/08 To: gcc-patches Message-ID: <8a9cdbc9-dc96-e793-0147-3f09af2a26fa@gmail.com> Date: Tue, 11 Jul 2017 21:20:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------84643569555CC2F9891CB42B" X-SW-Source: 2017-07/txt/msg00558.txt.bz2 This is a multi-part message in MIME format. --------------84643569555CC2F9891CB42B Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 2769 The key goal in this patch is to introduce the new probing style for dynamically allocated stack space and indirect uses of STACK_CHECK_PROTECT via get_stack_check_protect(). Those two changes accomplish two things. First it gives most targets protection of dynamically allocated space (exceptions are targets which expanders to allocate dynamic stack space such as ppc). Second, targets which are not covered by -fstack-check=clash prologues later, but which are covered by -fstack-check=specific get a fair amount of protection. We essentially vector into a totally different routine to allocate/probe the dynamic stack space when -fstack-check=clash is active. It differs from the existing routine is that it allocates PROBE_INTERVAL chunks and probes them as they are allocated. The existing code would allocate the entire space as a single hunk, then probe PROBE_INTERVAL chunks within the hunk. That routine is never presented with constant allocations on x86, but is presented with constant allocations on other architectures. It will optimize cases when it knows it does not need the loop or the residual allocation after the loop. It does not have an unrolled loop mode, but one could be added -- it didn't seem worth the effort. The test will check that the loop is avoided for one case where it makes sense. It does not check for avoiding the residual allocation, but it could probably be made to do so. The indirection for STACK_CHECK_PROTECT via get_stack_protect is worth some further discussion as well. Early in the development of the stack-clash mitigation patches we thought we could get away with re-using much of the existing target code for -stack-check=specific. Essentially that code starts a probing loop at STACK_CHECK_PROTECT and probes 2-3 pages beyond the current function's needs. The problem was that starting at STACK_CHECK_PROTECT would skip probes in the first couple pages leaving the code vulnerable. So the idea was to avoid using STACK_CHECK_PROTECT directly. Instead we would indirect through a new function (get_stack_check_protect) which would return either 0 or STACK_CHECK_PROTECT depending on whether or not we wanted -fstack-check=clash or -fstack-check=specific respectively. That scheme works reasonably well. Except that it will tend to allocate a large (larger than PROBE_INTERVAL) chunk of memory at once, then go back and probe regions of PROBE_INTERVAL size. That introduces an unfortunate race condition with asynch signals and also crashes valgrind on ppc and aarch64. Rather than throw that code away, it may still be valuable to those targets with -fstack-check=specific support, but without -fstack-check=clash support. So I'm including it here. Thoughts/comments? Ok for the trunk? --------------84643569555CC2F9891CB42B Content-Type: text/plain; charset=UTF-8; name="P2" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="P2" Content-length: 27337 CgkqIGRlZmF1bHRzLmggKFNUQUNLX0NIRUNLX01PVklOR19TUCk6IEVuYWJs ZSB3aXRoIC1mc3RhY2stY2hlY2s9Y2xhc2gKCSogZXhwbG93LmMgKGFudGlf YWRqdXN0X3N0YWNrX2FuZF9wcm9iZV9zdGFja19jbGFzaCk6IE5ldyBmdW5j dGlvbi4KCShnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCk6IExpa2V3aXNlLgoJ KGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBVc2UgbmV3IGZ1bmN0 aW9ucy4KCSogcnRsLmggKGdldF9zdGFja19jaGVja19wcm90ZWN0KTogUHJv dG90eXBlLgoJKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LmMgKGFhcmNoNjRf ZXhwYW5kX3Byb2xvZ3VlKTogVXNlCglnZXRfc3RhY2tfY2hlY2tfcHJvdGVj dC4KCSogY29uZmlnL2FscGhhL2FscGhhLmMgKGFscGhhX2V4cGFuZF9wcm9s b2d1ZSk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fZXhw YW5kX3Byb2xvZ3VlKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L2kzODYu YyAoaXg4Nl9leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KCSogY29uZmln L2lhNjQvaWE2NC5jIChpYTY0X2V4cGFuZF9wcm9sb2d1ZSk6IExpa2V3aXNl LgoJKiBjb25pZmcvbWlwcy9taXBzLmMgKG1pcHNfZXhwYW5kX3Byb2xvZ3Vl KTogTGlrZXdpc2UuCgkqIGNvbmZpZy9wb3dlcnBjc3BlL3Bvd2VycGNzcGUu YyAocnM2MDAwX2VtaXRfcHJvbG9ndWUpOiBMaWtld2lzZS4KCSogY29uZmln L3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX2VtaXRfcHJvbG9ndWUpOiBMaWtl d2lzZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2V4cGFuZF9w cm9sb2d1ZSk6IExpa2V3aXNlLgoKCnRlc3RzdWl0ZQoKCSogZ2NjLmRnL3N0 YWNrLWNoZWNrLTMuYzogTmV3IHRlc3QuCmNvbW1pdCBjZGRjNzc5NzllNDE4 Mzc2OWUxODE3Njc2YzNiNDQ5ZDhjOGNiMjAyCkF1dGhvcjogSmVmZiBMYXcg PGxhd0B0b3JzaW9uLnVzZXJzeXMucmVkaGF0LmNvbT4KRGF0ZTogICBXZWQg SnVuIDI4IDE0OjAyOjE2IDIwMTcgLTA0MDAKCiAgICBVc2Ugc3RhY2stY2xh c2ggcHJvYmluZyBpZiByZXF1ZXN0ZWQgZm9yIGFsbG9jYSBzcGFjZQogICAg VXNlIE1PVklOR19TUCBieSBkZWZhdWx0IGZvciBzdGFjay1jbGFzaCBwcm9i aW5nCiAgICBTaW1wbGUgdGVzdCBmb3IgZHluYW1pYyBhbGxvY2F0aW9ucyAr IHByb2JpbmcKICAgIAogICAgc3RhY2stY2hlY2stMyBmaXhlcyBmb3IgaW1w cm92ZW1lbnRzIGluIGR5bmFtaWMgYXJlYSBwcm9iZSBsb29wIGVsaXNpb24K ICAgIHVzZSBkZy1yZXF1aXJlcy4uLiAgZG8gbm90IG9wdGltaXppbmcgc2li bGluZyBjYWxscwogICAgCiAgICBJbmRpcmVjdCBmb3IgU1RBQ0tfQ0hFQ0tf UFJPVEVDVAoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LmMgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jCmluZGV4IGVm MWI1YTguLjBhOGI0MGEgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2 NC9hYXJjaDY0LmMKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQu YwpAQCAtMzY3NiwxMiArMzY3NiwxNCBAQCBhYXJjaDY0X2V4cGFuZF9wcm9s b2d1ZSAodm9pZCkKICAgICB7CiAgICAgICBpZiAoY3J0bC0+aXNfbGVhZiAm JiAhY2Z1bi0+Y2FsbHNfYWxsb2NhKQogCXsKLQkgIGlmIChmcmFtZV9zaXpl ID4gUFJPQkVfSU5URVJWQUwgJiYgZnJhbWVfc2l6ZSA+IFNUQUNLX0NIRUNL X1BST1RFQ1QpCi0JICAgIGFhcmNoNjRfZW1pdF9wcm9iZV9zdGFja19yYW5n ZSAoU1RBQ0tfQ0hFQ0tfUFJPVEVDVCwKLQkJCQkJICAgIGZyYW1lX3NpemUg LSBTVEFDS19DSEVDS19QUk9URUNUKTsKKwkgIGlmIChmcmFtZV9zaXplID4g UFJPQkVfSU5URVJWQUwKKwkgICAgICAmJiBmcmFtZV9zaXplID4gZ2V0X3N0 YWNrX2NoZWNrX3Byb3RlY3QgKCkpCisJICAgIGFhcmNoNjRfZW1pdF9wcm9i ZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCksCisJ CQkJCSAgICAoZnJhbWVfc2l6ZQorCQkJCQkgICAgIC0gZ2V0X3N0YWNrX2No ZWNrX3Byb3RlY3QgKCkpKTsKIAl9CiAgICAgICBlbHNlIGlmIChmcmFtZV9z aXplID4gMCkKLQlhYXJjaDY0X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKFNU QUNLX0NIRUNLX1BST1RFQ1QsIGZyYW1lX3NpemUpOworCWFhcmNoNjRfZW1p dF9wcm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3Qg KCksIGZyYW1lX3NpemUpOwogICAgIH0KIAogICBhYXJjaDY0X3N1Yl9zcCAo SVAwX1JFR05VTSwgaW5pdGlhbF9hZGp1c3QsIHRydWUpOwpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9hbHBoYS9hbHBoYS5jIGIvZ2NjL2NvbmZpZy9hbHBo YS9hbHBoYS5jCmluZGV4IDAwYTY5YzEuLjkxZjNkN2MgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvYWxwaGEvYWxwaGEuYworKysgYi9nY2MvY29uZmlnL2Fs cGhhL2FscGhhLmMKQEAgLTc3NDEsNyArNzc0MSw3IEBAIGFscGhhX2V4cGFu ZF9wcm9sb2d1ZSAodm9pZCkKIAogICBwcm9iZWRfc2l6ZSA9IGZyYW1lX3Np emU7CiAgIGlmIChmbGFnX3N0YWNrX2NoZWNrKQotICAgIHByb2JlZF9zaXpl ICs9IFNUQUNLX0NIRUNLX1BST1RFQ1Q7CisgICAgcHJvYmVkX3NpemUgKz0g Z2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCk7CiAKICAgaWYgKHByb2JlZF9z aXplIDw9IDMyNzY4KQogICAgIHsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcv YXJtL2FybS5jIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKaW5kZXggYzYxMDFl Zi4uOTgyMmNhNyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmMK KysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKQEAgLTIxNjgwLDEzICsyMTY4 MCwxMyBAQCBhcm1fZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQogCiAgICAgICBp ZiAoY3J0bC0+aXNfbGVhZiAmJiAhY2Z1bi0+Y2FsbHNfYWxsb2NhKQogCXsK LQkgIGlmIChzaXplID4gUFJPQkVfSU5URVJWQUwgJiYgc2l6ZSA+IFNUQUNL X0NIRUNLX1BST1RFQ1QpCi0JICAgIGFybV9lbWl0X3Byb2JlX3N0YWNrX3Jh bmdlIChTVEFDS19DSEVDS19QUk9URUNULAotCQkJCQlzaXplIC0gU1RBQ0tf Q0hFQ0tfUFJPVEVDVCwKKwkgIGlmIChzaXplID4gUFJPQkVfSU5URVJWQUwg JiYgc2l6ZSA+IGdldF9zdGFja19jaGVja19wcm90ZWN0ICgpKQorCSAgICBh cm1fZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3By b3RlY3QgKCksCisJCQkJCXNpemUgLSBnZXRfc3RhY2tfY2hlY2tfcHJvdGVj dCAoKSwKIAkJCQkJcmVnbm8sIGxpdmVfcmVnc19tYXNrKTsKIAl9CiAgICAg ICBlbHNlIGlmIChzaXplID4gMCkKLQlhcm1fZW1pdF9wcm9iZV9zdGFja19y YW5nZSAoU1RBQ0tfQ0hFQ0tfUFJPVEVDVCwgc2l6ZSwKKwlhcm1fZW1pdF9w cm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCks IHNpemUsCiAJCQkJICAgIHJlZ25vLCBsaXZlX3JlZ3NfbWFzayk7CiAgICAg fQogCkBAIC0yNzg1NCw3ICsyNzg1NCw3IEBAIGFybV9mcmFtZV9wb2ludGVy X3JlcXVpcmVkICh2b2lkKQogCXsKIAkgIC8qIFdlIGRvbid0IGhhdmUgdGhl IGZpbmFsIHNpemUgb2YgdGhlIGZyYW1lIHNvIGFkanVzdC4gICovCiAJICBz aXplICs9IDMyICogVU5JVFNfUEVSX1dPUkQ7Ci0JICBpZiAoc2l6ZSA+IFBS T0JFX0lOVEVSVkFMICYmIHNpemUgPiBTVEFDS19DSEVDS19QUk9URUNUKQor CSAgaWYgKHNpemUgPiBQUk9CRV9JTlRFUlZBTCAmJiBzaXplID4gZ2V0X3N0 YWNrX2NoZWNrX3Byb3RlY3QgKCkpCiAJICAgIHJldHVybiB0cnVlOwogCX0K ICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2 LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCmluZGV4IDFhOGEzYTMuLjA5 NDdiM2MgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMKKysr IGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwpAQCAtMTQ2MzgsNyArMTQ2Mzgs NyBAQCBpeDg2X2V4cGFuZF9wcm9sb2d1ZSAodm9pZCkKIAkgIEhPU1RfV0lE RV9JTlQgc2l6ZSA9IGFsbG9jYXRlOwogCiAJICBpZiAoVEFSR0VUXzY0QklU ICYmIHNpemUgPj0gSE9TVF9XSURFX0lOVF9DICgweDgwMDAwMDAwKSkKLQkg ICAgc2l6ZSA9IDB4ODAwMDAwMDAgLSBTVEFDS19DSEVDS19QUk9URUNUIC0g MTsKKwkgICAgc2l6ZSA9IDB4ODAwMDAwMDAgLSBnZXRfc3RhY2tfY2hlY2tf cHJvdGVjdCAoKSAtIDE7CiAKIAkgIGlmIChUQVJHRVRfU1RBQ0tfUFJPQkUp CiAJICAgIHsKQEAgLTE0NjQ4LDE4ICsxNDY0OCwyMCBAQCBpeDg2X2V4cGFu ZF9wcm9sb2d1ZSAodm9pZCkKIAkJICAgIGl4ODZfZW1pdF9wcm9iZV9zdGFj a19yYW5nZSAoMCwgc2l6ZSk7CiAJCX0KIAkgICAgICBlbHNlCi0JCWl4ODZf ZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoMCwgc2l6ZSArIFNUQUNLX0NIRUNL X1BST1RFQ1QpOworCQlpeDg2X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKDAs CisJCQkJCSAgICAgc2l6ZSArIGdldF9zdGFja19jaGVja19wcm90ZWN0ICgp KTsKIAkgICAgfQogCSAgZWxzZQogCSAgICB7CiAJICAgICAgaWYgKGNydGwt PmlzX2xlYWYgJiYgIWNmdW4tPmNhbGxzX2FsbG9jYSkKIAkJewotCQkgIGlm IChzaXplID4gUFJPQkVfSU5URVJWQUwgJiYgc2l6ZSA+IFNUQUNLX0NIRUNL X1BST1RFQ1QpCi0JCSAgICBpeDg2X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2Ug KFNUQUNLX0NIRUNLX1BST1RFQ1QsCi0JCQkJCQkgc2l6ZSAtIFNUQUNLX0NI RUNLX1BST1RFQ1QpOworCQkgIGlmIChzaXplID4gUFJPQkVfSU5URVJWQUwK KwkJICAgICAgJiYgc2l6ZSA+IGdldF9zdGFja19jaGVja19wcm90ZWN0ICgp KQorCQkgICAgaXg4Nl9lbWl0X3Byb2JlX3N0YWNrX3JhbmdlIChnZXRfc3Rh Y2tfY2hlY2tfcHJvdGVjdCAoKSwKKwkJCQkJCSBzaXplIC0gZ2V0X3N0YWNr X2NoZWNrX3Byb3RlY3QgKCkpOwogCQl9CiAJICAgICAgZWxzZQotCQlpeDg2 X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKFNUQUNLX0NIRUNLX1BST1RFQ1Qs IHNpemUpOworCQlpeDg2X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKGdldF9z dGFja19jaGVja19wcm90ZWN0ICgpLCBzaXplKTsKIAkgICAgfQogCX0KICAg ICB9CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2lhNjQvaWE2NC5jIGIvZ2Nj L2NvbmZpZy9pYTY0L2lhNjQuYwppbmRleCA2MTdkMTg4Li43MGFlZjM0IDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2lhNjQvaWE2NC5jCisrKyBiL2djYy9j b25maWcvaWE2NC9pYTY0LmMKQEAgLTM0ODEsMTUgKzM0ODEsMTYgQEAgaWE2 NF9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCiAKICAgICAgIGlmIChjcnRsLT5p c19sZWFmICYmICFjZnVuLT5jYWxsc19hbGxvY2EpCiAJewotCSAgaWYgKHNp emUgPiBQUk9CRV9JTlRFUlZBTCAmJiBzaXplID4gU1RBQ0tfQ0hFQ0tfUFJP VEVDVCkKLQkgICAgaWE2NF9lbWl0X3Byb2JlX3N0YWNrX3JhbmdlIChTVEFD S19DSEVDS19QUk9URUNULAotCQkJCQkgc2l6ZSAtIFNUQUNLX0NIRUNLX1BS T1RFQ1QsCisJICBpZiAoc2l6ZSA+IFBST0JFX0lOVEVSVkFMICYmIHNpemUg PiBnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAoKSkKKwkgICAgaWE2NF9lbWl0 X3Byb2JlX3N0YWNrX3JhbmdlIChnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAo KSwKKwkJCQkJIHNpemUgLSBnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAoKSwK IAkJCQkJIGJzX3NpemUpOwotCSAgZWxzZSBpZiAoc2l6ZSArIGJzX3NpemUg PiBTVEFDS19DSEVDS19QUk9URUNUKQotCSAgICBpYTY0X2VtaXRfcHJvYmVf c3RhY2tfcmFuZ2UgKFNUQUNLX0NIRUNLX1BST1RFQ1QsIDAsIGJzX3NpemUp OworCSAgZWxzZSBpZiAoc2l6ZSArIGJzX3NpemUgPiBnZXRfc3RhY2tfY2hl Y2tfcHJvdGVjdCAoKSkKKwkgICAgaWE2NF9lbWl0X3Byb2JlX3N0YWNrX3Jh bmdlIChnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAoKSwKKwkJCQkJIDAsIGJz X3NpemUpOwogCX0KICAgICAgIGVsc2UgaWYgKHNpemUgKyBic19zaXplID4g MCkKLQlpYTY0X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKFNUQUNLX0NIRUNL X1BST1RFQ1QsIHNpemUsIGJzX3NpemUpOworCWlhNjRfZW1pdF9wcm9iZV9z dGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCksIHNpemUs IGJzX3NpemUpOwogICAgIH0KIAogICBpZiAoZHVtcF9maWxlKSAKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvbWlwcy9taXBzLmMgYi9nY2MvY29uZmlnL21p cHMvbWlwcy5jCmluZGV4IDZiZmQ4NmEuLjdkODVjZTcgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvbWlwcy9taXBzLmMKKysrIGIvZ2NjL2NvbmZpZy9taXBz L21pcHMuYwpAQCAtMTIwODEsMTIgKzEyMDgxLDEyIEBAIG1pcHNfZXhwYW5k X3Byb2xvZ3VlICh2b2lkKQogICAgIHsKICAgICAgIGlmIChjcnRsLT5pc19s ZWFmICYmICFjZnVuLT5jYWxsc19hbGxvY2EpCiAJewotCSAgaWYgKHNpemUg PiBQUk9CRV9JTlRFUlZBTCAmJiBzaXplID4gU1RBQ0tfQ0hFQ0tfUFJPVEVD VCkKLQkgICAgbWlwc19lbWl0X3Byb2JlX3N0YWNrX3JhbmdlIChTVEFDS19D SEVDS19QUk9URUNULAotCQkJCQkgc2l6ZSAtIFNUQUNLX0NIRUNLX1BST1RF Q1QpOworCSAgaWYgKHNpemUgPiBQUk9CRV9JTlRFUlZBTCAmJiBzaXplID4g Z2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCkpCisJICAgIG1pcHNfZW1pdF9w cm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCks CisJCQkJCSBzaXplIC0gZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCkpOwog CX0KICAgICAgIGVsc2UgaWYgKHNpemUgPiAwKQotCW1pcHNfZW1pdF9wcm9i ZV9zdGFja19yYW5nZSAoU1RBQ0tfQ0hFQ0tfUFJPVEVDVCwgc2l6ZSk7CisJ bWlwc19lbWl0X3Byb2JlX3N0YWNrX3JhbmdlIChnZXRfc3RhY2tfY2hlY2tf cHJvdGVjdCAoKSwgc2l6ZSk7CiAgICAgfQogCiAgIC8qIFNhdmUgdGhlIHJl Z2lzdGVycy4gIEFsbG9jYXRlIHVwIHRvIE1JUFNfTUFYX0ZJUlNUX1NUQUNL X1NURVAKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcG93ZXJwY3NwZS9wb3dl cnBjc3BlLmMgYi9nY2MvY29uZmlnL3Bvd2VycGNzcGUvcG93ZXJwY3NwZS5j CmluZGV4IDA2ZDY2ZDcuLmRmNWQzY2QgMTAwNjQ0Ci0tLSBhL2djYy9jb25m aWcvcG93ZXJwY3NwZS9wb3dlcnBjc3BlLmMKKysrIGIvZ2NjL2NvbmZpZy9w b3dlcnBjc3BlL3Bvd2VycGNzcGUuYwpAQCAtMjk1OTcsMTIgKzI5NTk3LDEy IEBAIHJzNjAwMF9lbWl0X3Byb2xvZ3VlICh2b2lkKQogCiAgICAgICBpZiAo Y3J0bC0+aXNfbGVhZiAmJiAhY2Z1bi0+Y2FsbHNfYWxsb2NhKQogCXsKLQkg IGlmIChzaXplID4gUFJPQkVfSU5URVJWQUwgJiYgc2l6ZSA+IFNUQUNLX0NI RUNLX1BST1RFQ1QpCi0JICAgIHJzNjAwMF9lbWl0X3Byb2JlX3N0YWNrX3Jh bmdlIChTVEFDS19DSEVDS19QUk9URUNULAotCQkJCQkgICBzaXplIC0gU1RB Q0tfQ0hFQ0tfUFJPVEVDVCk7CisJICBpZiAoc2l6ZSA+IFBST0JFX0lOVEVS VkFMICYmIHNpemUgPiBnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAoKSkKKwkg ICAgcnM2MDAwX2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKGdldF9zdGFja19j aGVja19wcm90ZWN0ICgpLAorCQkJCQkgICBzaXplIC0gZ2V0X3N0YWNrX2No ZWNrX3Byb3RlY3QgKCkpOwogCX0KICAgICAgIGVsc2UgaWYgKHNpemUgPiAw KQotCXJzNjAwMF9lbWl0X3Byb2JlX3N0YWNrX3JhbmdlIChTVEFDS19DSEVD S19QUk9URUNULCBzaXplKTsKKwlyczYwMDBfZW1pdF9wcm9iZV9zdGFja19y YW5nZSAoZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCksIHNpemUpOwogICAg IH0KIAogICBpZiAoVEFSR0VUX0ZJWF9BTkRfQ09OVElOVUUpCmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyBiL2djYy9jb25maWcv cnM2MDAwL3JzNjAwMC5jCmluZGV4IDYzYTZjODAuLmFhNzBlMzAgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCisrKyBiL2djYy9j b25maWcvcnM2MDAwL3JzNjAwMC5jCkBAIC0yNjg5NSwxMiArMjY4OTUsMTIg QEAgcnM2MDAwX2VtaXRfcHJvbG9ndWUgKHZvaWQpCiAKICAgICAgIGlmIChj cnRsLT5pc19sZWFmICYmICFjZnVuLT5jYWxsc19hbGxvY2EpCiAJewotCSAg aWYgKHNpemUgPiBQUk9CRV9JTlRFUlZBTCAmJiBzaXplID4gU1RBQ0tfQ0hF Q0tfUFJPVEVDVCkKLQkgICAgcnM2MDAwX2VtaXRfcHJvYmVfc3RhY2tfcmFu Z2UgKFNUQUNLX0NIRUNLX1BST1RFQ1QsCi0JCQkJCSAgIHNpemUgLSBTVEFD S19DSEVDS19QUk9URUNUKTsKKwkgIGlmIChzaXplID4gUFJPQkVfSU5URVJW QUwgJiYgc2l6ZSA+IGdldF9zdGFja19jaGVja19wcm90ZWN0ICgpKQorCSAg ICByczYwMDBfZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0YWNrX2No ZWNrX3Byb3RlY3QgKCksCisJCQkJCSAgIHNpemUgLSBnZXRfc3RhY2tfY2hl Y2tfcHJvdGVjdCAoKSk7CiAJfQogICAgICAgZWxzZSBpZiAoc2l6ZSA+IDAp Ci0JcnM2MDAwX2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKFNUQUNLX0NIRUNL X1BST1RFQ1QsIHNpemUpOworCXJzNjAwMF9lbWl0X3Byb2JlX3N0YWNrX3Jh bmdlIChnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAoKSwgc2l6ZSk7CiAgICAg fQogCiAgIGlmIChUQVJHRVRfRklYX0FORF9DT05USU5VRSkKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvc3BhcmMvc3BhcmMuYyBiL2djYy9jb25maWcvc3Bh cmMvc3BhcmMuYwppbmRleCA3OTBhMDM2Li4xZGEwMzJhIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL3NwYXJjL3NwYXJjLmMKKysrIGIvZ2NjL2NvbmZpZy9z cGFyYy9zcGFyYy5jCkBAIC01NTUyLDEyICs1NTUyLDEyIEBAIHNwYXJjX2V4 cGFuZF9wcm9sb2d1ZSAodm9pZCkKICAgICB7CiAgICAgICBpZiAoY3J0bC0+ aXNfbGVhZiAmJiAhY2Z1bi0+Y2FsbHNfYWxsb2NhKQogCXsKLQkgIGlmIChz aXplID4gUFJPQkVfSU5URVJWQUwgJiYgc2l6ZSA+IFNUQUNLX0NIRUNLX1BS T1RFQ1QpCi0JICAgIHNwYXJjX2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKFNU QUNLX0NIRUNLX1BST1RFQ1QsCi0JCQkJCSAgc2l6ZSAtIFNUQUNLX0NIRUNL X1BST1RFQ1QpOworCSAgaWYgKHNpemUgPiBQUk9CRV9JTlRFUlZBTCAmJiBz aXplID4gZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCkpCisJICAgIHNwYXJj X2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKGdldF9zdGFja19jaGVja19wcm90 ZWN0ICgpLAorCQkJCQkgIHNpemUgLSBnZXRfc3RhY2tfY2hlY2tfcHJvdGVj dCAoKSk7CiAJfQogICAgICAgZWxzZSBpZiAoc2l6ZSA+IDApCi0Jc3BhcmNf ZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoU1RBQ0tfQ0hFQ0tfUFJPVEVDVCwg c2l6ZSk7CisJc3BhcmNfZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoZ2V0X3N0 YWNrX2NoZWNrX3Byb3RlY3QgKCksIHNpemUpOwogICAgIH0KIAogICBpZiAo c2l6ZSA9PSAwKQpAQCAtNTY2MywxMiArNTY2MywxMiBAQCBzcGFyY19mbGF0 X2V4cGFuZF9wcm9sb2d1ZSAodm9pZCkKICAgICB7CiAgICAgICBpZiAoY3J0 bC0+aXNfbGVhZiAmJiAhY2Z1bi0+Y2FsbHNfYWxsb2NhKQogCXsKLQkgIGlm IChzaXplID4gUFJPQkVfSU5URVJWQUwgJiYgc2l6ZSA+IFNUQUNLX0NIRUNL X1BST1RFQ1QpCi0JICAgIHNwYXJjX2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2Ug KFNUQUNLX0NIRUNLX1BST1RFQ1QsCi0JCQkJCSAgc2l6ZSAtIFNUQUNLX0NI RUNLX1BST1RFQ1QpOworCSAgaWYgKHNpemUgPiBQUk9CRV9JTlRFUlZBTCAm JiBzaXplID4gZ2V0X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCkpCisJICAgIHNw YXJjX2VtaXRfcHJvYmVfc3RhY2tfcmFuZ2UgKGdldF9zdGFja19jaGVja19w cm90ZWN0ICgpLAorCQkJCQkgIHNpemUgLSBnZXRfc3RhY2tfY2hlY2tfcHJv dGVjdCAoKSk7CiAJfQogICAgICAgZWxzZSBpZiAoc2l6ZSA+IDApCi0Jc3Bh cmNfZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoU1RBQ0tfQ0hFQ0tfUFJPVEVD VCwgc2l6ZSk7CisJc3BhcmNfZW1pdF9wcm9iZV9zdGFja19yYW5nZSAoZ2V0 X3N0YWNrX2NoZWNrX3Byb3RlY3QgKCksIHNpemUpOwogICAgIH0KIAogICBp ZiAoc3BhcmNfc2F2ZV9sb2NhbF9pbl9yZWdzX3ApCmRpZmYgLS1naXQgYS9n Y2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCmluZGV4IDdhZDkyZDku LjdjNjEyYTQgMTAwNjQ0Ci0tLSBhL2djYy9kZWZhdWx0cy5oCisrKyBiL2dj Yy9kZWZhdWx0cy5oCkBAIC0xNDA4LDggKzE0MDgsMTEgQEAgc2VlIHRoZSBm aWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVs eS4gIElmIG5vdCwgc2VlCiAjZW5kaWYKIAogLyogVGhlIGRlZmF1bHQgaXMg bm90IHRvIG1vdmUgdGhlIHN0YWNrIHBvaW50ZXIuICAqLworLyogVGhlIGRl ZmF1bHQgaXMgbm90IHRvIG1vdmUgdGhlIHN0YWNrIHBvaW50ZXIsIHVubGVz cyB3ZSBhcmUgdXNpbmcKKyAgIHN0YWNrIGNsYXNoIHByZXZlbnRpb24gc3Rh Y2sgY2hlY2tpbmcuICAqLwogI2lmbmRlZiBTVEFDS19DSEVDS19NT1ZJTkdf U1AKLSNkZWZpbmUgU1RBQ0tfQ0hFQ0tfTU9WSU5HX1NQIDAKKyNkZWZpbmUg U1RBQ0tfQ0hFQ0tfTU9WSU5HX1NQXAorICAoZmxhZ19zdGFja19jaGVjayA9 PSBTVEFDS19DTEFTSF9CVUlMVElOX1NUQUNLX0NIRUNLKQogI2VuZGlmCiAK IC8qIFRoaXMgaXMgYSBrbHVkZ2UgdG8gdHJ5IHRvIGNhcHR1cmUgdGhlIGRp c2NyZXBhbmN5IGJldHdlZW4gdGhlIG9sZApkaWZmIC0tZ2l0IGEvZ2NjL2V4 cGxvdy5jIGIvZ2NjL2V4cGxvdy5jCmluZGV4IDUwMDc0ZTIuLmJmYTIxYmQg MTAwNjQ0Ci0tLSBhL2djYy9leHBsb3cuYworKysgYi9nY2MvZXhwbG93LmMK QEAgLTQyLDYgKzQyLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmls ZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJvdXRwdXQuaCIK IAogc3RhdGljIHJ0eCBicmVha19vdXRfbWVtb3J5X3JlZnMgKHJ0eCk7Citz dGF0aWMgdm9pZCBhbnRpX2FkanVzdF9zdGFja19hbmRfcHJvYmVfc3RhY2tf Y2xhc2ggKHJ0eCk7CiAKIAogLyogVHJ1bmNhdGUgYW5kIHBlcmhhcHMgc2ln bi1leHRlbmQgQyBhcyBhcHByb3ByaWF0ZSBmb3IgTU9ERS4gICovCkBAIC0x MjcyLDYgKzEyNzMsMjUgQEAgZ2V0X2R5bmFtaWNfc3RhY2tfc2l6ZSAocnR4 ICpwc2l6ZSwgdW5zaWduZWQgc2l6ZV9hbGlnbiwKICAgKnBzaXplID0gc2l6 ZTsKIH0KIAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcHJv dGVjdCBvbiB0aGUgc3RhY2sgZm9yIC1mc3RhY2stY2hlY2suCisKKyAgIFRo ZSBkZWZhdWx0IGlzIHRvIHByb3RlY3QgU1RBQ0tfQ0hFQ0tfUFJPVEVDVCBi eXRlcyB3aGljaCBzaG91bGQgYmUKKyAgIGVub3VnaCB0byBoYW5kbGUgYSBz aWduYWwuCisKKyAgIFdoZW4gbWl0aWdhdGluZyBzdGFjayBjbGFzaCBzdHls ZSBhdHRhY2tzIHdlIGRvIG5vdCBzYXZlIGVub3VnaAorICAgc3BhY2UgdG8g aGFuZGxlIGEgc2lnbmFsLCBzbyB3ZSBwcm90ZWN0IHplcm8gYnl0ZXMuCisK KyAgIFRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBk ZXRlcm1pbmVzIGJvdGggaG93IGZhciBiZXlvbmQKKyAgIGN1cnJlbnQgbmVl ZCB3ZSBwcm9iZSB0aGUgc3RhY2sgYW5kIGl0IGRldGVybWluZXMgaG93IG1h bnkgYnl0ZXMgYXJlCisgICBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVu IGNoZWNrZWQgYnkgcHJpb3IgY2FsbGVycyBpbiB0aGUgY2FsbCBjaGFpbi4g ICovCitIT1NUX1dJREVfSU5UCitnZXRfc3RhY2tfY2hlY2tfcHJvdGVjdCAo dm9pZCkKK3sKKyAgaWYgKGZsYWdfc3RhY2tfY2hlY2sgPT0gU1RBQ0tfQ0xB U0hfQlVJTFRJTl9TVEFDS19DSEVDSykKKyAgICByZXR1cm4gMDsKKyByZXR1 cm4gU1RBQ0tfQ0hFQ0tfUFJPVEVDVDsKK30KKwogLyogUmV0dXJuIGFuIHJ0 eCByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gYXJlYSBvZiBtZW1v cnkgZHluYW1pY2FsbHkKICAgIHB1c2hlZCBvbiB0aGUgc3RhY2suCiAKQEAg LTE0MzAsNyArMTQ1MCw3IEBAIGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3Bh Y2UgKHJ0eCBzaXplLCB1bnNpZ25lZCBzaXplX2FsaWduLAogICAgIHByb2Jl X3N0YWNrX3JhbmdlIChTVEFDS19PTERfQ0hFQ0tfUFJPVEVDVCArIFNUQUNL X0NIRUNLX01BWF9GUkFNRV9TSVpFLAogCQkgICAgICAgc2l6ZSk7CiAgIGVs c2UgaWYgKGZsYWdfc3RhY2tfY2hlY2sgPT0gU1RBVElDX0JVSUxUSU5fU1RB Q0tfQ0hFQ0spCi0gICAgcHJvYmVfc3RhY2tfcmFuZ2UgKFNUQUNLX0NIRUNL X1BST1RFQ1QsIHNpemUpOworICAgIHByb2JlX3N0YWNrX3JhbmdlIChnZXRf c3RhY2tfY2hlY2tfcHJvdGVjdCAoKSwgc2l6ZSk7CiAKICAgLyogRG9uJ3Qg bGV0IGFudGlfYWRqdXN0X3N0YWNrIGVtaXQgbm90ZXMuICAqLwogICBzdXBw cmVzc19yZWdfYXJnc19zaXplID0gdHJ1ZTsKQEAgLTE0ODIsNyArMTUwMiwx MiBAQCBhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlIChydHggc2l6ZSwg dW5zaWduZWQgc2l6ZV9hbGlnbiwKICAgICAgIHNhdmVkX3N0YWNrX3BvaW50 ZXJfZGVsdGEgPSBzdGFja19wb2ludGVyX2RlbHRhOwogCiAgICAgICBpZiAo ZmxhZ19zdGFja19jaGVjayAmJiBTVEFDS19DSEVDS19NT1ZJTkdfU1ApCi0J YW50aV9hZGp1c3Rfc3RhY2tfYW5kX3Byb2JlIChzaXplLCBmYWxzZSk7CisJ eworCSAgaWYgKGZsYWdfc3RhY2tfY2hlY2sgPT0gU1RBQ0tfQ0xBU0hfQlVJ TFRJTl9TVEFDS19DSEVDSykKKwkgICAgYW50aV9hZGp1c3Rfc3RhY2tfYW5k X3Byb2JlX3N0YWNrX2NsYXNoIChzaXplKTsKKwkgIGVsc2UKKwkgICAgYW50 aV9hZGp1c3Rfc3RhY2tfYW5kX3Byb2JlIChzaXplLCBmYWxzZSk7CisJfQog ICAgICAgZWxzZQogCWFudGlfYWRqdXN0X3N0YWNrIChzaXplKTsKIApAQCAt MTc2MCw2ICsxNzg1LDEyNiBAQCBwcm9iZV9zdGFja19yYW5nZSAoSE9TVF9X SURFX0lOVCBmaXJzdCwgcnR4IHNpemUpCiAKIC8qIEFkanVzdCB0aGUgc3Rh Y2sgcG9pbnRlciBieSBtaW51cyBTSVpFIChhbiBydHggZm9yIGEgbnVtYmVy IG9mIGJ5dGVzKQogICAgd2hpbGUgcHJvYmluZyBpdC4gIFRoaXMgcHVzaGVz IHdoZW4gU0laRSBpcyBwb3NpdGl2ZS4gIFNJWkUgbmVlZCBub3QKKyAgIGJl IGNvbnN0YW50LgorCisgICBUaGlzIGlzIHN1YnRseSBkaWZmZXJlbnQgdGhh biBhbnRpX2FkanVzdF9zdGFja19hbmRfcHJvYmUgdG8gdHJ5IGFuZAorICAg cHJldmVudCBhdHRhY2tzIHRoYXQganVtcCB0aGUgc3RhY2sgZ3VhcmQuCisK KyAgICAgMS4gSXQgYXNzdW1lcyB0aGUgcHJvbG9ndWUgZGlkIG5vdCBwcm9i ZSBhbnkgcmVzaWR1YWwgc3RhY2sgYWxsb2NhdGlvbiwKKwlUaHVzIHRoZSBz dGFjayBwb2ludGVyIGNvdWxkIGN1cnJlbnRseSBiZSBpbiB0aGUgZ3VhcmQg cGFnZSBhbmQgaWYKKwl0aGlzIGNhbGwgcmVzdWx0cyBpbiBhbnkgYWxsb2Nh dGlvbiwgaXQgbXVzdCBiZSBwcm9iZWQuCisKKyAgICAgMi4gSXQgbmV2ZXIg c2tpcHMgcHJvYmVzLCB3aGVyZWFzIGFudGlfYWRqdXN0X3N0YWNrX2FuZF9w cm9iZSB3aWxsCisJc2tpcCBwcm9iZXMgb24gdGhlIGZpcnN0IGNvdXBsZSBQ Uk9CRV9JTlRFUlZBTHMgb24gdGhlIGFzc3VtcHRpb24KKwl0aGV5J3JlIGRv bmUgZWxzZXdoZXJlLgorCisgICAgIDMuIEl0IG9ubHkgYWxsb2NhdGVzIGFu ZCBwcm9iZXMgU0laRSBieXRlcywgaXQgZG9lcyBub3QgbmVlZCB0bworCWFs bG9jYXRlL3Byb2JlIGJleW9uZCB0aGF0IGJlY2F1c2UgdGhpcyBwcm9iaW5n IHN0eWxlIGRvZXMgbm90CisJZ3VhcmFudGVlIHNpZ25hbCBoYW5kbGluZyBj YXBhYmlsaXR5IGlmIHRoZSBndWFyZCBpcyBoaXQuCisKKyAgICAgNC4gSXQg ZG9lcyBub3QgYm90aGVyIGhhbmRsaW5nIGNvbnN0YW50IGFsbG9jYXRpb25z LiAgVGhleSBkbyBub3QKKwloYXBwZW4gaW4gcHJhY3RpY2UgaGVyZS4gICov CisKK3N0YXRpYyB2b2lkCithbnRpX2FkanVzdF9zdGFja19hbmRfcHJvYmVf c3RhY2tfY2xhc2ggKHJ0eCBzaXplKQoreworICAvKiBGaXJzdCBlbnN1cmUg U0laRSBpcyBQbW9kZS4gICovCisgIGlmIChHRVRfTU9ERSAoc2l6ZSkgIT0g Vk9JRG1vZGUgJiYgR0VUX01PREUgKHNpemUpICE9IFBtb2RlKQorICAgIHNp emUgPSBjb252ZXJ0X3RvX21vZGUgKFBtb2RlLCBzaXplLCAxKTsKKworICAv KiBXZSBjYW4gZ2V0IGhlcmUgd2l0aCBhIGNvbnN0YW50IHNpemUgb24gc29t ZSB0YXJnZXRzLiAgQnV0IGl0IGlzIG5vdAorICAgICB3b3J0aCBoYXZpbmcg cGF0aHMgZm9yIHNtYWxsLCBtZWRpdW0gYW5kIGxhcmdlIGFsbG9jYXRpb25z LgorCisgICAgIFdlIGRldGVjdCB0aGUgY2FzZXMgd2hlcmUgd2UgY2FuIGF2 b2lkIHRoZSBsb29wIGVudGlyZWx5IG9yIGF2b2lkIHRoZQorICAgICByZXNp ZHVhbHMgZW50aXJlbHkuICAqLworCisgIC8qIFN0ZXAgMTogcm91bmQgU0la RSB0byB0aGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgdGhlIGludGVydmFsLiAg Ki8KKworICAvKiBST1VOREVEX1NJWkUgPSBTSVpFICYgLVBST0JFX0lOVEVS VkFMICAqLworICBydHggcm91bmRlZF9zaXplCisgICAgPSBzaW1wbGlmeV9n ZW5fYmluYXJ5IChBTkQsIFBtb2RlLCBzaXplLCBHRU5fSU5UICgtUFJPQkVf SU5URVJWQUwpKTsKKyAgcnR4IHJvdW5kZWRfc2l6ZV9vcCA9IGZvcmNlX29w ZXJhbmQgKHJvdW5kZWRfc2l6ZSwgTlVMTF9SVFgpOworCisgIGlmIChyb3Vu ZGVkX3NpemUgIT0gQ09OU1QwX1JUWCAoUG1vZGUpKQorICAgIHsKKworICAg ICAgLyogU3RlcCAyOiBjb21wdXRlIGZpbmFsIHZhbHVlIG9mIHRoZSBsb29w IGNvdW50ZXIuICAqLworCisgICAgICAvKiBMQVNUX0FERFIgPSBTUCArIFJP VU5ERURfU0laRS4gICovCisgICAgICBydHggbGFzdF9hZGRyID0gZm9yY2Vf b3BlcmFuZCAoZ2VuX3J0eF9mbXRfZWUgKFNUQUNLX0dST1dfT1AsIFBtb2Rl LAorCQkJCQkJICAgICBzdGFja19wb2ludGVyX3J0eCwKKwkJCQkJCSAgICAg cm91bmRlZF9zaXplX29wKSwKKwkJCQkgICAgIE5VTExfUlRYKTsKKworCisg ICAgICAvKiBTdGVwIDM6IHRoZSBsb29wCisKKyAgICAgICAgIHdoaWxlIChT UCAhPSBMQVNUX0FERFIpCisJICAgeworCSAgICAgU1AgPSBTUCArIFBST0JF X0lOVEVSVkFMCisJICAgICBwcm9iZSBhdCBTUCAtIFBST0JFX0lOVEVSVkFM ICsgc21hbGwgY29uc3RhbnQKKyAgICAgICAgICAgfQorCisJIGFkanVzdHMg U1AgYW5kIHByb2JlcyBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3BhY2Ug YXMgY2xvc2VseQorCSB0byB0aGUgb3JpZ2luYWwgU1AgYXMgcG9zc2libGUs IGl0ZXJhdGluZyB1bnRpbCBMQVNUX0FERFIgaXMgaGl0LiAgKi8KKworICAg ICAgcnR4IGxvb3BfbGFiID0gZ2VuX2xhYmVsX3J0eCAoKTsKKyAgICAgIHJ0 eCBlbmRfbGFiID0gZ2VuX2xhYmVsX3J0eCAoKTsKKworICAgICAgZW1pdF9s YWJlbCAobG9vcF9sYWIpOworCisgICAgICAvKiBKdW1wIHRvIEVORF9MQUIg aWYgU1AgPT0gTEFTVF9BRERSLiAgKi8KKyAgICAgIGVtaXRfY21wX2FuZF9q dW1wX2luc25zIChzdGFja19wb2ludGVyX3J0eCwgbGFzdF9hZGRyLCBFUSwg TlVMTF9SVFgsCisJCQkgICAgICAgUG1vZGUsIDEsIGVuZF9sYWIpOworCisg ICAgICAvKiBTUCA9IFNQICsgUFJPQkVfSU5URVJWQUwgYW5kIHByb2JlIGF0 IFNQLiAgKi8KKyAgICAgIGFudGlfYWRqdXN0X3N0YWNrIChHRU5fSU5UIChQ Uk9CRV9JTlRFUlZBTCkpOworCisgICAgICAvKiBUaGUgcHJvbG9ndWUgZG9l cyBub3QgcHJvYmUgcmVzaWR1YWxzLiAgVGh1cyB0aGUgb2Zmc2V0IGhlcmUK KwkgdG8gcHJvYmUganVzdCBiZXlvbmQgd2hhdCB0aGUgcHJvbG9ndWUgaGFk IGFscmVhZHkgYWxsb2NhdGVkLiAgKi8KKyAgICAgIGVtaXRfc3RhY2tfcHJv YmUgKHBsdXNfY29uc3RhbnQgKFBtb2RlLCBzdGFja19wb2ludGVyX3J0eCwK KwkJCQkgICAgICAgKFBST0JFX0lOVEVSVkFMCisJCQkJCS0gR0VUX01PREVf U0laRSAod29yZF9tb2RlKSkpKTsKKworICAgICAgZW1pdF9qdW1wIChsb29w X2xhYik7CisKKyAgICAgIGVtaXRfbGFiZWwgKGVuZF9sYWIpOworCisgICAg ICAvKiBUaGlzIGlzIHByaW1hcmlseSB0byBtYWtlIHdyaXRpbmcgdGVzdHMg ZWFzeS4gICovCisgICAgICBpZiAoZHVtcF9maWxlKQorCWZwcmludGYgKGR1 bXBfZmlsZSwKKwkJICJTdGFjayBjbGFzaCBkeW5hbWljIGFsbG9jYXRpb24g YW5kIHByb2JpbmcgaW4gbG9vcC5cbiIpOworICAgIH0KKyAgZWxzZSBpZiAo ZHVtcF9maWxlKQorICAgIGZwcmludGYgKGR1bXBfZmlsZSwKKwkgICAgICJT dGFjayBjbGFzaCBza2lwcGVkIGR5bmFtaWMgYWxsb2NhdGlvbiAiCisJICAg ICAiYW5kIHByb2JpbmcgbG9vcC5cbiIpOworCisgIC8qIFN0ZXAgNDogYWRq dXN0IFNQIGlmIHdlIGNhbm5vdCBhc3NlcnQgYXQgY29tcGlsZS10aW1lIHRo YXQKKyAgICAgU0laRSBpcyBlcXVhbCB0byBST1VOREVEX1NJWkUuICAqLwor CisgIC8qIFRFTVAgPSBTSVpFIC0gUk9VTkRFRF9TSVpFLiAgKi8KKyAgcnR4 IHRlbXAgPSBzaW1wbGlmeV9nZW5fYmluYXJ5IChNSU5VUywgUG1vZGUsIHNp emUsIHJvdW5kZWRfc2l6ZSk7CisgIGlmICh0ZW1wICE9IGNvbnN0MF9ydHgp CisgICAgeworICAgICAgLyogTWFudWFsIENTRSBpZiB0aGUgZGlmZmVyZW5j ZSBpcyBub3Qga25vd24gYXQgY29tcGlsZS10aW1lLiAgKi8KKyAgICAgIGlm IChHRVRfQ09ERSAodGVtcCkgIT0gQ09OU1RfSU5UKQorCXRlbXAgPSBnZW5f cnR4X01JTlVTIChQbW9kZSwgc2l6ZSwgcm91bmRlZF9zaXplX29wKTsKKyAg ICAgIGFudGlfYWRqdXN0X3N0YWNrICh0ZW1wKTsKKyAgICAgIHJ0eCB4ID0g Zm9yY2VfcmVnIChQbW9kZSwgcGx1c19jb25zdGFudCAoUG1vZGUsIHRlbXAs CisJCQkJCSAgICAgICAtR0VUX01PREVfU0laRSAod29yZF9tb2RlKSkpOwor ICAgICAgZW1pdF9zdGFja19wcm9iZSAoZ2VuX3J0eF9QTFVTIChQbW9kZSwg c3RhY2tfcG9pbnRlcl9ydHgsIHgpKTsKKworICAgICAgLyogVGhpcyBpcyBw cmltYXJpbHkgdG8gbWFrZSB3cml0aW5nIHRlc3RzIGVhc3kuICAqLworICAg ICAgaWYgKGR1bXBfZmlsZSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsCisJCSAi U3RhY2sgY2xhc2ggZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBwcm9iaW5nIHJl c2lkdWFscy5cbiIpOworICAgIH0KK30KKworCisvKiBBZGp1c3QgdGhlIHN0 YWNrIHBvaW50ZXIgYnkgbWludXMgU0laRSAoYW4gcnR4IGZvciBhIG51bWJl ciBvZiBieXRlcykKKyAgIHdoaWxlIHByb2JpbmcgaXQuICBUaGlzIHB1c2hl cyB3aGVuIFNJWkUgaXMgcG9zaXRpdmUuICBTSVpFIG5lZWQgbm90CiAgICBi ZSBjb25zdGFudC4gIElmIEFESlVTVF9CQUNLIGlzIHRydWUsIGFkanVzdCBi YWNrIHRoZSBzdGFjayBwb2ludGVyCiAgICBieSBwbHVzIFNJWkUgYXQgdGhl IGVuZC4gICovCiAKZGlmZiAtLWdpdCBhL2djYy9ydGwuaCBiL2djYy9ydGwu aAppbmRleCA1OWRhOTk1Li4yNDI0MGZjIDEwMDY0NAotLS0gYS9nY2MvcnRs LmgKKysrIGIvZ2NjL3J0bC5oCkBAIC0yNzAzLDYgKzI3MDMsNyBAQCBnZXRf ZnVsbF9zZXRfc3JjX2Nvc3QgKHJ0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwg c3RydWN0IGZ1bGxfcnR4X2Nvc3RzICpjKQogLyogSW4gZXhwbG93LmMgKi8K IGV4dGVybiBIT1NUX1dJREVfSU5UIHRydW5jX2ludF9mb3JfbW9kZQkoSE9T VF9XSURFX0lOVCwgbWFjaGluZV9tb2RlKTsKIGV4dGVybiBydHggcGx1c19j b25zdGFudCAobWFjaGluZV9tb2RlLCBydHgsIEhPU1RfV0lERV9JTlQsIGJv b2wgPSBmYWxzZSk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBnZXRfc3RhY2tf Y2hlY2tfcHJvdGVjdCAodm9pZCk7CiAKIC8qIEluIHJ0bC5jICovCiBleHRl cm4gcnR4IHJ0eF9hbGxvY19zdGF0IChSVFhfQ09ERSBNRU1fU1RBVF9ERUNM KTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3N0YWNrLWNo ZWNrLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3N0YWNrLWNoZWNrLTMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQ1ZGIy Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3Rh Y2stY2hlY2stMy5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qIFRoZSBnb2FsIGhl cmUgaXMgdG8gZW5zdXJlIHRoYXQgZHluYW1pYyBhbGxvY2F0aW9ucyB2aWEg dmxhcyBvcgorICAgYWxsb2NhIGNhbGxzIHJlY2VpdmUgcHJvYmluZy4KKwor ICAgU2Nhbm5pbmcgdGhlIFJUTCBvciBhc3NlbWJseSBjb2RlIHNlZW1zIGxp a2UgaW5zYW5pdHkgaGVyZSBhcyBkb2VzCisgICBjaGVja2luZyBmb3IgcGFy dGljdWxhciBhbGxvY2F0aW9uIHNpemVzIGFuZCBwcm9iZSBvZmZzZXRzLiAg Rm9yCisgICBub3cgd2UganVzdCB2ZXJpZnkgdGhhdCB0aGVyZSdzIGFuIGFs bG9jYXRpb24gKyBwcm9iZSBsb29wIGFuZAorICAgcmVzaWR1YWwgYWxsb2Nh dGlvbiArIHByb2JlIGZvciBmPy4gICovCisKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZnN0YWNrLWNoZWNrPWNs YXNoIC1mZHVtcC1ydGwtZXhwYW5kIC1mbm8tb3B0aW1pemUtc2libGluZy1j YWxscyIgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg c3RhY2tfY2xhc2hfcHJvdGVjdGVkIH0gKi8KKworX19hdHRyaWJ1dGVfXygo bm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lkCitmb28gKGNoYXIgKnApCit7Cisg IGFzbSB2b2xhdGlsZSAoIiIgOiA6ICJyIiAocCkgOiAibWVtb3J5Iik7Cit9 CisKKy8qIFNpbXBsZSBWTEEsIG5vIG90aGVyIGxvY2Fscy4gKi8KK19fYXR0 cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkgdm9pZAorZjAgKGludCB4 KQoreworICBjaGFyIHZsYVt4XTsKKyAgZm9vICh2bGEpOworfQorCisvKiBT aW1wbGUgVkxBLCBzbWFsbCBsb2NhbCBmcmFtZS4gICovCitfX2F0dHJpYnV0 ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YxIChpbnQgeCkKK3sK KyAgY2hhciBsb2NhbHNbMTI4XTsKKyAgY2hhciB2bGFbeF07CisgIGZvbyAo dmxhKTsKK30KKworLyogU21hbGwgY29uc3RhbnQgYWxsb2NhLCBubyBvdGhl ciBsb2NhbHMuICovCitfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9u ZSkpIHZvaWQKK2YyIChpbnQgeCkKK3sKKyAgY2hhciAqdmxhID0gX19idWls dGluX2FsbG9jYSAoMTI4KTsKKyAgZm9vICh2bGEpOworfQorCisvKiBCaWcg Y29uc3RhbnQgYWxsb2NhLCBzbWFsbCBsb2NhbCBmcmFtZS4gICovCitfX2F0 dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpIHZvaWQKK2YzIChpbnQg eCkKK3sKKyAgY2hhciBsb2NhbHNbMTI4XTsKKyAgY2hhciAqdmxhID0gX19i dWlsdGluX2FsbG9jYSAoMTYzODQpOworICBmb28gKHZsYSk7Cit9CisKKy8q IE5vbmNvbnN0YW50IGFsbG9jYSwgbm8gb3RoZXIgbG9jYWxzLiAqLworX19h dHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKSB2b2lkCitmNCAoaW50 IHgpCit7CisgIGNoYXIgKnZsYSA9IF9fYnVpbHRpbl9hbGxvY2EgKHgpOwor ICBmb28gKHZsYSk7Cit9CisKKy8qIE5vbmNvbnN0YW50IGFsbG9jYSwgc21h bGwgbG9jYWwgZnJhbWUuICAqLworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUs IG5vY2xvbmUpKSB2b2lkCitmNSAoaW50IHgpCit7CisgIGNoYXIgbG9jYWxz WzEyOF07CisgIGNoYXIgKnZsYSA9IF9fYnVpbHRpbl9hbGxvY2EgKHgpOwor ICBmb28gKHZsYSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1k dW1wLXRpbWVzICJhbGxvY2F0aW9uIGFuZCBwcm9iaW5nIHJlc2lkdWFscyIg NiAiZXhwYW5kIiB9IH0gKi8KKworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1y dGwtZHVtcC10aW1lcyAiYWxsb2NhdGlvbiBhbmQgcHJvYmluZyBpbiBsb29w IiA2ICJleHBhbmQiIHsgdGFyZ2V0IGNhbGxlZV9yZWFsaWduc19zdGFjayB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tcnRsLWR1bXAtdGltZXMg ImFsbG9jYXRpb24gYW5kIHByb2JpbmcgaW4gbG9vcCIgNSAiZXhwYW5kIiB7 IHRhcmdldCB7ICEgY2FsbGVlX3JlYWxpZ25zX3N0YWNrIH0gfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICJza2lwcGVk IGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcHJvYmluZyBsb29wIiAxICJleHBh bmQiIHsgdGFyZ2V0IHsgISBjYWxsZWVfcmVhbGlnbnNfc3RhY2sgfSB9IH0g fSAqLwo= --------------84643569555CC2F9891CB42B--