From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16270 invoked by alias); 15 Apr 2014 19:06:03 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 16178 invoked by uid 89); 15 Apr 2014 19:06:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.7 required=5.0 tests=AWL,BAYES_50,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-we0-f176.google.com Received: from mail-we0-f176.google.com (HELO mail-we0-f176.google.com) (74.125.82.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 15 Apr 2014 19:05:57 +0000 Received: by mail-we0-f176.google.com with SMTP id x48so9674513wes.7 for ; Tue, 15 Apr 2014 12:05:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=jSVfZqEf1IdVncqWS48aE1qR0PVYM82pRLMDqDue/4s=; b=VMH/OH4pHQ1A9fkCgPbyTIV4/HHhvEZV2AQz2XkQMzoR6dAHE3A6SKw+OHfKoBELtm UURXVL72HxtE/5eHsXjO6x4fvnVu9ZJ5DgtumoPBZkjsOiCRotdfXVyLKBXxSHXMh74O bCpALnq5B5cOW94irWCAZGMEDzc70pZlBsxKxUyMBJH1USQxJ2DB+B5XNHDPFRl/PNvs plyaeCqGQNvbsIRg9BolusKE92rlitG6FvulXKnsZnOPSxlEx6SsBVpH2cs4G5ausQQ+ Q4Gr9Rhfjw+y8fgbpz4Bcb06OWiTFJ0OrZPsUynGqKJM4X93wrjnr3WGxufiHLzXMDm7 g88Q== X-Gm-Message-State: ALoCoQljck+ochJlk1cFir3jWr1xvtqKMGUhMh72y4PhWkiY4ute+0hWRfZiRQG80VHPy7xqDY4Rh+1QmB9m3GYVgzR1gqGEIOYXOSFP6rYBf70ideLMfkxBI8Xq31efIxvvcBU7CPzG9fFOFHJMv5l6kNtWrTf1hEl4sj1AtSi/BYl5QFZAtLFMB2RdMal07+H9islXt9aXdaz83Du1W2FZwQC2KOhDdQ== MIME-Version: 1.0 X-Received: by 10.194.9.8 with SMTP id v8mr2984181wja.53.1397588753781; Tue, 15 Apr 2014 12:05:53 -0700 (PDT) Received: by 10.217.51.7 with HTTP; Tue, 15 Apr 2014 12:05:53 -0700 (PDT) Date: Tue, 15 Apr 2014 19:06:00 -0000 Message-ID: Subject: [PATCH v14 3/4] Add support for lookup, overload resolution and invocation of C++ debug methods From: Siva Chandra To: gdb-patches Content-Type: multipart/mixed; boundary=047d7b5d896536560704f7197d84 X-IsSubscribed: yes X-SW-Source: 2014-04/txt/msg00304.txt.bz2 --047d7b5d896536560704f7197d84 Content-Type: text/plain; charset=UTF-8 Content-length: 3283 Attached is the v14 of this part of the patch series. This version addresses a concern raised by Doug during his v12/v13 review. v13 posting: https://sourceware.org/ml/gdb-patches/2014-04/msg00147.html Doug's comment: https://sourceware.org/ml/gdb-patches/2014-04/msg00229.html Doug's example: class base { public: virtual int foo (char x) { return x + 1; } }; class derived : public base { public: int foo (char x) { return x + 2; } int foo (int x) { return x + 3; } }; base* ptr = new derived; Doug's concern: Suppose we have a debug method for derived::foo (int) and none for base::foo(char) or derived::foo(char). If I do "p ptr->foo (3)" in gdb, which method (c++ or debug) should be invoked? I think, since the invocation happens via the vtable, the foo (char) version of the derived class should be invoked. My v12/v13 would have got it wrong. When we do "p ptr->foo(3)", the number 3 is interpreted to be an int. Consequently, when we perform an overload resolution on the derived type, GDB would have picked the foo (int) version. To avoid this, in the attached v14, I have modified to do this: When (recursively) calling find_overload_match on the dynamic type object, cast the matching virtual function arguments to the function's param types explicitly. This way, when overload resolution is performed on the derived type, the correct function is selected. Doug's example also made me think of method hiding. If in the same example above, the derived class did not have foo (char) overridden, then its foo (int) version hides the base class foo (char) method. In such cases, we should not look for matching debug methods on the dynamic type. The attached v14 addresses this also. 2014-04-15 Siva Chandra Reddy * eval.c: #include "extension.h". (evaluate_subexp_standard): Lookup and invoke C++ methods defined in extension languages. * valarith.c: #include "extension.h". (value_user_defined_cpp_op): Add "src_fn" and "dm_worker" arguments. Return void. A source match is returned in "src_fn", and a debug method match is returned in "dm_worker". (value_user_defined_op): Likewise. (value_x_binop, value_x_unop): Lookup and invoke overloaded operator methods defined in extension languages. * valops.c: #include "extension.h". (find_method_list): Add "fn_list" and "dm_worker_vec" arguments. Return void. The list of matching source methods is returned in "fn_list" and a vector of matching debug method workers is returned in "dm_worker_vec". (value_find_oload_method_list): Likewise. (find_overload_match): Add "dm_worker" parameter. If the best method match is a debug method, then it is returned in "dm_worker". All callers updated. (find_oload_champ): Add "dm_worker_vec" argument. If a caller wants to find the champion among a set of debug methods, then it has to pass the debug methods in "dm_worker_vec". All callers updated. (value_has_indirect_dynamic_type, cast_args_to_param_types, equal_param_types_p, derived_hides_base_method): New functions. * value.h (find_overload_match): Update signature. --047d7b5d896536560704f7197d84 Content-Type: text/plain; charset=US-ASCII; name="dm_cpp_v14.txt" Content-Disposition: attachment; filename="dm_cpp_v14.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hu1k0tvi0 Content-length: 51533 ZGlmZiAtLWdpdCBhL2dkYi9ldmFsLmMgYi9nZGIvZXZhbC5jCmluZGV4IDNl NjJlYWQuLmRhZDExMDEgMTAwNjQ0Ci0tLSBhL2dkYi9ldmFsLmMKKysrIGIv Z2RiL2V2YWwuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgInN5bXRh Yi5oIgogI2luY2x1ZGUgImdkYnR5cGVzLmgiCiAjaW5jbHVkZSAidmFsdWUu aCIKKyNpbmNsdWRlICJleHRlbnNpb24uaCIKICNpbmNsdWRlICJleHByZXNz aW9uLmgiCiAjaW5jbHVkZSAidGFyZ2V0LmgiCiAjaW5jbHVkZSAiZnJhbWUu aCIKQEAgLTE1OTIsMTEgKzE1OTMsMTEgQEAgZXZhbHVhdGVfc3ViZXhwX3N0 YW5kYXJkIChzdHJ1Y3QgdHlwZSAqZXhwZWN0X3R5cGUsCiAgICAgICAgICAg ZnVuY19uYW1lID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIDEpOwog ICAgICAgICAgIHN0cmNweSAoZnVuY19uYW1lLCAmZXhwLT5lbHRzW3N0cmlu Z19wYyArIDFdLnN0cmluZyk7CiAKLSAgICAgICAgICBmaW5kX292ZXJsb2Fk X21hdGNoICgmYXJndmVjWzFdLCBuYXJncywgZnVuY19uYW1lLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9NRVRIT0QsIC8qIG5vdCBt ZXRob2QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBOVUxMLCAvKiBwYXNzIE5VTEwgc3ltYm9sIHNpbmNlCisJICBmaW5kX292 ZXJsb2FkX21hdGNoICgmYXJndmVjWzFdLCBuYXJncywgZnVuY19uYW1lLAor CQkJICAgICAgIE5PTl9NRVRIT0QsIC8qIG5vdCBtZXRob2QgKi8KKwkJCSAg ICAgICBOVUxMLCBOVUxMLCAvKiBwYXNzIE5VTEwgc3ltYm9sIHNpbmNlCiAJ CQkJCSAgICAgIHN5bWJvbCBpcyB1bmtub3duICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgJnN5bXAsIE5VTEwsIDApOworCQkJ ICAgICAgIE5VTEwsICZzeW1wLCBOVUxMLCBOVUxMLCAwKTsKIAogICAgICAg ICAgIC8qIE5vdyBmaXggdGhlIGV4cHJlc3Npb24gYmVpbmcgZXZhbHVhdGVk LiAgKi8KICAgICAgICAgICBleHAtPmVsdHNbc2F2ZV9wb3MxICsgMl0uc3lt Ym9sID0gc3ltcDsKQEAgLTE2MjYsMTEgKzE2MjcsMTIgQEAgZXZhbHVhdGVf c3ViZXhwX3N0YW5kYXJkIChzdHJ1Y3QgdHlwZSAqZXhwZWN0X3R5cGUsCiAJ ICAgICAgLyogTGFuZ3VhZ2UgaXMgQysrLCBkbyBzb21lIG92ZXJsb2FkIHJl c29sdXRpb24gYmVmb3JlCiAJCSBldmFsdWF0aW9uLiAgKi8KIAkgICAgICBz dHJ1Y3QgdmFsdWUgKnZhbHAgPSBOVUxMOworCSAgICAgIHN0cnVjdCBkZWJ1 Z19tZXRob2Rfd29ya2VyICpkbV93b3JrZXIgPSBOVUxMOwogCiAJICAgICAg KHZvaWQpIGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKCZhcmd2ZWNbMV0sIG5hcmdz LCB0c3RyLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN RVRIT0QsIC8qIG1ldGhvZCAqLworCQkJCQkgIE1FVEhPRCwgLyogbWV0aG9k ICovCiAJCQkJCSAgJmFyZzIsICAvKiB0aGUgb2JqZWN0ICovCi0JCQkJCSAg TlVMTCwgJnZhbHAsIE5VTEwsCisJCQkJCSAgTlVMTCwgJnZhbHAsIE5VTEws ICZkbV93b3JrZXIsCiAJCQkJCSAgJnN0YXRpY19tZW1mdW5jcCwgMCk7CiAK IAkgICAgICBpZiAob3AgPT0gT1BfU0NPUEUgJiYgIXN0YXRpY19tZW1mdW5j cCkKQEAgLTE2NDAsOCArMTY0MiwyNCBAQCBldmFsdWF0ZV9zdWJleHBfc3Rh bmRhcmQgKHN0cnVjdCB0eXBlICpleHBlY3RfdHlwZSwKIAkJCSAgICJgdGhp cycgcG9pbnRlciIpLAogCQkJIGZ1bmN0aW9uX25hbWUpOwogCQl9Ci0JICAg ICAgYXJndmVjWzFdID0gYXJnMjsJLyogdGhlIGBgdGhpcycnIHBvaW50ZXIg Ki8KLQkgICAgICBhcmd2ZWNbMF0gPSB2YWxwOwkvKiBVc2UgdGhlIG1ldGhv ZCBmb3VuZCBhZnRlciBvdmVybG9hZAorCisJICAgICAgLyogSWYgYSBtZXRo b2QgaW1wbGVtZW50ZWQgaW4gYW4gZXh0ZW5zaW9uIGxhbmd1YWdlIGlzIHRo ZSBiZXN0CisJCSBtYXRjaCwgdGhlbiBpbnZva2UgaXQuICAqLworCSAgICAg IGlmIChkbV93b3JrZXIgIT0gTlVMTCkKKwkJeworCQkgIHN0cnVjdCB2YWx1 ZSAqcmV0X3ZhbDsKKwkJICBzdHJ1Y3QgY2xlYW51cCAqZG1fd29ya2VyX2Ns ZWFudXA7CisKKwkJICBkbV93b3JrZXJfY2xlYW51cCA9IG1ha2VfY2xlYW51 cCAoeGZyZWUsIGRtX3dvcmtlcik7CisJCSAgcmV0X3ZhbCA9IGludm9rZV9k ZWJ1Z19tZXRob2QgKGRtX3dvcmtlciwgYXJnMiwgYXJndmVjICsgMiwKKwkJ CQkJCSBuYXJncyAtIDEpOworCQkgIGRvX2NsZWFudXBzIChkbV93b3JrZXJf Y2xlYW51cCk7CisKKwkJICByZXR1cm4gcmV0X3ZhbDsKKwkJfQorCisJICAg ICAgYXJndmVjWzFdID0gYXJnMjsgLyogdGhlIGBgdGhpcycnIHBvaW50ZXIg Ki8KKwkgICAgICBhcmd2ZWNbMF0gPSB2YWxwOyAvKiBVc2UgdGhlIG1ldGhv ZCBmb3VuZCBhZnRlciBvdmVybG9hZAogCQkJCSAgIHJlc29sdXRpb24uICAq LwogCSAgICB9CiAJICBlbHNlCkBAIC0xNjk5LDkgKzE3MTcsOSBAQCBldmFs dWF0ZV9zdWJleHBfc3RhbmRhcmQgKHN0cnVjdCB0eXBlICpleHBlY3RfdHlw ZSwKIAogCSAgICAgICh2b2lkKSBmaW5kX292ZXJsb2FkX21hdGNoICgmYXJn dmVjWzFdLCBuYXJncywKIAkJCQkJICBOVUxMLCAgICAgICAgLyogbm8gbmVl ZCBmb3IgbmFtZSAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOT05fTUVUSE9ELCAgLyogbm90IG1ldGhvZCAqLwotCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBmdW5jdGlvbiwgLyog dGhlIGZ1bmN0aW9uICovCi0JCQkJCSAgTlVMTCwgJnN5bXAsIE5VTEwsIG5v X2FkbCk7CisJCQkJCSAgTk9OX01FVEhPRCwgIC8qIG5vdCBtZXRob2QgKi8K KwkJCQkJICBOVUxMLCBmdW5jdGlvbiwgLyogdGhlIGZ1bmN0aW9uICovCisJ CQkJCSAgTlVMTCwgJnN5bXAsIE5VTEwsIE5VTEwsIG5vX2FkbCk7CiAKIAkg ICAgICBpZiAob3AgPT0gT1BfVkFSX1ZBTFVFKQogCQl7CmRpZmYgLS1naXQg YS9nZGIvdmFsYXJpdGguYyBiL2dkYi92YWxhcml0aC5jCmluZGV4IDhlODYz ZTMuLjY3ZDkwZmMgMTAwNjQ0Ci0tLSBhL2dkYi92YWxhcml0aC5jCisrKyBi L2dkYi92YWxhcml0aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8 bWF0aC5oPgogI2luY2x1ZGUgImluZmNhbGwuaCIKICNpbmNsdWRlICJleGNl cHRpb25zLmgiCisjaW5jbHVkZSAiZXh0ZW5zaW9uLmgiCiAKIC8qIERlZmlu ZSB3aGV0aGVyIG9yIG5vdCB0aGUgQyBvcGVyYXRvciAnLycgdHJ1bmNhdGVz IHRvd2FyZHMgemVybyBmb3IKICAgIGRpZmZlcmVudGx5IHNpZ25lZCBvcGVy YW5kcyAodHJ1bmNhdGlvbiBkaXJlY3Rpb24gaXMgdW5kZWZpbmVkIGluIEMp LiAgKi8KQEAgLTI4MiwyNCArMjgzLDM3IEBAIHVub3BfdXNlcl9kZWZpbmVk X3AgKGVudW0gZXhwX29wY29kZSBvcCwgc3RydWN0IHZhbHVlICphcmcxKQog ICAgKlNUQVRJQ19NRU1GVU5QIHdpbGwgYmUgc2V0IHRvIDEsIGFuZCBvdGhl cndpc2UgMC4KICAgIFRoZSBzZWFyY2ggaWYgcGVyZm9ybWVkIHRocm91Z2gg ZmluZF9vdmVybG9hZF9tYXRjaCB3aGljaCB3aWxsIGhhbmRsZQogICAgbWVt YmVyIG9wZXJhdG9ycywgbm9uIG1lbWJlciBvcGVyYXRvcnMsIG9wZXJhdG9y cyBpbXBvcnRlZCBpbXBsaWNpdGx5IG9yCi0gICBleHBsaWNpdGx5LCBhbmQg cGVyZm9ybSBjb3JyZWN0IG92ZXJsb2FkIHJlc29sdXRpb24gaW4gYWxsIG9m IHRoZSBhYm92ZQotICAgc2l0dWF0aW9ucyBvciBjb21iaW5hdGlvbnMgdGhl cmVvZi4gICovCisgICBleHBsaWNpdGx5LCBvcGVyYXRvcnMgaW1wbGVtZW50 ZWQgYXMgZGVidWcgbWV0aG9kcywgYW5kIHBlcmZvcm0gY29ycmVjdAorICAg b3ZlcmxvYWQgcmVzb2x1dGlvbiBpbiBhbGwgb2YgdGhlIGFib3ZlIHNpdHVh dGlvbnMgb3IgY29tYmluYXRpb25zCisgICB0aGVyZW9mLiAgSWYgYSBtYXRj aGluZyBtZXRob2QvZnVuY3Rpb24gaXMgZm91bmQgaW4gdGhlIGJpbmFyeSwg aXRzCisgICBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHJldHVybmVkIGluIFNS Q19GTi4gIElmIGEgZGVidWcgbWV0aG9kIGlzIHRoZSBiZXN0CisgICBtYXRj aCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBkZWJ1ZyBtZXRob2Qgd29ya2Vy IGlzIHJldHVybmVkIGluCisgICBETV9XT1JLRVIuICBPbiByZXR1cm4sIGV4 YWN0bHkgb25lIG9mIFNSQ19GTiwgRE1fV09SS0VSIGlzIG5vbi1OVUxMIGFu ZAorICAgdGhlIG90aGVyIGlzIE5VTEwuICAqLwogCi1zdGF0aWMgc3RydWN0 IHZhbHVlICoKK3N0YXRpYyB2b2lkCiB2YWx1ZV91c2VyX2RlZmluZWRfY3Bw X29wIChzdHJ1Y3QgdmFsdWUgKiphcmdzLCBpbnQgbmFyZ3MsIGNoYXIgKm9w ZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0 aWNfbWVtZnVuY3ApCisJCQkgICBzdHJ1Y3QgdmFsdWUgKipzcmNfZm4sCisJ CQkgICBzdHJ1Y3QgZGVidWdfbWV0aG9kX3dvcmtlciAqKmRtX3dvcmtlciwK KwkJCSAgIGludCAqc3RhdGljX21lbWZ1bmNwKQogewogCiAgIHN0cnVjdCBz eW1ib2wgKnN5bXAgPSBOVUxMOwogICBzdHJ1Y3QgdmFsdWUgKnZhbHAgPSBO VUxMOworICBzdHJ1Y3QgZGVidWdfbWV0aG9kX3dvcmtlciAqd29ya2VyID0g TlVMTDsKIAogICBmaW5kX292ZXJsb2FkX21hdGNoIChhcmdzLCBuYXJncywg b3BlcmF0b3IsIEJPVEggLyogY291bGQgYmUgbWV0aG9kICovLAotICAgICAg ICAgICAgICAgICAgICAgICAmYXJnc1swXSAvKiBvYmpwICovLAotICAgICAg ICAgICAgICAgICAgICAgICBOVUxMIC8qIHBhc3MgTlVMTCBzeW1ib2wgc2lu Y2Ugc3ltYm9sIGlzIHVua25vd24gKi8sCi0gICAgICAgICAgICAgICAgICAg ICAgICZ2YWxwLCAmc3ltcCwgc3RhdGljX21lbWZ1bmNwLCAwKTsKKwkJICAg ICAgICZhcmdzWzBdIC8qIG9ianAgKi8sCisJCSAgICAgICBOVUxMIC8qIHBh c3MgTlVMTCBzeW1ib2wgc2luY2Ugc3ltYm9sIGlzIHVua25vd24gKi8sCisJ CSAgICAgICAmdmFscCwgJnN5bXAsICZ3b3JrZXIsIHN0YXRpY19tZW1mdW5j cCwgMCk7CiAKICAgaWYgKHZhbHApCi0gICAgcmV0dXJuIHZhbHA7CisgICAg eworICAgICAgKnNyY19mbiA9IHZhbHA7CisgICAgICAqZG1fd29ya2VyID0g TlVMTDsKKworICAgICAgcmV0dXJuOworICAgIH0KIAogICBpZiAoc3ltcCkK ICAgICB7CkBAIC0zMDcsMjggKzMyMSw0OSBAQCB2YWx1ZV91c2VyX2RlZmlu ZWRfY3BwX29wIChzdHJ1Y3QgdmFsdWUgKiphcmdzLCBpbnQgbmFyZ3MsIGNo YXIgKm9wZXJhdG9yLAogICAgICAgICAgZXhwZWN0IGEgcmVmZXJlbmNlIGFz IGl0cyBmaXJzdCBhcmd1bWVudAogICAgICAgICAgcmF0aGVyIHRoZSBleHBs aWNpdCBzdHJ1Y3R1cmUuICAqLwogICAgICAgYXJnc1swXSA9IHZhbHVlX2lu ZCAoYXJnc1swXSk7Ci0gICAgICByZXR1cm4gdmFsdWVfb2ZfdmFyaWFibGUg KHN5bXAsIDApOworICAgICAgKnNyY19mbiA9IHZhbHVlX29mX3ZhcmlhYmxl IChzeW1wLCAwKTsKKyAgICAgICpkbV93b3JrZXIgPSBOVUxMOworCisgICAg ICByZXR1cm47CisgICAgfQorCisgIGlmICh3b3JrZXIpCisgICAgeworICAg ICAgKmRtX3dvcmtlciA9IHdvcmtlcjsKKyAgICAgICpzcmNfZm4gPSBOVUxM OworCisgICAgICByZXR1cm47CiAgICAgfQogCiAgIGVycm9yIChfKCJDb3Vs ZCBub3QgZmluZCAlcy4iKSwgb3BlcmF0b3IpOwogfQogCi0vKiBMb29rdXAg dXNlciBkZWZpbmVkIG9wZXJhdG9yIE5BTUUuICBSZXR1cm4gYSB2YWx1ZSBy ZXByZXNlbnRpbmcgdGhlCi0gICBmdW5jdGlvbiwgb3RoZXJ3aXNlIHJldHVy biBOVUxMLiAgKi8KKy8qIExvb2t1cCB1c2VyIGRlZmluZWQgb3BlcmF0b3Ig TkFNRS4gIElmIGEgbWF0Y2hpbmcgb3BlcmF0b3IgaXMgZm91bmQgaW4gdGhl CisgICBiaW5hcnksIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHJldHVy bmVkIGluIFNSQ19GTi4gIElmIGEgZGVidWcgbWV0aG9kCisgICBpcyB0aGUg YmVzdCBtYXRjaGluZyBvcGVyYXRvciwgdGhlbiB0aGUgY29ycmVzcG9uZGlu ZyBkZWJ1ZyBtZXRob2Qgd29ya2VyCisgICBpcyByZXR1cm5lZCBpbiBETV9X T1JLRVIuICBPbiByZXR1cm4sIGV4YWN0bHkgb25lIG9mIFNSQ19GTiwgRE1f V09SS0VSIGlzCisgICBzZXQgdG8gbm9uLU5VTEwgYW5kIHRoZSBvdGhlciBp cyBzZXQgdG8gTlVMTC4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgdmFsdWUgKgor c3RhdGljIHZvaWQKIHZhbHVlX3VzZXJfZGVmaW5lZF9vcCAoc3RydWN0IHZh bHVlICoqYXJncCwgc3RydWN0IHZhbHVlICoqYXJncywgY2hhciAqbmFtZSwK LSAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0aWNfbWVtZnVuY3As IGludCBuYXJncykKKwkJICAgICAgIGludCAqc3RhdGljX21lbWZ1bmNwLCBp bnQgbmFyZ3MsCisJCSAgICAgICBzdHJ1Y3QgdmFsdWUgKipzcmNfZm4sCisJ CSAgICAgICBzdHJ1Y3QgZGVidWdfbWV0aG9kX3dvcmtlciAqKmRtX3dvcmtl cikKIHsKICAgc3RydWN0IHZhbHVlICpyZXN1bHQgPSBOVUxMOwogCiAgIGlm IChjdXJyZW50X2xhbmd1YWdlLT5sYV9sYW5ndWFnZSA9PSBsYW5ndWFnZV9j cGx1cykKLSAgICByZXN1bHQgPSB2YWx1ZV91c2VyX2RlZmluZWRfY3BwX29w IChhcmdzLCBuYXJncywgbmFtZSwgc3RhdGljX21lbWZ1bmNwKTsKKyAgICB7 CisgICAgICB2YWx1ZV91c2VyX2RlZmluZWRfY3BwX29wIChhcmdzLCBuYXJn cywgbmFtZSwgc3JjX2ZuLCBkbV93b3JrZXIsCisJCQkJIHN0YXRpY19tZW1m dW5jcCk7CisgICAgfQogICBlbHNlCi0gICAgcmVzdWx0ID0gdmFsdWVfc3Ry dWN0X2VsdCAoYXJncCwgYXJncywgbmFtZSwgc3RhdGljX21lbWZ1bmNwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJ1Y3R1cmUiKTsK LQotICByZXR1cm4gcmVzdWx0OworICAgIHsKKyAgICAgIHJlc3VsdCA9IHZh bHVlX3N0cnVjdF9lbHQgKGFyZ3AsIGFyZ3MsIG5hbWUsIHN0YXRpY19tZW1m dW5jcCwKKwkJCQkgInN0cnVjdHVyZSIpOworICAgICAgKnNyY19mbiA9IHJl c3VsdDsKKyAgICAgICpkbV93b3JrZXIgPSBOVUxMOworICAgIH0KIH0KIAog LyogV2Uga25vdyBlaXRoZXIgYXJnMSBvciBhcmcyIGlzIGEgc3RydWN0dXJl LCBzbyB0cnkgdG8gZmluZCB0aGUgcmlnaHQKQEAgLTM0NSw2ICszODAsNyBA QCB2YWx1ZV94X2Jpbm9wIChzdHJ1Y3QgdmFsdWUgKmFyZzEsIHN0cnVjdCB2 YWx1ZSAqYXJnMiwgZW51bSBleHBfb3Bjb2RlIG9wLAogCSAgICAgICBlbnVt IGV4cF9vcGNvZGUgb3RoZXJvcCwgZW51bSBub3NpZGUgbm9zaWRlKQogewog ICBzdHJ1Y3QgdmFsdWUgKiphcmd2ZWM7CisgIHN0cnVjdCBkZWJ1Z19tZXRo b2Rfd29ya2VyICpkbV93b3JrZXIgPSBOVUxMOwogICBjaGFyICpwdHI7CiAg IGNoYXIgdHN0clsxM107CiAgIGludCBzdGF0aWNfbWVtZnVuY3A7CkBAIC0z NTksNiArMzk1LDcgQEAgdmFsdWVfeF9iaW5vcCAoc3RydWN0IHZhbHVlICph cmcxLCBzdHJ1Y3QgdmFsdWUgKmFyZzIsIGVudW0gZXhwX29wY29kZSBvcCwK ICAgICBlcnJvciAoXygiQ2FuJ3QgZG8gdGhhdCBiaW5hcnkgb3Agb24gdGhh dCB0eXBlIikpOwkvKiBGSVhNRSBiZSBleHBsaWNpdCAqLwogCiAgIGFyZ3Zl YyA9IChzdHJ1Y3QgdmFsdWUgKiopIGFsbG9jYSAoc2l6ZW9mIChzdHJ1Y3Qg dmFsdWUgKikgKiA0KTsKKyAgYXJndmVjWzBdID0gTlVMTDsKICAgYXJndmVj WzFdID0gdmFsdWVfYWRkciAoYXJnMSk7CiAgIGFyZ3ZlY1syXSA9IGFyZzI7 CiAgIGFyZ3ZlY1szXSA9IDA7CkBAIC00NzEsOCArNTA4LDggQEAgdmFsdWVf eF9iaW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBzdHJ1Y3QgdmFsdWUgKmFy ZzIsIGVudW0gZXhwX29wY29kZSBvcCwKICAgICAgIGVycm9yIChfKCJJbnZh bGlkIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWVkLiIpKTsKICAgICB9CiAK LSAgYXJndmVjWzBdID0gdmFsdWVfdXNlcl9kZWZpbmVkX29wICgmYXJnMSwg YXJndmVjICsgMSwgdHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmc3RhdGljX21lbWZ1bmNwLCAyKTsKKyAgdmFsdWVfdXNl cl9kZWZpbmVkX29wICgmYXJnMSwgYXJndmVjICsgMSwgdHN0ciwgJnN0YXRp Y19tZW1mdW5jcCwgMiwKKwkJCSAmYXJndmVjWzBdLCAmZG1fd29ya2VyKTsK IAogICBpZiAoYXJndmVjWzBdKQogICAgIHsKQEAgLTQ5Miw2ICs1MjksMTQg QEAgdmFsdWVfeF9iaW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBzdHJ1Y3Qg dmFsdWUgKmFyZzIsIGVudW0gZXhwX29wY29kZSBvcCwKICAgICAgIHJldHVy biBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgKGFyZ3ZlY1swXSwgMiAtIHN0YXRp Y19tZW1mdW5jcCwKIAkJCQkgICAgYXJndmVjICsgMSk7CiAgICAgfQorICBp ZiAoZG1fd29ya2VyICE9IE5VTEwpCisgICAgeworICAgICAgc3RydWN0IGNs ZWFudXAgKmRtX3dvcmtlcl9jbGVhbnVwID0gbWFrZV9jbGVhbnVwICh4ZnJl ZSwgZG1fd29ya2VyKTsKKyAgICAgIHN0cnVjdCB2YWx1ZSAqcmV0X3ZhbCA9 IGludm9rZV9kZWJ1Z19tZXRob2QgKGRtX3dvcmtlciwgYXJnMSwgJmFyZzIs IDEpOworCisgICAgICBkb19jbGVhbnVwcyAoZG1fd29ya2VyX2NsZWFudXAp OworICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgfQogICB0aHJvd19lcnJv ciAoTk9UX0ZPVU5EX0VSUk9SLAogICAgICAgICAgICAgICAgXygibWVtYmVy IGZ1bmN0aW9uICVzIG5vdCBmb3VuZCIpLCB0c3RyKTsKICNpZmRlZiBsaW50 CkBAIC01MTAsNiArNTU1LDcgQEAgdmFsdWVfeF91bm9wIChzdHJ1Y3QgdmFs dWUgKmFyZzEsIGVudW0gZXhwX29wY29kZSBvcCwgZW51bSBub3NpZGUgbm9z aWRlKQogewogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF90eXBl X2FyY2ggKHZhbHVlX3R5cGUgKGFyZzEpKTsKICAgc3RydWN0IHZhbHVlICoq YXJndmVjOworICBzdHJ1Y3QgZGVidWdfbWV0aG9kX3dvcmtlciAqZG1fd29y a2VyOwogICBjaGFyICpwdHI7CiAgIGNoYXIgdHN0clsxM10sIG1hbmdsZV90 c3RyWzEzXTsKICAgaW50IHN0YXRpY19tZW1mdW5jcCwgbmFyZ3M7CkBAIC01 MjMsNiArNTY5LDcgQEAgdmFsdWVfeF91bm9wIChzdHJ1Y3QgdmFsdWUgKmFy ZzEsIGVudW0gZXhwX29wY29kZSBvcCwgZW51bSBub3NpZGUgbm9zaWRlKQog ICAgIGVycm9yIChfKCJDYW4ndCBkbyB0aGF0IHVuYXJ5IG9wIG9uIHRoYXQg dHlwZSIpKTsJLyogRklYTUUgYmUgZXhwbGljaXQgKi8KIAogICBhcmd2ZWMg PSAoc3RydWN0IHZhbHVlICoqKSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IHZh bHVlICopICogNCk7CisgIGFyZ3ZlY1swXSA9IE5VTEw7CiAgIGFyZ3ZlY1sx XSA9IHZhbHVlX2FkZHIgKGFyZzEpOwogICBhcmd2ZWNbMl0gPSAwOwogCkBA IC01NzQsOCArNjIxLDggQEAgdmFsdWVfeF91bm9wIChzdHJ1Y3QgdmFsdWUg KmFyZzEsIGVudW0gZXhwX29wY29kZSBvcCwgZW51bSBub3NpZGUgbm9zaWRl KQogICAgICAgZXJyb3IgKF8oIkludmFsaWQgdW5hcnkgb3BlcmF0aW9uIHNw ZWNpZmllZC4iKSk7CiAgICAgfQogCi0gIGFyZ3ZlY1swXSA9IHZhbHVlX3Vz ZXJfZGVmaW5lZF9vcCAoJmFyZzEsIGFyZ3ZlYyArIDEsIHRzdHIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXRpY19tZW1m dW5jcCwgbmFyZ3MpOworICB2YWx1ZV91c2VyX2RlZmluZWRfb3AgKCZhcmcx LCBhcmd2ZWMgKyAxLCB0c3RyLCAmc3RhdGljX21lbWZ1bmNwLCBuYXJncywK KwkJCSAmYXJndmVjWzBdLCAmZG1fd29ya2VyKTsKIAogICBpZiAoYXJndmVj WzBdKQogICAgIHsKQEAgLTU5NSw2ICs2NDIsMTQgQEAgdmFsdWVfeF91bm9w IChzdHJ1Y3QgdmFsdWUgKmFyZzEsIGVudW0gZXhwX29wY29kZSBvcCwgZW51 bSBub3NpZGUgbm9zaWRlKQogCX0KICAgICAgIHJldHVybiBjYWxsX2Z1bmN0 aW9uX2J5X2hhbmQgKGFyZ3ZlY1swXSwgbmFyZ3MsIGFyZ3ZlYyArIDEpOwog ICAgIH0KKyAgaWYgKGRtX3dvcmtlciAhPSBOVUxMKQorICAgIHsKKyAgICAg IHN0cnVjdCBjbGVhbnVwICpkbV93b3JrZXJfY2xlYW51cCA9IG1ha2VfY2xl YW51cCAoeGZyZWUsIGRtX3dvcmtlcik7CisgICAgICBzdHJ1Y3QgdmFsdWUg KnJldF92YWwgPSBpbnZva2VfZGVidWdfbWV0aG9kIChkbV93b3JrZXIsIGFy ZzEsIE5VTEwsIDApOworCisgICAgICBkb19jbGVhbnVwcyAoZG1fd29ya2Vy X2NsZWFudXApOworICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgfQogICB0 aHJvd19lcnJvciAoTk9UX0ZPVU5EX0VSUk9SLAogICAgICAgICAgICAgICAg XygibWVtYmVyIGZ1bmN0aW9uICVzIG5vdCBmb3VuZCIpLCB0c3RyKTsKIApk aWZmIC0tZ2l0IGEvZ2RiL3ZhbG9wcy5jIGIvZ2RiL3ZhbG9wcy5jCmluZGV4 IDdmMmQ1ZjAuLmE4MTBmMjUgMTAwNjQ0Ci0tLSBhL2dkYi92YWxvcHMuYwor KysgYi9nZGIvdmFsb3BzLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRl ICJvYnNlcnZlci5oIgogI2luY2x1ZGUgIm9iamZpbGVzLmgiCiAjaW5jbHVk ZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgImV4dGVuc2lvbi5oIgogCiBl eHRlcm4gdW5zaWduZWQgaW50IG92ZXJsb2FkX2RlYnVnOwogLyogTG9jYWwg ZnVuY3Rpb25zLiAgKi8KQEAgLTcwLDggKzcxLDggQEAgaW50IGZpbmRfb2xv YWRfY2hhbXBfbmFtZXNwYWNlX2xvb3AgKHN0cnVjdCB2YWx1ZSAqKiwgaW50 LAogCQkJCSAgICAgY29uc3QgaW50IG5vX2FkbCk7CiAKIHN0YXRpYyBpbnQg ZmluZF9vbG9hZF9jaGFtcCAoc3RydWN0IHZhbHVlICoqLCBpbnQsIGludCwK LQkJCSAgICAgc3RydWN0IGZuX2ZpZWxkICosIHN0cnVjdCBzeW1ib2wgKios Ci0JCQkgICAgIHN0cnVjdCBiYWRuZXNzX3ZlY3RvciAqKik7CisJCQkgICAg IHN0cnVjdCBmbl9maWVsZCAqLCBWRUMgKGRlYnVnX21ldGhvZF93b3JrZXJf cHRyKSAqLAorCQkJICAgICBzdHJ1Y3Qgc3ltYm9sICoqLCBzdHJ1Y3QgYmFk bmVzc192ZWN0b3IgKiopOwogCiBzdGF0aWMgaW50IG9sb2FkX21ldGhvZF9z dGF0aWMgKGludCwgc3RydWN0IGZuX2ZpZWxkICosIGludCk7CiAKQEAgLTk4 LDkgKzk5LDEwIEBAIHN0YXRpYyBDT1JFX0FERFIgYWxsb2NhdGVfc3BhY2Vf aW5faW5mZXJpb3IgKGludCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdmFsdWUgKmNh c3RfaW50b19jb21wbGV4IChzdHJ1Y3QgdHlwZSAqLCBzdHJ1Y3QgdmFsdWUg Kik7CiAKLXN0YXRpYyBzdHJ1Y3QgZm5fZmllbGQgKmZpbmRfbWV0aG9kX2xp c3QgKHN0cnVjdCB2YWx1ZSAqKiwgY29uc3QgY2hhciAqLAotCQkJCQkgIGlu dCwgc3RydWN0IHR5cGUgKiwgaW50ICosCi0JCQkJCSAgc3RydWN0IHR5cGUg KiosIGludCAqKTsKK3N0YXRpYyB2b2lkIGZpbmRfbWV0aG9kX2xpc3QgKHN0 cnVjdCB2YWx1ZSAqKiwgY29uc3QgY2hhciAqLAorCQkJICAgICAgaW50LCBz dHJ1Y3QgdHlwZSAqLCBzdHJ1Y3QgZm5fZmllbGQgKiosIGludCAqLAorCQkJ ICAgICAgVkVDIChkZWJ1Z19tZXRob2Rfd29ya2VyX3B0cikgKiosCisJCQkg ICAgICBzdHJ1Y3QgdHlwZSAqKiwgaW50ICopOwogCiB2b2lkIF9pbml0aWFs aXplX3ZhbG9wcyAodm9pZCk7CiAKQEAgLTIyNTUsNTMgKzIyNTcsODMgQEAg dmFsdWVfc3RydWN0X2VsdF9iaXRwb3MgKHN0cnVjdCB2YWx1ZSAqKmFyZ3As IGludCBiaXRwb3MsIHN0cnVjdCB0eXBlICpmdHlwZSwKIH0KIAogLyogU2Vh cmNoIHRocm91Z2ggdGhlIG1ldGhvZHMgb2YgYW4gb2JqZWN0IChhbmQgaXRz IGJhc2VzKSB0byBmaW5kIGEKLSAgIHNwZWNpZmllZCBtZXRob2QuICBSZXR1 cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGZuX2ZpZWxkIGxpc3Qgb2YKLSAgIG92 ZXJsb2FkZWQgaW5zdGFuY2VzLgorICAgc3BlY2lmaWVkIG1ldGhvZC4gIFJl dHVybiB0aGUgcG9pbnRlciB0byB0aGUgZm5fZmllbGQgbGlzdCBGTl9MSVNU IG9mCisgICBvdmVybG9hZGVkIGluc3RhbmNlcyBkZWZpbmVkIGluIHRoZSBz b3VyY2UgbGFuZ3VhZ2UuICBJZiBhdmFpbGFibGUKKyAgIGFuZCBtYXRjaGlu ZywgYSB2ZWN0b3Igb2YgbWF0Y2hpbmcgZGVidWcgbWV0aG9kcyBkZWZpbmVk IGluCisgICBleHRlbnNpb24gbGFuZ3VhZ2VzIGFyZSBhbHNvIHJldHVybmVk IGluIERNX1dPUktFUl9WRUMKIAogICAgSGVscGVyIGZ1bmN0aW9uIGZvciB2 YWx1ZV9maW5kX29sb2FkX2xpc3QuCiAgICBBUkdQIGlzIGEgcG9pbnRlciB0 byBhIHBvaW50ZXIgdG8gYSB2YWx1ZSAodGhlIG9iamVjdCkuCiAgICBNRVRI T0QgaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWV0aG9kIG5hbWUuCiAg ICBPRkZTRVQgaXMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHZhbHVlLgogICAg VFlQRSBpcyB0aGUgYXNzdW1lZCB0eXBlIG9mIHRoZSBvYmplY3QuCisgICBG Tl9MSVNUIFRoZSBwb2ludGVyIHRvIG1hdGNoaW5nIG92ZXJsb2FkZWQgaW5z dGFuY2VzIGRlZmluZWQgaW4KKyAgICAgIHNvdXJjZSBsYW5ndWFnZS4KICAg IE5VTV9GTlMgaXMgdGhlIG51bWJlciBvZiBvdmVybG9hZGVkIGluc3RhbmNl cy4KKyAgIERNX1dPUktFUl9WRUMgVGhlIHZlY3RvciBvZiBtYXRjaGluZyBk ZWJ1ZyBtZXRob2Qgd29ya2Vycy4KICAgIEJBU0VUWVBFIGlzIHNldCB0byB0 aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHN1Ym9iamVjdCB3aGVyZSB0aGUKICAg ICAgIG1ldGhvZCBpcyBmb3VuZC4KICAgIEJPRkZTRVQgaXMgdGhlIG9mZnNl dCBvZiB0aGUgYmFzZSBzdWJvYmplY3Qgd2hlcmUgdGhlIG1ldGhvZCBpcyBm b3VuZC4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgZm5fZmllbGQgKgorc3RhdGlj IHZvaWQKIGZpbmRfbWV0aG9kX2xpc3QgKHN0cnVjdCB2YWx1ZSAqKmFyZ3As IGNvbnN0IGNoYXIgKm1ldGhvZCwKLQkJICBpbnQgb2Zmc2V0LCBzdHJ1Y3Qg dHlwZSAqdHlwZSwgaW50ICpudW1fZm5zLAorCQkgIGludCBvZmZzZXQsIHN0 cnVjdCB0eXBlICp0eXBlLAorCQkgIHN0cnVjdCBmbl9maWVsZCAqKmZuX2xp c3QsIGludCAqbnVtX2ZucywKKwkJICBWRUMgKGRlYnVnX21ldGhvZF93b3Jr ZXJfcHRyKSAqKmRtX3dvcmtlcl92ZWMsCiAJCSAgc3RydWN0IHR5cGUgKipi YXNldHlwZSwgaW50ICpib2Zmc2V0KQogewogICBpbnQgaTsKLSAgc3RydWN0 IGZuX2ZpZWxkICpmOwotICBDSEVDS19UWVBFREVGICh0eXBlKTsKKyAgc3Ry dWN0IGZuX2ZpZWxkICpmID0gTlVMTDsKIAotICAqbnVtX2ZucyA9IDA7Cisg IENIRUNLX1RZUEVERUYgKHR5cGUpOwogCi0gIC8qIEZpcnN0IGNoZWNrIGlu IG9iamVjdCBpdHNlbGYuICAqLwotICBmb3IgKGkgPSBUWVBFX05GTl9GSUVM RFMgKHR5cGUpIC0gMTsgaSA+PSAwOyBpLS0pCisgIC8qIEZpcnN0IGNoZWNr IGluIG9iamVjdCBpdHNlbGYuCisgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHJlY3Vyc2l2ZWx5IHRvIHNlYXJjaCB0aHJvdWdoIGJhc2UgY2xhc3Nl cy4KKyAgICAgSWYgdGhlcmUgaXMgYSBzb3VyY2UgbWV0aG9kIG1hdGNoIGZv dW5kIGF0IHNvbWUgc3RhZ2UsIHRoZW4gd2UgbmVlZCBub3QKKyAgICAgbG9v ayBmb3Igc291cmNlIG1ldGhvZHMgaW4gY29uc2VxdWVudCByZWN1cnNpdmUg Y2FsbHMuICAqLworICBpZiAoZm5fbGlzdCAhPSBOVUxMICYmICgqZm5fbGlz dCkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAvKiBwYWk6IEZJWE1FIFdoYXQg YWJvdXQgb3BlcmF0b3JzIGFuZCB0eXBlIGNvbnZlcnNpb25zPyAgKi8KLSAg ICAgIGNvbnN0IGNoYXIgKmZuX2ZpZWxkX25hbWUgPSBUWVBFX0ZOX0ZJRUxE TElTVF9OQU1FICh0eXBlLCBpKTsKLQotICAgICAgaWYgKGZuX2ZpZWxkX25h bWUgJiYgKHN0cmNtcF9pdyAoZm5fZmllbGRfbmFtZSwgbWV0aG9kKSA9PSAw KSkKKyAgICAgIGZvciAoaSA9IFRZUEVfTkZOX0ZJRUxEUyAodHlwZSkgLSAx OyBpID49IDA7IGktLSkKIAl7Ci0JICBpbnQgbGVuID0gVFlQRV9GTl9GSUVM RExJU1RfTEVOR1RIICh0eXBlLCBpKTsKLQkgIHN0cnVjdCBmbl9maWVsZCAq ZiA9IFRZUEVfRk5fRklFTERMSVNUMSAodHlwZSwgaSk7CisJICAvKiBwYWk6 IEZJWE1FIFdoYXQgYWJvdXQgb3BlcmF0b3JzIGFuZCB0eXBlIGNvbnZlcnNp b25zPyAgKi8KKwkgIGNvbnN0IGNoYXIgKmZuX2ZpZWxkX25hbWUgPSBUWVBF X0ZOX0ZJRUxETElTVF9OQU1FICh0eXBlLCBpKTsKKworCSAgaWYgKGZuX2Zp ZWxkX25hbWUgJiYgKHN0cmNtcF9pdyAoZm5fZmllbGRfbmFtZSwgbWV0aG9k KSA9PSAwKSkKKwkgICAgeworCSAgICAgIGludCBsZW4gPSBUWVBFX0ZOX0ZJ RUxETElTVF9MRU5HVEggKHR5cGUsIGkpOworCSAgICAgIGYgPSBUWVBFX0ZO X0ZJRUxETElTVDEgKHR5cGUsIGkpOworCSAgICAgICpmbl9saXN0ID0gZjsK IAotCSAgKm51bV9mbnMgPSBsZW47Ci0JICAqYmFzZXR5cGUgPSB0eXBlOwot CSAgKmJvZmZzZXQgPSBvZmZzZXQ7CisJICAgICAgKm51bV9mbnMgPSBsZW47 CisJICAgICAgKmJhc2V0eXBlID0gdHlwZTsKKwkgICAgICAqYm9mZnNldCA9 IG9mZnNldDsKIAotCSAgLyogUmVzb2x2ZSBhbnkgc3R1YiBtZXRob2RzLiAg Ki8KLQkgIGNoZWNrX3N0dWJfbWV0aG9kX2dyb3VwICh0eXBlLCBpKTsKKwkg ICAgICAvKiBSZXNvbHZlIGFueSBzdHViIG1ldGhvZHMuICAqLworCSAgICAg IGNoZWNrX3N0dWJfbWV0aG9kX2dyb3VwICh0eXBlLCBpKTsKIAotCSAgcmV0 dXJuIGY7CisJICAgICAgYnJlYWs7CisJICAgIH0KIAl9CiAgICAgfQogCi0g IC8qIE5vdCBmb3VuZCBpbiBvYmplY3QsIGNoZWNrIGluIGJhc2Ugc3Vib2Jq ZWN0cy4gICovCisgIC8qIFVubGlrZSBzb3VyY2UgbWV0aG9kcywgZGVidWcg bWV0aG9kcyBjYW4gYmUgYWNjdW11bGF0ZWQgb3ZlciBzdWNjZXNzaXZlCisg ICAgIHJlY3Vyc2l2ZSBjYWxscy4gIEluIG90aGVyIHdvcmRzLCBhIGRlYnVn IG1ldGhvZCBuYW1lZCAnbScgaW4gYSBjbGFzcworICAgICB3aWxsIG5vdCBo aWRlIGEgZGVidWcgbWV0aG9kIG5hbWVkICdtJyBpbiBpdHMgYmFzZSBjbGFz cyhlcykuICAqLworICBpZiAoZG1fd29ya2VyX3ZlYykKKyAgICB7CisgICAg ICBWRUMgKGRlYnVnX21ldGhvZF93b3JrZXJfcHRyKSAqd29ya2VyX3ZlYyA9 IE5VTEwsICpuZXdfdmVjID0gTlVMTDsKKworICAgICAgd29ya2VyX3ZlYyA9 IGdldF9tYXRjaGluZ19kZWJ1Z19tZXRob2Rfd29ya2VycyAodHlwZSwgbWV0 aG9kKTsKKyAgICAgIG5ld192ZWMgPSBWRUNfbWVyZ2UgKGRlYnVnX21ldGhv ZF93b3JrZXJfcHRyLCAqZG1fd29ya2VyX3ZlYywgd29ya2VyX3ZlYyk7CisK KyAgICAgIFZFQ19mcmVlIChkZWJ1Z19tZXRob2Rfd29ya2VyX3B0ciwgKmRt X3dvcmtlcl92ZWMpOworICAgICAgVkVDX2ZyZWUgKGRlYnVnX21ldGhvZF93 b3JrZXJfcHRyLCB3b3JrZXJfdmVjKTsKKyAgICAgICpkbV93b3JrZXJfdmVj ID0gbmV3X3ZlYzsKKyAgICB9CisKKyAgLyogSWYgc291cmNlIG1ldGhvZHMg YXJlIG5vdCBmb3VuZCBpbiBjdXJyZW50IGNsYXNzLCBsb29rIGZvciB0aGVt IGluIHRoZQorICAgICBiYXNlIGNsYXNzZXMuICBXZSBoYXZlIHRvIGdvIHRo cm91Z2ggdGhlIGJhc2UgY2xhc3NlcyB0byBnYXRoZXIgZXh0ZW5zaW9uCisg ICAgIG1ldGhvZHMgYW55d2F5LiAgKi8KICAgZm9yIChpID0gVFlQRV9OX0JB U0VDTEFTU0VTICh0eXBlKSAtIDE7IGkgPj0gMDsgaS0tKQogICAgIHsKICAg ICAgIGludCBiYXNlX29mZnNldDsKQEAgLTIzMTgsMjggKzIzNTAsMzUgQEAg ZmluZF9tZXRob2RfbGlzdCAoc3RydWN0IHZhbHVlICoqYXJncCwgY29uc3Qg Y2hhciAqbWV0aG9kLAogCXsKIAkgIGJhc2Vfb2Zmc2V0ID0gVFlQRV9CQVNF Q0xBU1NfQklUUE9TICh0eXBlLCBpKSAvIDg7CiAJfQotICAgICAgZiA9IGZp bmRfbWV0aG9kX2xpc3QgKGFyZ3AsIG1ldGhvZCwgYmFzZV9vZmZzZXQgKyBv ZmZzZXQsCi0JCQkgICAgVFlQRV9CQVNFQ0xBU1MgKHR5cGUsIGkpLCBudW1f Zm5zLCAKLQkJCSAgICBiYXNldHlwZSwgYm9mZnNldCk7Ci0gICAgICBpZiAo ZikKLQlyZXR1cm4gZjsKKworICAgICAgZmluZF9tZXRob2RfbGlzdCAoYXJn cCwgbWV0aG9kLCBiYXNlX29mZnNldCArIG9mZnNldCwKKwkJCVRZUEVfQkFT RUNMQVNTICh0eXBlLCBpKSwgZm5fbGlzdCwgbnVtX2ZucywKKwkJCWRtX3dv cmtlcl92ZWMsIGJhc2V0eXBlLCBib2Zmc2V0KTsKICAgICB9Ci0gIHJldHVy biBOVUxMOwogfQogCi0vKiBSZXR1cm4gdGhlIGxpc3Qgb2Ygb3ZlcmxvYWRl ZCBtZXRob2RzIG9mIGEgc3BlY2lmaWVkIG5hbWUuCisvKiBSZXR1cm4gdGhl IGxpc3Qgb2Ygb3ZlcmxvYWRlZCBtZXRob2RzIG9mIGEgc3BlY2lmaWVkIG5h bWUuICBUaGUgbWV0aG9kcworICAgY291bGQgYmUgdGhvc2UgR0RCIGZpbmRz IGluIHRoZSBiaW5hcnksIG9yIGRlYnVnIG1ldGhvZHMuICBNZXRob2RzIGZv dW5kCisgICBpbiB0aGUgYmluYXJ5IGFyZSByZXR1cm5lZCBpbiBGTl9MSVNU LCBhbmQgZGVidWcgbWV0aG9kcyBhcmUgcmV0dXJuZWQgaW4KKyAgIERNX1dP UktFUl9WRUMuCiAKICAgIEFSR1AgaXMgYSBwb2ludGVyIHRvIGEgcG9pbnRl ciB0byBhIHZhbHVlICh0aGUgb2JqZWN0KS4KICAgIE1FVEhPRCBpcyB0aGUg bWV0aG9kIG5hbWUuCiAgICBPRkZTRVQgaXMgdGhlIG9mZnNldCB3aXRoaW4g dGhlIHZhbHVlIGNvbnRlbnRzLgorICAgRk5fTElTVCBUaGUgcG9pbnRlciB0 byBtYXRjaGluZyBvdmVybG9hZGVkIGluc3RhbmNlcyBkZWZpbmVkIGluCisg ICAgICBzb3VyY2UgbGFuZ3VhZ2UuCiAgICBOVU1fRk5TIGlzIHRoZSBudW1i ZXIgb2Ygb3ZlcmxvYWRlZCBpbnN0YW5jZXMuCisgICBETV9XT1JLRVJfVkVD IFRoZSB2ZWN0b3Igb2YgbWF0Y2hpbmcgZGVidWcgbWV0aG9kIHdvcmtlcnMg ZGVmaW5lZCBpbgorICAgICAgZXh0ZW5zaW9uIGxhbmd1YWdlcy4KICAgIEJB U0VUWVBFIGlzIHNldCB0byB0aGUgdHlwZSBvZiB0aGUgYmFzZSBzdWJvYmpl Y3QgdGhhdCBkZWZpbmVzIHRoZQogICAgICAgbWV0aG9kLgogICAgQk9GRlNF VCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIHN1Ym9iamVjdCB3aGljaCBk ZWZpbmVzIHRoZSBtZXRob2QuICAqLwogCi1zdGF0aWMgc3RydWN0IGZuX2Zp ZWxkICoKK3N0YXRpYyB2b2lkCiB2YWx1ZV9maW5kX29sb2FkX21ldGhvZF9s aXN0IChzdHJ1Y3QgdmFsdWUgKiphcmdwLCBjb25zdCBjaGFyICptZXRob2Qs Ci0JCQkgICAgICBpbnQgb2Zmc2V0LCBpbnQgKm51bV9mbnMsIAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgc3RydWN0IGZu X2ZpZWxkICoqZm5fbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqbnVtX2ZucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZFQyAoZGVidWdfbWV0aG9kX3dvcmtlcl9wdHIpICoqZG1fd29ya2Vy X3ZlYywKIAkJCSAgICAgIHN0cnVjdCB0eXBlICoqYmFzZXR5cGUsIGludCAq Ym9mZnNldCkKIHsKICAgc3RydWN0IHR5cGUgKnQ7CkBAIC0yMzYxLDggKzI0 MDAsMTI0IEBAIHZhbHVlX2ZpbmRfb2xvYWRfbWV0aG9kX2xpc3QgKHN0cnVj dCB2YWx1ZSAqKmFyZ3AsIGNvbnN0IGNoYXIgKm1ldGhvZCwKICAgICBlcnJv ciAoXygiQXR0ZW1wdCB0byBleHRyYWN0IGEgY29tcG9uZW50IG9mIGEgIgog CSAgICAgInZhbHVlIHRoYXQgaXMgbm90IGEgc3RydWN0IG9yIHVuaW9uIikp OwogCi0gIHJldHVybiBmaW5kX21ldGhvZF9saXN0IChhcmdwLCBtZXRob2Qs IDAsIHQsIG51bV9mbnMsIAotCQkJICAgYmFzZXR5cGUsIGJvZmZzZXQpOwor ICAvKiBDbGVhciB0aGUgbGlzdHMuICAqLworICBpZiAoZm5fbGlzdCAhPSBO VUxMKQorICAgIHsKKyAgICAgICpmbl9saXN0ID0gTlVMTDsKKyAgICAgICpu dW1fZm5zID0gMDsKKyAgICB9CisgIGlmIChkbV93b3JrZXJfdmVjICE9IE5V TEwpCisgICAgKmRtX3dvcmtlcl92ZWMgPSBOVUxMOworCisgIGZpbmRfbWV0 aG9kX2xpc3QgKGFyZ3AsIG1ldGhvZCwgMCwgdCwgZm5fbGlzdCwgbnVtX2Zu cywgZG1fd29ya2VyX3ZlYywKKwkJICAgIGJhc2V0eXBlLCBib2Zmc2V0KTsK K30KKworLyogUmV0dXJuIHRoZSBkeW5hbWljIHR5cGUgb2YgT0JKLiAgTlVM TCBpcyByZXR1cm5lZCBpZiBPQkogZG9lcyBub3QgaGF2ZSBhbnkKKyAgIGR5 bmFtaWMgdHlwZS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdHlwZSAqCit2YWx1 ZV9oYXNfaW5kaXJlY3RfZHluYW1pY190eXBlIChzdHJ1Y3QgdmFsdWUgKm9i aikKK3sKKyAgc3RydWN0IHR5cGUgKnN0eXBlLCAqZHR5cGUsICpkdHlwZV9p bmQ7CisKKyAgc3R5cGUgPSBjaGVja190eXBlZGVmIChUWVBFX1RBUkdFVF9U WVBFICh2YWx1ZV90eXBlIChvYmopKSk7CisgIGR0eXBlX2luZCA9IHZhbHVl X3J0dGlfaW5kaXJlY3RfdHlwZSAob2JqLCBOVUxMLCBOVUxMLCBOVUxMKTsK KyAgZHR5cGUgPSBkdHlwZV9pbmQgPyBjaGVja190eXBlZGVmIChUWVBFX1RB UkdFVF9UWVBFIChkdHlwZV9pbmQpKSA6IHN0eXBlOworCisgIGlmIChjbGFz c190eXBlc19zYW1lX3AgKHN0eXBlLCBkdHlwZSkpCisgICAgcmV0dXJuIE5V TEw7CisgIGVsc2UKKyAgICByZXR1cm4gZHR5cGVfaW5kOworfQorCisvKiBD YXN0cyB0aGUgYXJndW1lbnRzIGluIHRoZSBhcnJheSBBUkdTIHRvIHRoZSB0 eXBlcyBvZiB0aGUgcGFyYW1ldGVycyBvZgorICAgdGhlIE0tdGggbWV0aG9k IGluIEZOU19QVFIuICBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBBUkdTIGlz IGdpdmVuIGJ5CisgICBOQVJHUy4gIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rp b24gZm9yIGZpbmRfb3ZlcmxvYWRfbWF0Y2guICAqLworCitzdGF0aWMgdm9p ZAorY2FzdF9hcmdzX3RvX3BhcmFtX3R5cGVzIChzdHJ1Y3QgdmFsdWUgKiph cmdzLCBpbnQgbmFyZ3MsCisJCQkgIHN0cnVjdCBmbl9maWVsZCAqZm5zX3B0 ciwgaW50IG0pCit7CisgIGludCBpOworCisgIGdkYl9hc3NlcnQgKFRZUEVf TkZJRUxEUyAoVFlQRV9GTl9GSUVMRF9UWVBFIChmbnNfcHRyLCBtKSkgPT0g bmFyZ3MpOworCisgIGZvciAoaSA9IDE7IGkgPCBuYXJnczsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCB0eXBlICpwYXJhbV90eXBlID0gVFlQRV9GTl9G SUVMRF9BUkdTIChmbnNfcHRyLCBtKVtpXS50eXBlOworICAgICAgc3RydWN0 IHR5cGUgKmFyZ190eXBlID0gY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAo YXJnc1tpXSkpOworCisgICAgICBDSEVDS19UWVBFREVGIChwYXJhbV90eXBl KTsKKyAgICAgIGlmIChUWVBFX0NPREUgKHBhcmFtX3R5cGUpID09IFRZUEVf Q09ERV9SRUYKKwkgICYmIFRZUEVfQ09ERSAoYXJnX3R5cGUpICE9IFRZUEVf Q09ERV9SRUYpCisJcGFyYW1fdHlwZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHBh cmFtX3R5cGUpOworCisgICAgICBhcmdzW2ldID0gdmFsdWVfY2FzdCAocGFy YW1fdHlwZSwgYXJnc1tpXSk7CisgICAgfQorfQorCisvKiBDaGVja3MgaWYg dGhlIE4xLXRoIG1ldGhvZCBpbiBGTlNfUFRSMSBoYXMgZXhhY3RseSB0aGUg c2FtZSBwYXJhbWV0ZXJzCisgICBhcyB0aGF0IG9mIHRoZSBOMi10aCBtZXRo b2QgaW4gRk5TX1BUUjIuCisgICBSZXR1cm5zIDEgaXMgZXF1YWwsIHplcm8g b3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAorZXF1YWxfcGFyYW1fdHlw ZXNfcCAoc3RydWN0IGZuX2ZpZWxkICpmbnNfcHRyMSwgaW50IG4xLAorCQkg ICAgIHN0cnVjdCBmbl9maWVsZCAqZm5zX3B0cjIsIGludCBuMikKK3sKKyAg aW50IGk7CisKKyAgaWYgKFRZUEVfTkZJRUxEUyAoVFlQRV9GTl9GSUVMRF9U WVBFIChmbnNfcHRyMSwgbjEpKQorICAgICAgIT0gVFlQRV9ORklFTERTIChU WVBFX0ZOX0ZJRUxEX1RZUEUgKGZuc19wdHIyLCBuMikpKQorICAgIHJldHVy biAwOworCisgIGZvciAoaSA9IDE7IGkgPCBUWVBFX05GSUVMRFMgKFRZUEVf Rk5fRklFTERfVFlQRSAoZm5zX3B0cjEsIG4xKSk7IGkrKykKKyAgICB7Cisg ICAgICBzdHJ1Y3QgdHlwZSAqdHlwZTEgPSBUWVBFX0ZOX0ZJRUxEX0FSR1Mg KGZuc19wdHIxLCBuMSlbaV0udHlwZTsKKyAgICAgIHN0cnVjdCB0eXBlICp0 eXBlMiA9IFRZUEVfRk5fRklFTERfQVJHUyAoZm5zX3B0cjIsIG4yKVtpXS50 eXBlOworCisgICAgICBpZiAoIXR5cGVzX2RlZXBseV9lcXVhbCAodHlwZTEs IHR5cGUyKSkKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9 CisKKy8qIENoZWNrcyBpZiB0aGUgZGVyaXZlZCB0eXBlIERUWVBFIGhpZGVz IGEgbWV0aG9kIE5BTUUgb2YgaXRzIGJhc2UgY2xhc3MuCisgICBUaGUgYmFz ZSBjbGFzcyBtZXRob2QgaXMgdGhlIE0tdGggbWV0aG9kIGluIEZOU19QVFIu ICAqLworCitzdGF0aWMgaW50CitkZXJpdmVkX2hpZGVzX2Jhc2VfbWV0aG9k IChzdHJ1Y3QgdHlwZSAqZHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkg ICBzdHJ1Y3QgZm5fZmllbGQgKmZuc19wdHIsIGludCBtKQoreworICBpbnQg aSwgcmV0X3ZhbCA9IDA7CisKKyAgZHR5cGUgPSBjaGVja190eXBlZGVmIChk dHlwZSk7CisgIGdkYl9hc3NlcnQgKFRZUEVfQ09ERSAoZHR5cGUpID09IFRZ UEVfQ09ERV9TVFJVQ1QpOworCisgIGZvciAoaSA9IDA7IGkgPCBUWVBFX05G Tl9GSUVMRFMgKGR0eXBlKTsgaSsrKQorICAgIHsKKyAgICAgIGNvbnN0IGNo YXIgKmZuX2ZpZWxkX25hbWUgPSBUWVBFX0ZOX0ZJRUxETElTVF9OQU1FIChk dHlwZSwgaSk7CisKKyAgICAgIGlmIChmbl9maWVsZF9uYW1lICYmIChzdHJj bXBfaXcgKGZuX2ZpZWxkX25hbWUsIG5hbWUpID09IDApKQorCXsKKwkgIGlu dCBqOworCisJICAvKiBJZiBhIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUg aXMgZm91bmQgaW4gdGhlIGR5bmFtaWMgdHlwZSwKKwkgICAgIHRoZW4gYXNz dW1lIHRoYXQgaXQgaGlkZXMgdGhlIGJhc2UgbWV0aG9kIHVudGlsIGEgbWV0 aG9kIHdpdGgKKwkgICAgIG1hdGNoaW5nIHBhcmFtIHR5cGVzIGlzIGZvdW5k LiAgKi8KKwkgIHJldF92YWwgPSAxOworCisJICBmb3IgKGogPSAwOyBqIDwg VFlQRV9GTl9GSUVMRExJU1RfTEVOR1RIIChkdHlwZSwgaSk7IGorKykKKwkg ICAgeworCSAgICAgIGlmIChlcXVhbF9wYXJhbV90eXBlc19wIChUWVBFX0ZO X0ZJRUxETElTVDEgKGR0eXBlLCBpKSwgaiwKKwkJCQkgICAgICAgZm5zX3B0 ciwgbSkpCisJCXJldHVybiAwOworCSAgICB9CisJfQorICAgIH0KKworICBy ZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogR2l2ZW4gYW4gYXJyYXkgb2YgYXJn dW1lbnRzIChBUkdTKSAod2hpY2ggaW5jbHVkZXMgYW4KQEAgLTIzOTAsOSAr MjU0NSwxMCBAQCB2YWx1ZV9maW5kX29sb2FkX21ldGhvZF9saXN0IChzdHJ1 Y3QgdmFsdWUgKiphcmdwLCBjb25zdCBjaGFyICptZXRob2QsCiAgICBSZXR1 cm4gdmFsdWUgaXMgYW4gaW50ZWdlcjogMCAtPiBnb29kIG1hdGNoLCAxMCAt PiBkZWJ1Z2dlciBhcHBsaWVkCiAgICBub24tc3RhbmRhcmQgY29lcmNpb25z LCAxMDAgLT4gaW5jb21wYXRpYmxlLgogCi0gICBJZiBhIG1ldGhvZCBpcyBi ZWluZyBzZWFyY2hlZCBmb3IsIFZBTFAgd2lsbCBob2xkIHRoZSB2YWx1ZS4K LSAgIElmIGEgbm9uLW1ldGhvZCBpcyBiZWluZyBzZWFyY2hlZCBmb3IsIFNZ TVAgd2lsbCBob2xkIHRoZSBzeW1ib2wgCi0gICBmb3IgaXQuCisgICBJZiB0 aGUgYmVzdCBtYXRjaCBpcyBhIGRlYnVnIG1ldGhvZCB0aGVuIERNX1dPUktF UiB3aWxsIGhvbGQgdGhlIG1hdGNoaW5nCisgICBkZWJ1ZyBtZXRob2Qgd29y a2VyLiAgT3RoZXJ3aXNlLCBWQUxQIHdpbGwgaG9sZCB0aGUgdmFsdWUgaWYg YSBtZXRob2QgaXMKKyAgIGJlaW5nIHNlYXJjaGVkIGZvciwgb3IgU1lNUCB3 aWxsIGhvbGQgdGhlIHN5bWJvbCBmb3IgdGhlIG1hdGNoaW5nIGZ1bmN0aW9u CisgICBpZiBhIG5vbi1tZXRob2QgaXMgYmVpbmcgc2VhcmNoZWQgZm9yLgog CiAgICBJZiBhIG1ldGhvZCBpcyBiZWluZyBzZWFyY2hlZCBmb3IsIGFuZCBp dCBpcyBhIHN0YXRpYyBtZXRob2QsCiAgICB0aGVuIFNUQVRJQ1Agd2lsbCBw b2ludCB0byBhIG5vbi16ZXJvIHZhbHVlLgpAQCAtMjQxMCw2ICsyNTY2LDcg QEAgZmluZF9vdmVybG9hZF9tYXRjaCAoc3RydWN0IHZhbHVlICoqYXJncywg aW50IG5hcmdzLAogCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gb2xv YWRfc2VhcmNoX3R5cGUgbWV0aG9kLAogCQkgICAgIHN0cnVjdCB2YWx1ZSAq Km9ianAsIHN0cnVjdCBzeW1ib2wgKmZzeW0sCiAJCSAgICAgc3RydWN0IHZh bHVlICoqdmFscCwgc3RydWN0IHN5bWJvbCAqKnN5bXAsIAorCQkgICAgIHN0 cnVjdCBkZWJ1Z19tZXRob2Rfd29ya2VyICoqZG1fd29ya2VyLAogCQkgICAg IGludCAqc3RhdGljcCwgY29uc3QgaW50IG5vX2FkbCkKIHsKICAgc3RydWN0 IHZhbHVlICpvYmogPSAob2JqcCA/ICpvYmpwIDogTlVMTCk7CkBAIC0yNDE3 LDE2ICsyNTc0LDI0IEBAIGZpbmRfb3ZlcmxvYWRfbWF0Y2ggKHN0cnVjdCB2 YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKICAgLyogSW5kZXggb2YgYmVzdCBv dmVybG9hZGVkIGZ1bmN0aW9uLiAgKi8KICAgaW50IGZ1bmNfb2xvYWRfY2hh bXAgPSAtMTsKICAgaW50IG1ldGhvZF9vbG9hZF9jaGFtcCA9IC0xOworICBp bnQgc3JjX21ldGhvZF9vbG9hZF9jaGFtcCA9IC0xOworICBpbnQgc3JjX21l dGhvZF9vbG9hZF9jaGFtcF9vcmlnID0gLTE7CisgIGludCBleHRfbWV0aG9k X29sb2FkX2NoYW1wID0gLTE7CisgIGludCBzcmNfYW5kX2V4dF9lcXVhbCA9 IDA7CiAKICAgLyogVGhlIG1lYXN1cmUgZm9yIHRoZSBjdXJyZW50IGJlc3Qg bWF0Y2guICAqLwogICBzdHJ1Y3QgYmFkbmVzc192ZWN0b3IgKm1ldGhvZF9i YWRuZXNzID0gTlVMTDsKICAgc3RydWN0IGJhZG5lc3NfdmVjdG9yICpmdW5j X2JhZG5lc3MgPSBOVUxMOworICBzdHJ1Y3QgYmFkbmVzc192ZWN0b3IgKmV4 dF9tZXRob2RfYmFkbmVzcyA9IE5VTEw7CisgIHN0cnVjdCBiYWRuZXNzX3Zl Y3RvciAqc3JjX21ldGhvZF9iYWRuZXNzID0gTlVMTDsKIAogICBzdHJ1Y3Qg dmFsdWUgKnRlbXAgPSBvYmo7CiAgIC8qIEZvciBtZXRob2RzLCB0aGUgbGlz dCBvZiBvdmVybG9hZGVkIG1ldGhvZHMuICAqLwogICBzdHJ1Y3QgZm5fZmll bGQgKmZuc19wdHIgPSBOVUxMOwogICAvKiBGb3Igbm9uLW1ldGhvZHMsIHRo ZSBsaXN0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb24gc3ltYm9scy4gICovCiAg IHN0cnVjdCBzeW1ib2wgKipvbG9hZF9zeW1zID0gTlVMTDsKKyAgLyogRm9y IGRlYnVnIG1ldGhvZHMsIHRoZSBWRUMgb2YgZGVidWcgbWV0aG9kIHdvcmtl cnMuICAqLworICBWRUMgKGRlYnVnX21ldGhvZF93b3JrZXJfcHRyKSAqZG1f d29ya2VyX3ZlYyA9IE5VTEw7CiAgIC8qIE51bWJlciBvZiBvdmVybG9hZGVk IGluc3RhbmNlcyBiZWluZyBjb25zaWRlcmVkLiAgKi8KICAgaW50IG51bV9m bnMgPSAwOwogICBzdHJ1Y3QgdHlwZSAqYmFzZXR5cGUgPSBOVUxMOwpAQCAt MjQzOCw2ICsyNjAzLDggQEAgZmluZF9vdmVybG9hZF9tYXRjaCAoc3RydWN0 IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogICBjb25zdCBjaGFyICpmdW5j X25hbWUgPSBOVUxMOwogICBlbnVtIG9sb2FkX2NsYXNzaWZpY2F0aW9uIG1h dGNoX3F1YWxpdHk7CiAgIGVudW0gb2xvYWRfY2xhc3NpZmljYXRpb24gbWV0 aG9kX21hdGNoX3F1YWxpdHkgPSBJTkNPTVBBVElCTEU7CisgIGVudW0gb2xv YWRfY2xhc3NpZmljYXRpb24gc3JjX21ldGhvZF9tYXRjaF9xdWFsaXR5ID0g SU5DT01QQVRJQkxFOworICBlbnVtIG9sb2FkX2NsYXNzaWZpY2F0aW9uIGV4 dF9tZXRob2RfbWF0Y2hfcXVhbGl0eSA9IElOQ09NUEFUSUJMRTsKICAgZW51 bSBvbG9hZF9jbGFzc2lmaWNhdGlvbiBmdW5jX21hdGNoX3F1YWxpdHkgPSBJ TkNPTVBBVElCTEU7CiAKICAgLyogR2V0IHRoZSBsaXN0IG9mIG92ZXJsb2Fk ZWQgbWV0aG9kcyBvciBmdW5jdGlvbnMuICAqLwpAQCAtMjQ2NiwxMiArMjYz MywxMiBAQCBmaW5kX292ZXJsb2FkX21hdGNoIChzdHJ1Y3QgdmFsdWUgKiph cmdzLCBpbnQgbmFyZ3MsCiAJfQogCiAgICAgICAvKiBSZXRyaWV2ZSB0aGUg bGlzdCBvZiBtZXRob2RzIHdpdGggdGhlIG5hbWUgTkFNRS4gICovCi0gICAg ICBmbnNfcHRyID0gdmFsdWVfZmluZF9vbG9hZF9tZXRob2RfbGlzdCAoJnRl bXAsIG5hbWUsIAotCQkJCQkgICAgICAwLCAmbnVtX2ZucywgCi0JCQkJCSAg ICAgICZiYXNldHlwZSwgJmJvZmZzZXQpOworICAgICAgdmFsdWVfZmluZF9v bG9hZF9tZXRob2RfbGlzdCAoJnRlbXAsIG5hbWUsIDAsICZmbnNfcHRyLCAm bnVtX2ZucywKKwkJCQkgICAgZG1fd29ya2VyID8gJmRtX3dvcmtlcl92ZWMg OiBOVUxMLAorCQkJCSAgICAmYmFzZXR5cGUsICZib2Zmc2V0KTsKICAgICAg IC8qIElmIHRoaXMgaXMgYSBtZXRob2Qgb25seSBzZWFyY2gsIGFuZCBubyBt ZXRob2RzIHdlcmUgZm91bmQKICAgICAgICAgIHRoZSBzZWFyY2ggaGFzIGZh aWxkLiAgKi8KLSAgICAgIGlmIChtZXRob2QgPT0gTUVUSE9EICYmICghZm5z X3B0ciB8fCAhbnVtX2ZucykpCisgICAgICBpZiAobWV0aG9kID09IE1FVEhP RCAmJiAoIWZuc19wdHIgfHwgIW51bV9mbnMpICYmICFkbV93b3JrZXJfdmVj KQogCWVycm9yIChfKCJDb3VsZG4ndCBmaW5kIG1ldGhvZCAlcyVzJXMiKSwK IAkgICAgICAgb2JqX3R5cGVfbmFtZSwKIAkgICAgICAgKG9ial90eXBlX25h bWUgJiYgKm9ial90eXBlX25hbWUpID8gIjo6IiA6ICIiLApAQCAtMjQ4Miwx OCArMjY0OSw4NyBAQCBmaW5kX292ZXJsb2FkX21hdGNoIChzdHJ1Y3QgdmFs dWUgKiphcmdzLCBpbnQgbmFyZ3MsCiAgICAgICBpZiAoZm5zX3B0cikKIAl7 CiAJICBnZGJfYXNzZXJ0IChUWVBFX0RPTUFJTl9UWVBFIChmbnNfcHRyWzBd LnR5cGUpICE9IE5VTEwpOwotCSAgbWV0aG9kX29sb2FkX2NoYW1wID0gZmlu ZF9vbG9hZF9jaGFtcCAoYXJncywgbmFyZ3MsCi0JICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fZm5zLCBmbnNfcHRyLAot CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgJm1ldGhvZF9iYWRuZXNzKTsKIAotCSAgbWV0aG9kX21hdGNoX3F1YWxp dHkgPQotCSAgICAgIGNsYXNzaWZ5X29sb2FkX21hdGNoIChtZXRob2RfYmFk bmVzcywgbmFyZ3MsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s b2FkX21ldGhvZF9zdGF0aWMgKG1ldGhvZCwgZm5zX3B0ciwKLQkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0 aG9kX29sb2FkX2NoYW1wKSk7CisJICBzcmNfbWV0aG9kX29sb2FkX2NoYW1w ID0gZmluZF9vbG9hZF9jaGFtcCAoYXJncywgbmFyZ3MsCisJCQkJCQkgICAg IG51bV9mbnMsIGZuc19wdHIsIE5VTEwsCisJCQkJCQkgICAgIE5VTEwsICZz cmNfbWV0aG9kX2JhZG5lc3MpOworCisJICBzcmNfbWV0aG9kX21hdGNoX3F1 YWxpdHkgPSBjbGFzc2lmeV9vbG9hZF9tYXRjaAorCSAgICAoc3JjX21ldGhv ZF9iYWRuZXNzLCBuYXJncywKKwkgICAgIG9sb2FkX21ldGhvZF9zdGF0aWMg KG1ldGhvZCwgZm5zX3B0ciwgc3JjX21ldGhvZF9vbG9hZF9jaGFtcCkpOwog Ci0JICBtYWtlX2NsZWFudXAgKHhmcmVlLCBtZXRob2RfYmFkbmVzcyk7CisJ ICBtYWtlX2NsZWFudXAgKHhmcmVlLCBzcmNfbWV0aG9kX2JhZG5lc3MpOwog CX0KIAorICAgICAgaWYgKGRtX3dvcmtlciAmJiBWRUNfbGVuZ3RoIChkZWJ1 Z19tZXRob2Rfd29ya2VyX3B0ciwgZG1fd29ya2VyX3ZlYykpCisJeworCSAg ZXh0X21ldGhvZF9vbG9hZF9jaGFtcCA9IGZpbmRfb2xvYWRfY2hhbXAgKGFy Z3MsIG5hcmdzLAorCQkJCQkJICAgICAwLCBOVUxMLCBkbV93b3JrZXJfdmVj LAorCQkJCQkJICAgICBOVUxMLCAmZXh0X21ldGhvZF9iYWRuZXNzKTsKKwkg IGV4dF9tZXRob2RfbWF0Y2hfcXVhbGl0eSA9IGNsYXNzaWZ5X29sb2FkX21h dGNoIChleHRfbWV0aG9kX2JhZG5lc3MsCisJCQkJCQkJICAgbmFyZ3MsIDAp OworCSAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgZXh0X21ldGhvZF9iYWRuZXNz KTsKKwkgIG1ha2VfZGVidWdfbWV0aG9kX3dvcmtlcl92ZWNfY2xlYW51cCAo ZG1fd29ya2VyX3ZlYyk7CisJfQorCisgICAgICBpZiAoc3JjX21ldGhvZF9v bG9hZF9jaGFtcCA+PSAwICYmIGV4dF9tZXRob2Rfb2xvYWRfY2hhbXAgPj0g MCkKKwl7CisJICBzd2l0Y2ggKGNvbXBhcmVfYmFkbmVzcyAoZXh0X21ldGhv ZF9iYWRuZXNzLCBzcmNfbWV0aG9kX2JhZG5lc3MpKQorCSAgICB7CisJICAg ICAgY2FzZSAwOiAvKiBTcmMgbWV0aG9kIGFuZCBkZWJ1ZyBtZXRob2QgYXJl IGVxdWFsbHkgZ29vZC4gICovCisJCXNyY19hbmRfZXh0X2VxdWFsID0gMTsK KwkJLyogSWYgc3JjIG1ldGhvZCBhbmQgZGVidWcgbWV0aG9kIGFyZSBlcXVh bGx5IGdvb2QsIHRoZW4gZGVidWcKKwkJICAgbWV0aG9kIHNob3VsZCBiZSB0 aGUgd2lubmVyLiAgSGVuY2UsIGZhbGwgdGhyb3VnaCB0byB0aGUKKwkJICAg Y2FzZSB3aGVyZSBhIGRlYnVnIG1ldGhvZCBpcyBiZXR0ZXIgdGhhbiB0aGUg c291cmNlCisJCSAgIG1ldGhvZCwgZXhjZXB0IHdoZW4gdGhlIGRlYnVnIG1l dGhvZCBtYXRjaCBxdWFsaXR5IGlzCisJCSAgIG5vbi1zdGFuZGFyZC4gICov CisJCS8qIEZBTExUSFJPVUdIICovCisJICAgICAgY2FzZSAxOiAvKiBTcmMg bWV0aG9kIGFuZCBleHQgbWV0aG9kIGFyZSBpbmNvbXBhdGlibGUuICAqLwor CQkvKiBJZiBleHQgbWV0aG9kIG1hdGNoIGlzIG5vdCBzdGFuZGFyZCwgdGhl biBsZXQgc291cmNlIG1ldGhvZAorCQkgICB3aW4uICBPdGhlcndpc2UsIGZh bGx0aHJvdWdoIHRvIGxldCBkZWJ1ZyBtZXRob2Qgd2luLiAgKi8KKwkJaWYg KGV4dF9tZXRob2RfbWF0Y2hfcXVhbGl0eSAhPSBTVEFOREFSRCkKKwkJICB7 CisJCSAgICBtZXRob2Rfb2xvYWRfY2hhbXAgPSBzcmNfbWV0aG9kX29sb2Fk X2NoYW1wOworCQkgICAgbWV0aG9kX2JhZG5lc3MgPSBzcmNfbWV0aG9kX2Jh ZG5lc3M7CisJCSAgICBleHRfbWV0aG9kX29sb2FkX2NoYW1wID0gLTE7CisJ CSAgICBtZXRob2RfbWF0Y2hfcXVhbGl0eSA9IHNyY19tZXRob2RfbWF0Y2hf cXVhbGl0eTsKKwkJICAgIGJyZWFrOworCQkgIH0KKwkJLyogRkFMTFRIUk9V R0ggKi8KKwkgICAgICBjYXNlIDI6IC8qIEV4dCBtZXRob2QgaXMgY2hhbXBp b24uICAqLworCQltZXRob2Rfb2xvYWRfY2hhbXAgPSBleHRfbWV0aG9kX29s b2FkX2NoYW1wOworCQltZXRob2RfYmFkbmVzcyA9IGV4dF9tZXRob2RfYmFk bmVzczsKKwkJLyogV2Ugc2F2ZSB0aGUgc291cmNlIG92ZXJsb2FkIGNoYW1w IGluZGV4IHNvIHRoYXQgaXQgY2FuIGJlCisJCSAgIHVzZWQgdG8gZGV0ZXJt aW5lIHdoZXRoZXIgdGhlIHNvdXJjZSBtZXRob2QgaXMgdmlydHVhbAorCQkg ICBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKwkJc3JjX21ldGhvZF9v bG9hZF9jaGFtcF9vcmlnID0gc3JjX21ldGhvZF9vbG9hZF9jaGFtcDsKKwkJ c3JjX21ldGhvZF9vbG9hZF9jaGFtcCA9IC0xOworCQltZXRob2RfbWF0Y2hf cXVhbGl0eSA9IGV4dF9tZXRob2RfbWF0Y2hfcXVhbGl0eTsKKwkJYnJlYWs7 CisJICAgICAgY2FzZSAzOiAvKiBTcmMgbWV0aG9kIGlzIGNoYW1waW9uLiAg Ki8KKwkJbWV0aG9kX29sb2FkX2NoYW1wID0gc3JjX21ldGhvZF9vbG9hZF9j aGFtcDsKKwkJbWV0aG9kX2JhZG5lc3MgPSBzcmNfbWV0aG9kX2JhZG5lc3M7 CisJCWV4dF9tZXRob2Rfb2xvYWRfY2hhbXAgPSAtMTsKKwkJbWV0aG9kX21h dGNoX3F1YWxpdHkgPSBzcmNfbWV0aG9kX21hdGNoX3F1YWxpdHk7CisJCWJy ZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCWdkYl9hc3NlcnRfbm90X3JlYWNo ZWQgKCJJbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCBvdmVybG9hZCAiCisJ CQkJCSJjb21wYXJpc29uIHJlc3VsdCIpOworCQlicmVhazsKKwkgICAgfQor CX0KKyAgICAgIGVsc2UgaWYgKHNyY19tZXRob2Rfb2xvYWRfY2hhbXAgPj0g MCkKKwl7CisJICBtZXRob2Rfb2xvYWRfY2hhbXAgPSBzcmNfbWV0aG9kX29s b2FkX2NoYW1wOworCSAgbWV0aG9kX2JhZG5lc3MgPSBzcmNfbWV0aG9kX2Jh ZG5lc3M7CisJICBtZXRob2RfbWF0Y2hfcXVhbGl0eSA9IHNyY19tZXRob2Rf bWF0Y2hfcXVhbGl0eTsKKwl9CisgICAgICBlbHNlIGlmIChleHRfbWV0aG9k X29sb2FkX2NoYW1wID49IDApCisJeworCSAgbWV0aG9kX29sb2FkX2NoYW1w ID0gZXh0X21ldGhvZF9vbG9hZF9jaGFtcDsKKwkgIG1ldGhvZF9iYWRuZXNz ID0gZXh0X21ldGhvZF9iYWRuZXNzOworCSAgbWV0aG9kX21hdGNoX3F1YWxp dHkgPSBleHRfbWV0aG9kX21hdGNoX3F1YWxpdHk7CisJfQogICAgIH0KIAog ICBpZiAobWV0aG9kID09IE5PTl9NRVRIT0QgfHwgbWV0aG9kID09IEJPVEgp CkBAIC0yNjM2LDIxICsyODcyLDYgQEAgZmluZF9vdmVybG9hZF9tYXRjaCAo c3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogCQkgZnVuY19uYW1l KTsKICAgICB9CiAKLSAgaWYgKHN0YXRpY3AgIT0gTlVMTCkKLSAgICAqc3Rh dGljcCA9IG9sb2FkX21ldGhvZF9zdGF0aWMgKG1ldGhvZCwgZm5zX3B0ciwg bWV0aG9kX29sb2FkX2NoYW1wKTsKLQotICBpZiAobWV0aG9kX29sb2FkX2No YW1wID49IDApCi0gICAgewotICAgICAgaWYgKFRZUEVfRk5fRklFTERfVklS VFVBTF9QIChmbnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXApKQotCSp2YWxw ID0gdmFsdWVfdmlydHVhbF9mbl9maWVsZCAoJnRlbXAsIGZuc19wdHIsIG1l dGhvZF9vbG9hZF9jaGFtcCwKLQkJCQkJYmFzZXR5cGUsIGJvZmZzZXQpOwot ICAgICAgZWxzZQotCSp2YWxwID0gdmFsdWVfZm5fZmllbGQgKCZ0ZW1wLCBm bnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXAsCi0JCQkJYmFzZXR5cGUsIGJv ZmZzZXQpOwotICAgIH0KLSAgZWxzZQotICAgICpzeW1wID0gb2xvYWRfc3lt c1tmdW5jX29sb2FkX2NoYW1wXTsKLQogICBpZiAob2JqcCkKICAgICB7CiAg ICAgICBzdHJ1Y3QgdHlwZSAqdGVtcF90eXBlID0gY2hlY2tfdHlwZWRlZiAo dmFsdWVfdHlwZSAodGVtcCkpOwpAQCAtMjY2MCwxMCArMjg4MSwxMTIgQEAg ZmluZF9vdmVybG9hZF9tYXRjaCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50 IG5hcmdzLAogCSAgJiYgKFRZUEVfQ09ERSAob2JqdHlwZSkgPT0gVFlQRV9D T0RFX1BUUgogCSAgICAgIHx8IFRZUEVfQ09ERSAob2JqdHlwZSkgPT0gVFlQ RV9DT0RFX1JFRikpCiAJewotCSAgdGVtcCA9IHZhbHVlX2FkZHIgKHRlbXAp OworCSAgKm9ianAgPSB2YWx1ZV9hZGRyICh0ZW1wKTsKKwl9CisgICAgICBl bHNlCisJKm9ianAgPSB0ZW1wOworICAgIH0KKworICBpZiAoc3RhdGljcCAh PSBOVUxMKQorICAgICpzdGF0aWNwID0gb2xvYWRfbWV0aG9kX3N0YXRpYyAo bWV0aG9kLCBmbnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXApOworCisgIGlm IChtZXRob2Rfb2xvYWRfY2hhbXAgPj0gMCkKKyAgICB7CisgICAgICBpZiAo c3JjX21ldGhvZF9vbG9hZF9jaGFtcCA+PSAwKQorCXsKKwkgIC8qIEV2ZW4g aWYgdGhlIHNvdXJjZSBtZXRob2Qgd2FzIHRoZSB3aW5uZXIsIGl0IGNvdWxk IGJlIGEgdmlydHVhbAorCSAgICAgZnVuY3Rpb24uICBJbiBzdWNoIGEgY2Fz ZSwgd2Ugc2hvdWxkIGxvb2sgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZgorCSAg ICAgZGVidWcgbWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBvYmplY3QncyBkeW5h bWljIHR5cGUuICAqLworCSAgaWYgKFRZUEVfRk5fRklFTERfVklSVFVBTF9Q IChmbnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXApKQorCSAgICB7CisJICAg ICAgc3RydWN0IHR5cGUgKmR0eXBlOworCisJICAgICAgZHR5cGUgPSB2YWx1 ZV9oYXNfaW5kaXJlY3RfZHluYW1pY190eXBlIChhcmdzWzBdKTsKKwkgICAg ICAvKiBMb29rIGZvciBiZXR0ZXIgbWV0aG9kcyBpbiB0aGUgZHluYW1pYyB0 eXBlIG9ubHkgaWYgdGhlCisJCSBkeW5hbWljIHR5cGUgZG9lcyBub3QgaGlk ZSB0aGUgYmFzZSBjbGFzcyB2aXJ0dWFsIG1ldGhvZC4gICovCisJICAgICAg aWYgKGR0eXBlICE9IE5VTEwKKwkJICAmJiAhZGVyaXZlZF9oaWRlc19iYXNl X21ldGhvZCAoVFlQRV9UQVJHRVRfVFlQRSAoZHR5cGUpLAorCQkJCQkJIG5h bWUsIGZuc19wdHIsCisJCQkJCQkgbWV0aG9kX29sb2FkX2NoYW1wKSkKKwkJ eworCQkgIC8qIElmIHRoZSBvYmplY3QgaGFzIGEgZHluYW1pYyB0eXBlLCB0 aGVuIGxvb2sgZm9yIG1hdGNoaW5nCisJCSAgICAgbWV0aG9kcyBmb3IgaXRz IGR5bmFtaWMgdHlwZS4gICovCisJCSAgYXJnc1swXSA9IHZhbHVlX2Nhc3Qg KGR0eXBlLCBhcmdzWzBdKTsKKwkJICBkb19jbGVhbnVwcyAoYWxsX2NsZWFu dXBzKTsKKwkJICAvKiBFdmVuIGlmIHRoZSBkZXJpdmVkIGNsYXNzIGRvZXMg bm90IGhpZGUgdGhlIGJhc2UgY2xhc3MKKwkJICAgICBtZXRob2QsIGl0IGNv dWxkIGRlZmluZSBhbm90aGVyIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUK KwkJICAgICBidXQgd2l0aCBjb21wYXRpYmxlIHBhcmFtZXRlcnMuICBBdm9p ZCB0aGUgY2hhbmNlIG9mCisJCSAgICAgcGlja2luZyB1cCB0aGUgd3Jvbmcg ZnVuY3Rpb24gYnkgZXhwbGljaXRseSBjYXN0aW5nIHRoZQorCQkgICAgIGFy Z3MgdG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gcGFyYW0gdHlwZXMuICAKKwor CQkgICAgIEV4YW1wbGU6CisKKwkJICAgICBjbGFzcyBiYXNlCisJCSAgICAg eworCQkgICAgIHB1YmxpYzoKKwkJICAgICAgIHZpcnR1YWwgaW50IGZvbyAo Y2hhciBpKTsKKwkJICAgICB9OworCisJCSAgICAgY2xhc3MgZGVyaXZlZCA6 IHB1YmxpYyBiYXNlCisJCSAgICAgeworCQkgICAgIHB1YmxpYzoKKwkJICAg ICAgIHZpcnR1YWwgaW50IGZvbyAoY2hhciBpKTsKKwkJICAgICAgIGludCBm b28gKGludCBpKTsKKwkJICAgICB9OworCisJCSAgICAgSWYgdGhlIGFyZyB0 byBiYXNlOjpmb28gd2FzIGFzIGludCwgdGhlbiBsb29raW5nIGZvcgorCQkg ICAgIG1hdGNoaW5nIG1ldGhvZHMgaW4gdGhlIGR5bmFtaWMgb2JqZWN0IHdp bGwgbWF0Y2ggZm9vKGludCkKKwkJICAgICBhbmQgbm90IGZvbyAoY2hhcikg ZXZlbiB0aG91Z2ggdGhlIGRlcml2ZWQgY2xhc3Mgb3ZlcnJpZGVzCisJCSAg ICAgKGRvZXMgbm90IGhpZGUpIHRoZSBiYXNlIGNsYXNzIHZpcnR1YWwgbWV0 aG9kLiAgKi8KKwkJICBjYXN0X2FyZ3NfdG9fcGFyYW1fdHlwZXMgKGFyZ3Ms IG5hcmdzLCBmbnNfcHRyLAorCQkJCQkgICAgbWV0aG9kX29sb2FkX2NoYW1w KTsKKwkJICByZXR1cm4gZmluZF9vdmVybG9hZF9tYXRjaCAoYXJncywgbmFy Z3MsIG5hbWUsIG1ldGhvZCwKKwkJCQkJICAgICAgb2JqcCwgZnN5bSwgdmFs cCwgc3ltcCwgZG1fd29ya2VyLAorCQkJCQkgICAgICBzdGF0aWNwLCBub19h ZGwpOworCQl9CisJICAgICAgZWxzZQorCQkqdmFscCA9IHZhbHVlX3ZpcnR1 YWxfZm5fZmllbGQgKCZ0ZW1wLCBmbnNfcHRyLAorCQkJCQkJbWV0aG9kX29s b2FkX2NoYW1wLAorCQkJCQkJYmFzZXR5cGUsIGJvZmZzZXQpOworCSAgICB9 CisJICBlbHNlCisJICAgICp2YWxwID0gdmFsdWVfZm5fZmllbGQgKCZ0ZW1w LCBmbnNfcHRyLCBtZXRob2Rfb2xvYWRfY2hhbXAsCisJCQkJICAgIGJhc2V0 eXBlLCBib2Zmc2V0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogRGVi dWcgbWV0aG9kcyBjYW5ub3QgYmUgdmlydHVhbC4gIEhvd2V2ZXIsIGlmIGEg ZGVidWcgbWV0aG9kIGlzIGFzCisJICAgICBnb29kIGFzIHRoZSBzb3VyY2Ug bWV0aG9kLCBhbmQgaWYgdGhlIHNvdXJjZSBtZXRob2QgaXMgdmlydHVhbCwg d2UKKwkgICAgIHNob3VsZCBsb29rIGZvciB0aGUgcG9zc2liaWxpdHkgb2Yg YmV0dGVyIG1hdGNoaW5nIG1ldGhvZHMgZGVmaW5lZAorCSAgICAgZm9yIHRo ZSBkeW5hbWljIHR5cGUgb2YgdGhlIG9iamVjdC4gICovCisJICBpZiAoc3Jj X2FuZF9leHRfZXF1YWwKKwkgICAgICAmJiBUWVBFX0ZOX0ZJRUxEX1ZJUlRV QUxfUCAoZm5zX3B0ciwgc3JjX21ldGhvZF9vbG9hZF9jaGFtcF9vcmlnKSkK KwkgICAgeworCSAgICAgIHN0cnVjdCB0eXBlICpkdHlwZTsKKworCSAgICAg IGR0eXBlID0gdmFsdWVfaGFzX2luZGlyZWN0X2R5bmFtaWNfdHlwZSAoYXJn c1swXSk7CisJICAgICAgaWYgKGR0eXBlICE9IE5VTEwKKwkJICAmJiAhZGVy aXZlZF9oaWRlc19iYXNlX21ldGhvZCAoVFlQRV9UQVJHRVRfVFlQRSAoZHR5 cGUpLAorCQkJCQkJIG5hbWUsIGZuc19wdHIsCisJCQkJCQkgc3JjX21ldGhv ZF9vbG9hZF9jaGFtcF9vcmlnKSkKKwkJeworCQkgIGFyZ3NbMF0gPSB2YWx1 ZV9jYXN0IChkdHlwZSwgYXJnc1swXSk7CisJCSAgZG9fY2xlYW51cHMgKGFs bF9jbGVhbnVwcyk7CisJCSAgY2FzdF9hcmdzX3RvX3BhcmFtX3R5cGVzIChh cmdzLCBuYXJncywgZm5zX3B0ciwKKwkJCQkJICAgIHNyY19tZXRob2Rfb2xv YWRfY2hhbXBfb3JpZyk7CisJCSAgcmV0dXJuIGZpbmRfb3ZlcmxvYWRfbWF0 Y2ggKGFyZ3MsIG5hcmdzLCBuYW1lLCBtZXRob2QsCisJCQkJCSAgICAgIG9i anAsIGZzeW0sIHZhbHAsIHN5bXAsIGRtX3dvcmtlciwKKwkJCQkJICAgICAg c3RhdGljcCwgbm9fYWRsKTsKKwkJfQorCSAgICB9CisKKwkgICpkbV93b3Jr ZXIgPSBjbG9uZV9kZWJ1Z19tZXRob2Rfd29ya2VyICgKKwkgICAgIFZFQ19p bmRleCAoZGVidWdfbWV0aG9kX3dvcmtlcl9wdHIsIGRtX3dvcmtlcl92ZWMs CisJCQlleHRfbWV0aG9kX29sb2FkX2NoYW1wKSk7CiAJfQotICAgICAgKm9i anAgPSB0ZW1wOwogICAgIH0KKyAgZWxzZQorICAgICpzeW1wID0gb2xvYWRf c3ltc1tmdW5jX29sb2FkX2NoYW1wXTsKIAogICBkb19jbGVhbnVwcyAoYWxs X2NsZWFudXBzKTsKIApAQCAtMjc5OCw3ICszMTIxLDcgQEAgZmluZF9vbG9h ZF9jaGFtcF9uYW1lc3BhY2VfbG9vcCAoc3RydWN0IHZhbHVlICoqYXJncywg aW50IG5hcmdzLAogICAgICsrbnVtX2ZuczsKIAogICBuZXdfb2xvYWRfY2hh bXAgPSBmaW5kX29sb2FkX2NoYW1wIChhcmdzLCBuYXJncywgbnVtX2ZucywK LQkJCQkgICAgICBOVUxMLCBuZXdfb2xvYWRfc3ltcywKKwkJCQkgICAgICBO VUxMLCBOVUxMLCBuZXdfb2xvYWRfc3ltcywKIAkJCQkgICAgICAmbmV3X29s b2FkX2NoYW1wX2J2KTsKIAogICAvKiBDYXNlIDE6IFdlIGZvdW5kIGEgZ29v ZCBtYXRjaC4gIEZyZWUgZWFybGllciBtYXRjaGVzIChpZiBhbnkpLApAQCAt MjgzNiw5ICszMTU5LDEzIEBAIGZpbmRfb2xvYWRfY2hhbXBfbmFtZXNwYWNl X2xvb3AgKHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKIAogLyog TG9vayBmb3IgYSBmdW5jdGlvbiB0byB0YWtlIE5BUkdTIGFyZ3Mgb2YgQVJH Uy4gIEZpbmQKICAgIHRoZSBiZXN0IG1hdGNoIGZyb20gYW1vbmcgdGhlIG92 ZXJsb2FkZWQgbWV0aG9kcyBvciBmdW5jdGlvbnMKLSAgIGdpdmVuIGJ5IEZO U19QVFIgb3IgT0xPQURfU1lNUywgcmVzcGVjdGl2ZWx5LiAgT25lLCBhbmQg b25seSBvbmUgb2YKLSAgIEZOU19QVFIgYW5kIE9MT0FEX1NZTVMgY2FuIGJl IG5vbi1OVUxMLiAgVGhlIG51bWJlciBvZgotICAgbWV0aG9kcy9mdW5jdGlv bnMgaW4gdGhlIG5vbi1OVUxMIGxpc3QgaXMgZ2l2ZW4gYnkgTlVNX0ZOUy4K KyAgIGdpdmVuIGJ5IEZOU19QVFIgb3IgT0xPQURfU1lNUyBvciBETV9XT1JL RVJfVkVDLCByZXNwZWN0aXZlbHkuCisgICBPbmUsIGFuZCBvbmx5IG9uZSBv ZiBGTlNfUFRSLCBPTE9BRF9TWU1TIGFuZCBETV9XT1JLRVJfVkVDIGNhbiBi ZQorICAgbm9uLU5VTEwuCisKKyAgIElmIERNX1dPUktFUl9WRUMgaXMgTlVM TCwgdGhlbiB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheXMgRk5TX1BUUgorICAg b3IgT0xPQURfU1lNUyAod2hpY2hldmVyIGlzIG5vbi1OVUxMKSBpcyBzcGVj aWZpZWQgaW4gTlVNX0ZOUy4KKwogICAgUmV0dXJuIHRoZSBpbmRleCBvZiB0 aGUgYmVzdCBtYXRjaDsgc3RvcmUgYW4gaW5kaWNhdGlvbiBvZiB0aGUKICAg IHF1YWxpdHkgb2YgdGhlIG1hdGNoIGluIE9MT0FEX0NIQU1QX0JWLgogCkBA IC0yODQ3LDEwICszMTc0LDEzIEBAIGZpbmRfb2xvYWRfY2hhbXBfbmFtZXNw YWNlX2xvb3AgKHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKIHN0 YXRpYyBpbnQKIGZpbmRfb2xvYWRfY2hhbXAgKHN0cnVjdCB2YWx1ZSAqKmFy Z3MsIGludCBuYXJncywKIAkJICBpbnQgbnVtX2Zucywgc3RydWN0IGZuX2Zp ZWxkICpmbnNfcHRyLAorCQkgIFZFQyAoZGVidWdfbWV0aG9kX3dvcmtlcl9w dHIpICpkbV93b3JrZXJfdmVjLAogCQkgIHN0cnVjdCBzeW1ib2wgKipvbG9h ZF9zeW1zLAogCQkgIHN0cnVjdCBiYWRuZXNzX3ZlY3RvciAqKm9sb2FkX2No YW1wX2J2KQogewogICBpbnQgaXg7CisgIGludCBmbl9jb3VudDsKKyAgaW50 IGRtX3dvcmtlcl92ZWNfbiA9IFZFQ19sZW5ndGggKGRlYnVnX21ldGhvZF93 b3JrZXJfcHRyLCBkbV93b3JrZXJfdmVjKTsKICAgLyogQSBtZWFzdXJlIG9m IGhvdyBnb29kIGFuIG92ZXJsb2FkZWQgaW5zdGFuY2UgaXMuICAqLwogICBz dHJ1Y3QgYmFkbmVzc192ZWN0b3IgKmJ2OwogICAvKiBJbmRleCBvZiBiZXN0 IG92ZXJsb2FkZWQgZnVuY3Rpb24uICAqLwpAQCAtMjg2MCw0MCArMzE5MCw0 OSBAQCBmaW5kX29sb2FkX2NoYW1wIChzdHJ1Y3QgdmFsdWUgKiphcmdzLCBp bnQgbmFyZ3MsCiAgIC8qIDAgPT4gbm8gYW1iaWd1aXR5LCAxID0+IHR3byBn b29kIGZ1bmNzLCAyID0+IGluY29tcGFyYWJsZSBmdW5jcy4gICovCiAKICAg LyogQSBjaGFtcGlvbiBjYW4gYmUgZm91bmQgYW1vbmcgbWV0aG9kcyBhbG9u ZSwgb3IgYW1vbmcgZnVuY3Rpb25zCi0gICAgIGFsb25lLCBidXQgbm90IGJv dGguICAqLwotICBnZGJfYXNzZXJ0ICgoZm5zX3B0ciAhPSBOVUxMKSArIChv bG9hZF9zeW1zICE9IE5VTEwpID09IDEpOworICAgICBhbG9uZSwgb3IgaW4g ZGVidWcgbWV0aG9kcyBhbG9uZSwgYnV0IG5vdCBpbiBtb3JlIHRoYW4gb25l IG9mIHRoZXNlCisgICAgIGdyb3Vwcy4gICovCisgIGdkYl9hc3NlcnQgKChm bnNfcHRyICE9IE5VTEwpICsgKG9sb2FkX3N5bXMgIT0gTlVMTCkgKyAoZG1f d29ya2VyX3ZlYyAhPSBOVUxMKQorCSAgICAgID09IDEpOwogCiAgICpvbG9h ZF9jaGFtcF9idiA9IE5VTEw7CiAKKyAgZm5fY291bnQgPSAoZG1fd29ya2Vy X3ZlYyAhPSBOVUxMCisJICAgICAgPyBWRUNfbGVuZ3RoIChkZWJ1Z19tZXRo b2Rfd29ya2VyX3B0ciwgZG1fd29ya2VyX3ZlYykKKwkgICAgICA6IG51bV9m bnMpOwogICAvKiBDb25zaWRlciBlYWNoIGNhbmRpZGF0ZSBpbiB0dXJuLiAg Ki8KLSAgZm9yIChpeCA9IDA7IGl4IDwgbnVtX2ZuczsgaXgrKykKKyAgZm9y IChpeCA9IDA7IGl4IDwgZm5fY291bnQ7IGl4KyspCiAgICAgewogICAgICAg aW50IGpqOwotICAgICAgaW50IHN0YXRpY19vZmZzZXQ7CisgICAgICBpbnQg c3RhdGljX29mZnNldCA9IDA7CiAgICAgICBpbnQgbnBhcm1zOwogICAgICAg c3RydWN0IHR5cGUgKipwYXJtX3R5cGVzOworICAgICAgc3RydWN0IGRlYnVn X21ldGhvZF93b3JrZXIgKndvcmtlciA9IE5VTEw7CiAKLSAgICAgIGlmIChm bnNfcHRyICE9IE5VTEwpCisgICAgICBpZiAoZG1fd29ya2VyX3ZlYyAhPSBO VUxMKQogCXsKLQkgIG5wYXJtcyA9IFRZUEVfTkZJRUxEUyAoVFlQRV9GTl9G SUVMRF9UWVBFIChmbnNfcHRyLCBpeCkpOwotCSAgc3RhdGljX29mZnNldCA9 IG9sb2FkX21ldGhvZF9zdGF0aWMgKDEsIGZuc19wdHIsIGl4KTsKKwkgIHdv cmtlciA9IFZFQ19pbmRleCAoZGVidWdfbWV0aG9kX3dvcmtlcl9wdHIsIGRt X3dvcmtlcl92ZWMsIGl4KTsKKwkgIHBhcm1fdHlwZXMgPSBnZXRfZGVidWdf bWV0aG9kX2FyZ190eXBlcyAod29ya2VyLCAmbnBhcm1zKTsKIAl9CiAgICAg ICBlbHNlCiAJewotCSAgLyogSWYgaXQncyBub3QgYSBtZXRob2QsIHRoaXMg aXMgdGhlIHByb3BlciBwbGFjZS4gICovCi0JICBucGFybXMgPSBUWVBFX05G SUVMRFMgKFNZTUJPTF9UWVBFIChvbG9hZF9zeW1zW2l4XSkpOwotCSAgc3Rh dGljX29mZnNldCA9IDA7CisJICBpZiAoZm5zX3B0ciAhPSBOVUxMKQorCSAg ICB7CisJICAgICAgbnBhcm1zID0gVFlQRV9ORklFTERTIChUWVBFX0ZOX0ZJ RUxEX1RZUEUgKGZuc19wdHIsIGl4KSk7CisJICAgICAgc3RhdGljX29mZnNl dCA9IG9sb2FkX21ldGhvZF9zdGF0aWMgKDEsIGZuc19wdHIsIGl4KTsKKwkg ICAgfQorCSAgZWxzZQorCSAgICBucGFybXMgPSBUWVBFX05GSUVMRFMgKFNZ TUJPTF9UWVBFIChvbG9hZF9zeW1zW2l4XSkpOworCisJICBwYXJtX3R5cGVz ID0gKHN0cnVjdCB0eXBlICoqKQorCSAgICB4bWFsbG9jIChucGFybXMgKiAo c2l6ZW9mIChzdHJ1Y3QgdHlwZSAqKSkpOworCSAgZm9yIChqaiA9IDA7IGpq IDwgbnBhcm1zOyBqaisrKQorCSAgICBwYXJtX3R5cGVzW2pqXSA9IChmbnNf cHRyICE9IE5VTEwKKwkJCSAgICAgID8gKFRZUEVfRk5fRklFTERfQVJHUyAo Zm5zX3B0ciwgaXgpW2pqXS50eXBlKQorCQkJICAgICAgOiBUWVBFX0ZJRUxE X1RZUEUgKFNZTUJPTF9UWVBFIChvbG9hZF9zeW1zW2l4XSksCisJCQkgICAg ICBqaikpOwogCX0KIAotICAgICAgLyogUHJlcGFyZSBhcnJheSBvZiBwYXJh bWV0ZXIgdHlwZXMuICAqLwotICAgICAgcGFybV90eXBlcyA9IChzdHJ1Y3Qg dHlwZSAqKikgCi0JeG1hbGxvYyAobnBhcm1zICogKHNpemVvZiAoc3RydWN0 IHR5cGUgKikpKTsKLSAgICAgIGZvciAoamogPSAwOyBqaiA8IG5wYXJtczsg amorKykKLQlwYXJtX3R5cGVzW2pqXSA9IChmbnNfcHRyICE9IE5VTEwKLQkJ CSAgPyAoVFlQRV9GTl9GSUVMRF9BUkdTIChmbnNfcHRyLCBpeClbampdLnR5 cGUpCi0JCQkgIDogVFlQRV9GSUVMRF9UWVBFIChTWU1CT0xfVFlQRSAob2xv YWRfc3ltc1tpeF0pLCAKLQkJCQkJICAgICBqaikpOwotCiAgICAgICAvKiBD b21wYXJlIHBhcmFtZXRlciB0eXBlcyB0byBzdXBwbGllZCBhcmd1bWVudCB0 eXBlcy4gIFNraXAKICAgICAgICAgIFRISVMgZm9yIHN0YXRpYyBtZXRob2Rz LiAgKi8KICAgICAgIGJ2ID0gcmFua19mdW5jdGlvbiAocGFybV90eXBlcywg bnBhcm1zLCAKQEAgLTI5MjcsMTAgKzMyNjYsMTQgQEAgZmluZF9vbG9hZF9j aGFtcCAoc3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdzLAogICAgICAg eGZyZWUgKHBhcm1fdHlwZXMpOwogICAgICAgaWYgKG92ZXJsb2FkX2RlYnVn KQogCXsKLQkgIGlmIChmbnNfcHRyKQorCSAgaWYgKGZuc19wdHIgIT0gTlVM TCkKIAkgICAgZnByaW50Zl9maWx0ZXJlZCAoZ2RiX3N0ZGVyciwKIAkJCSAg ICAgICJPdmVybG9hZGVkIG1ldGhvZCBpbnN0YW5jZSAlcywgIyBvZiBwYXJt cyAlZFxuIiwKIAkJCSAgICAgIGZuc19wdHJbaXhdLnBoeXNuYW1lLCBucGFy bXMpOworCSAgZWxzZSBpZiAoZG1fd29ya2VyX3ZlYyAhPSBOVUxMKQorCSAg ICBmcHJpbnRmX2ZpbHRlcmVkIChnZGJfc3RkZXJyLAorCQkJICAgICAgIkRl YnVnIG1ldGhvZCB3b3JrZXIsICMgb2YgcGFybXMgJWRcbiIsCisJCQkgICAg ICBucGFybXMpOwogCSAgZWxzZQogCSAgICBmcHJpbnRmX2ZpbHRlcmVkIChn ZGJfc3RkZXJyLAogCQkJICAgICAgIk92ZXJsb2FkZWQgZnVuY3Rpb24gaW5z dGFuY2UgIgpkaWZmIC0tZ2l0IGEvZ2RiL3ZhbHVlLmggYi9nZGIvdmFsdWUu aAppbmRleCA5NDI1YTBlLi5kMzdlN2Y5IDEwMDY0NAotLS0gYS9nZGIvdmFs dWUuaAorKysgYi9nZGIvdmFsdWUuaApAQCAtMzEsNiArMzEsNyBAQCBzdHJ1 Y3QgdHlwZTsKIHN0cnVjdCB1aV9maWxlOwogc3RydWN0IGxhbmd1YWdlX2Rl Zm47CiBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9uczsKK3N0cnVjdCBkZWJ1 Z19tZXRob2Rfd29ya2VyOwogCiAvKiBUaGUgc3RydWN0dXJlIHdoaWNoIGRl ZmluZXMgdGhlIHR5cGUgb2YgYSB2YWx1ZS4gIEl0IHNob3VsZCBuZXZlcgog ICAgYmUgcG9zc2libGUgZm9yIGEgcHJvZ3JhbSBsdmFsIHZhbHVlIHRvIHN1 cnZpdmUgb3ZlciBhIGNhbGwgdG8gdGhlCkBAIC02OTAsNiArNjkxLDcgQEAg ZXh0ZXJuIGludCBmaW5kX292ZXJsb2FkX21hdGNoIChzdHJ1Y3QgdmFsdWUg KiphcmdzLCBpbnQgbmFyZ3MsCiAJCQkJZW51bSBvbG9hZF9zZWFyY2hfdHlw ZSBtZXRob2QsCiAJCQkJc3RydWN0IHZhbHVlICoqb2JqcCwgc3RydWN0IHN5 bWJvbCAqZnN5bSwKIAkJCQlzdHJ1Y3QgdmFsdWUgKip2YWxwLCBzdHJ1Y3Qg c3ltYm9sICoqc3ltcCwKKwkJCQlzdHJ1Y3QgZGVidWdfbWV0aG9kX3dvcmtl ciAqKmRtX3dvcmtlciwKIAkJCQlpbnQgKnN0YXRpY3AsIGNvbnN0IGludCBu b19hZGwpOwogCiBleHRlcm4gc3RydWN0IHZhbHVlICp2YWx1ZV9maWVsZCAo c3RydWN0IHZhbHVlICphcmcxLCBpbnQgZmllbGRubyk7Cg== --047d7b5d896536560704f7197d84--