From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 88068 invoked by alias); 15 May 2017 10:39:37 -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 88047 invoked by uid 89); 15 May 2017 10:39:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL,BAYES_00,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=recheck, 7015, 10876, HTo:U*rguenther X-HELO: mail-it0-f42.google.com Received: from mail-it0-f42.google.com (HELO mail-it0-f42.google.com) (209.85.214.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 15 May 2017 10:39:33 +0000 Received: by mail-it0-f42.google.com with SMTP id w68so9029066itc.0 for ; Mon, 15 May 2017 03:39:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ePnTnsERQTyxhLAsOFTm5mDifReJQO571QsaLu5cI/U=; b=Fl9UGg82BfRiba0XjuzFxU5Nos4OOStAsxEqJ+FD8/r8UpzS4VS2thCb3mPVkRH1s0 ML2+6lTu5MAachq7MZwpGuPN/2xnGYerFal64j8EW/oGgQU7Z/aAaaUE8+7PudsK2SIE FDx3wq8C+rdk0Jo7SBN4z8dUD/GDzbfMFGQ5OQ31yMmhsTKg8V84dRUjKkw7159OeNEt 6jQXHArX95QoiF8S3++wqmjcfiWVEw0SbuLig7JDBwg5m5T7UcbThiG51/DciKFt2T3u ul3WRfmUzsxiLBc/bLBSFYatRpwJe+tUnpoQ5CQ8ereRZCv1FLd/bLPYTpuYtYUEFfG+ 8eUQ== X-Gm-Message-State: AODbwcBp2QtibIylXx5dmSgzG8JHYZ4nS2aoiU0Chijpkj5C6jl67EUF n0z7bvSxxJvbYdodFQJzJfCgkjpMQOAX X-Received: by 10.36.92.84 with SMTP id q81mr4876437itb.46.1494844774335; Mon, 15 May 2017 03:39:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.25.5 with HTTP; Mon, 15 May 2017 03:39:33 -0700 (PDT) From: Prathamesh Kulkarni Date: Mon, 15 May 2017 10:56:00 -0000 Message-ID: Subject: [RFC] propagate malloc attribute in ipa-pure-const pass To: gcc Patches , Jan Hubicka , Richard Biener Content-Type: multipart/mixed; boundary="001a1145eab0c51dc7054f8dabfd" X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg01162.txt.bz2 --001a1145eab0c51dc7054f8dabfd Content-Type: text/plain; charset="UTF-8" Content-length: 3623 Hi, I have attached a bare-bones prototype patch that propagates malloc attribute in ipa-pure-const. As far as I understand, from the doc a function could be annotated with malloc attribute if it returns a pointer to a newly allocated memory block (uninitialized or zeroed) and the pointer does not alias any other valid pointer ? * Analysis The analysis used by the patch in malloc_candidate_p is too conservative, and I would be grateful for suggestions on improving it. Currently it only checks if: 1) The function returns a value of pointer type. 2) SSA_NAME_DEF_STMT (return_value) is either a function call or a phi, and SSA_NAME_DEF_STMT(each element of phi) is function call. 3) The return-value has immediate uses only within comparisons (gcond or gassign) and return_stmt (and likewise a phi arg has immediate use only within comparison or the phi stmt). The intent is that malloc_candidate_p(node) returns true if node returns the return value of it's callee, and the return value is only used for comparisons within node. Then I assume it's safe (although conservative) to decide that node could possibly be a malloc function if callee is found to be malloc ? for eg: void *f(size_t n) { void *p = __builtin_malloc (n); if (p == 0) __builtin_abort (); return p; } malloc_candidate_p would determine f to be a candidate for malloc attribute since it returns the return-value of it's callee (__builtin_malloc) and the return value is used only within comparison and return_stmt. However due to the imprecise analysis it misses this case: char **g(size_t n) { char **p = malloc (sizeof(char *) * 10); for (int i = 0; i < 10; i++) p[i] = malloc (sizeof(char) * n); return p; } I suppose g() could be annotated with malloc here ? The patch uses return_calles_map which is a hash_map such that the return value of node is return value of one of these callees. For above eg it would be The analysis phase populates return_callees_map, and the propagation phase uses it to take the "meet" of callees. * LTO and memory management This is a general question about LTO and memory management. IIUC the following sequence takes place during normal LTO: LGEN: generate_summary, write_summary WPA: read_summary, execute ipa passes, write_opt_summary So I assumed it was OK in LGEN to allocate return_callees_map in generate_summary and free it in write_summary and during WPA, allocate return_callees_map in read_summary and free it after execute (since write_opt_summary does not require return_callees_map). However with fat LTO, it seems the sequence changes for LGEN with execute phase takes place after write_summary. However since return_callees_map is freed in pure_const_write_summary and propagate_malloc() accesses it in execute stage, it results in segmentation fault. To work around this, I am using the following hack in pure_const_write_summary: // FIXME: Do not free if -ffat-lto-objects is enabled. if (!global_options.x_flag_fat_lto_objects) free_return_callees_map (); Is there a better approach for handling this ? Also I am not sure if I have written cgraph_node::set_malloc_flag[_1] correctly. I tried to imitate cgraph_node::set_const_flag. The patch passes bootstrap+test on x86_64 and found a few functions in the source tree (attached func_names.txt) that could be annotated with malloc (I gave a brief look at some of the functions and didn't appear to be false positives but I will recheck thoroughly) Does the patch look in the right direction ? I would be grateful for suggestions on improving it. Thanks, Prathamesh --001a1145eab0c51dc7054f8dabfd Content-Type: text/plain; charset="US-ASCII"; name="func_names.txt" Content-Disposition: attachment; filename="func_names.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j2pz6hfi0 Content-length: 3709 dmlydHVhbCBjaGFyKiBsaWJjcDE6OmNvbXBpbGVyOjpmaW5kKHN0ZDo6X19j eHgxMTo6c3RyaW5nJikgY29uc3QKZ29tcF9tYWxsb2MKdmlydHVhbCBjaGFy KiBsaWJjYzE6OmNvbXBpbGVyOjpmaW5kKHN0ZDo6X19jeHgxMTo6c3RyaW5n JikgY29uc3QKdm9pZCogR1RNOjp4cmVhbGxvYyh2b2lkKiwgc2l6ZV90LCBi b29sKQpjb25jYXQKY2hhciogZ2VuX2ludGVybmFsX3N5bShjb25zdCBjaGFy KikKdm9pZCogaXJhX2FsbG9jYXRlKHNpemVfdCkKY2hhciogZ2VuX2Zha2Vf bGFiZWwoKQpjaGFyKiBzZWxmdGVzdDo6bG9jYXRlX2ZpbGUoY29uc3QgY2hh ciopCmNvbnN0IGNoYXIqIGZpbmRfcGx1Z2luZGlyX3NwZWNfZnVuY3Rpb24o aW50LCBjb25zdCBjaGFyKiopCnJlY29uY2F0Cnh2YXNwcmludGYKY2hhciog cnR4X3JlYWRlcjo6cmVhZF91bnRpbChjb25zdCBjaGFyKiwgYm9vbCkKX1Rw KiBfX2dudV9jeHg6Ol9fZGV0YWlsOjpfX21pbmlfdmVjdG9yPF9UcD46OmFs bG9jYXRlKF9fZ251X2N4eDo6X19kZXRhaWw6Ol9fbWluaV92ZWN0b3I8X1Rw Pjo6c2l6ZV90eXBlKSBbd2l0aCBfVHAgPSBsb25nIHVuc2lnbmVkIGludCpd CnhzdHJuZHVwCmNvbnN0IGNoYXIqIHJlcGxhY2VfZXh0ZW5zaW9uX3NwZWNf ZnVuYyhpbnQsIGNvbnN0IGNoYXIqKikKdm9pZCogR1RNOjp4Y2FsbG9jKHNp emVfdCwgYm9vbCkKX1RwKiBfX2dudV9jeHg6Ol9fZGV0YWlsOjpfX21pbmlf dmVjdG9yPF9UcD46OmFsbG9jYXRlKF9fZ251X2N4eDo6X19kZXRhaWw6Ol9f bWluaV92ZWN0b3I8X1RwPjo6c2l6ZV90eXBlKSBbd2l0aCBfVHAgPSB1bnNp Z25lZCBpbnQqXQp4c3RyZHVwCnZvaWQqIEdUTTo6eG1hbGxvYyhzaXplX3Qs IGJvb2wpCnZvaWQqIGJhc2VfcG9vbF9hbGxvY2F0b3I8VEJsb2NrQWxsb2Nh dG9yPjo6YWxsb2NhdGUoKSBbd2l0aCBUQmxvY2tBbGxvY2F0b3IgPSBtZW1v cnlfYmxvY2tfcG9vbF0KY2hhciogaXg4Nl9vZmZsb2FkX29wdGlvbnMoKQpi YXNpY19ibG9ja19kZWYqIGFsbG9jX2Jsb2NrKCkKeG1lbWR1cApjaGFyKiBi dWlsZF9tZXNzYWdlX3N0cmluZyhjb25zdCBjaGFyKiwgLi4uKQptYWtlX3Jl bGF0aXZlX3ByZWZpeApnb21wX21hbGxvY19jbGVhcmVkCm1ha2VfcmVsYXRp dmVfcHJlZml4X2lnbm9yZV9saW5rcwpjaG9vc2VfdGVtcF9iYXNlCm1ha2Vf dGVtcF9maWxlCnhhc3ByaW50ZgpjaGFyKiBmaWxlX25hbWVfYXNfcHJlZml4 KGRpYWdub3N0aWNfY29udGV4dCosIGNvbnN0IGNoYXIqKQp2b2lkKiB5eWFs bG9jKHl5X3NpemVfdCkKdm9pZCogZ2djX2ludGVybmFsX2NsZWFyZWRfYWxs b2Moc2l6ZV90LCB2b2lkICgqKSh2b2lkKiksIHNpemVfdCwgc2l6ZV90KQp2 b2lkKiBfX2NpbGtydHNfaHlwZXJvYmplY3RfYWxsb2Modm9pZCosIHN0ZDo6 c2l6ZV90KQp2b2lkKiBhbGxvY19mb3JfaWRlbnRpZmllcl90b19sb2NhbGUo c2l6ZV90KQpjb25zdCBjaGFyKiBvcF9lcnJvcl9zdHJpbmcoY29uc3QgY2hh ciosIGludCwgYm9vbCkKaG9zdF9hbGxvYwp2b2lkKiBzdHJpbmdwb29sX2dn Y19hbGxvYyhzaXplX3QpCmZpYmhlYXBfbmV3CmRlcHMqIGRlcHNfaW5pdCgp CkNfYWxsb2NhCmNoYXIqIGx0b19nZXRfc2VjdGlvbl9uYW1lKGludCwgY29u c3QgY2hhciosIGx0b19maWxlX2RlY2xfZGF0YSopCnZvaWQqIGx0b196YWxs b2Modm9pZCosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQpfVHAqIF9f Z251X2N4eDo6X19kZXRhaWw6Ol9fbWluaV92ZWN0b3I8X1RwPjo6YWxsb2Nh dGUoX19nbnVfY3h4OjpfX2RldGFpbDo6X19taW5pX3ZlY3RvcjxfVHA+Ojpz aXplX3R5cGUpIFt3aXRoIF9UcCA9IHN0ZDo6cGFpcjxfX2dudV9jeHg6OmJp dG1hcF9hbGxvY2F0b3I8d2NoYXJfdD46Ol9BbGxvY19ibG9jayosIF9fZ251 X2N4eDo6Yml0bWFwX2FsbG9jYXRvcjx3Y2hhcl90Pjo6X0FsbG9jX2Jsb2Nr Kj5dCnZvaWQqIGdnY19pbnRlcm5hbF9hbGxvYyhzaXplX3QsIHZvaWQgKCop KHZvaWQqKSwgc2l6ZV90LCBzaXplX3QpCnZvaWQqIGdnY19zcGxheV9hbGxv YyhpbnQsIHZvaWQqKQp6Y2FsbG9jCmR1cGFyZ3YKX1RwKiBfX2dudV9jeHg6 Ol9fZGV0YWlsOjpfX21pbmlfdmVjdG9yPF9UcD46OmFsbG9jYXRlKF9fZ251 X2N4eDo6X19kZXRhaWw6Ol9fbWluaV92ZWN0b3I8X1RwPjo6c2l6ZV90eXBl KSBbd2l0aCBfVHAgPSBzdGQ6OnBhaXI8X19nbnVfY3h4OjpiaXRtYXBfYWxs b2NhdG9yPGNoYXI+OjpfQWxsb2NfYmxvY2sqLCBfX2dudV9jeHg6OmJpdG1h cF9hbGxvY2F0b3I8Y2hhcj46Ol9BbGxvY19ibG9jayo+XQpscmVhbHBhdGgK dm9pZCogbWVtcG9vbF9vYnN0YWNrX2NodW5rX2FsbG9jKHNpemVfdCkKY2hh ciogZGVzY3JpYmVfY2FjaGUoY2FjaGVfZGVzYywgY2FjaGVfZGVzYykKeGNh bGxvYwppbnQqIGlyYV9hbGxvY2F0ZV9jb3N0X3ZlY3RvcihyZWdfY2xhc3Nf dCkKYnVpbGRhcmd2CmNoYXIqIGRpYWdub3N0aWNfZ2V0X2xvY2F0aW9uX3Rl eHQoZGlhZ25vc3RpY19jb250ZXh0KiwgZXhwYW5kZWRfbG9jYXRpb24pCnNw bGF5X3RyZWVfeG1hbGxvY19hbGxvY2F0ZQpsdG9faW5fZGVjbF9zdGF0ZSog bHRvX25ld19pbl9kZWNsX3N0YXRlKCkKY2hhciogYWZmaXhfZGF0YV90eXBl KGNvbnN0IGNoYXIqKQpnZ2NfcGNoX2RhdGEqIGluaXRfZ2djX3BjaCgpCnht YWxsb2MKY2hhciogZGlhZ25vc3RpY19idWlsZF9wcmVmaXgoZGlhZ25vc3Rp Y19jb250ZXh0KiwgY29uc3QgZGlhZ25vc3RpY19pbmZvKikK --001a1145eab0c51dc7054f8dabfd Content-Type: text/plain; charset="US-ASCII"; name="malloc-prop-0_12.diff" Content-Disposition: attachment; filename="malloc-prop-0_12.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j2pz6mg01 Content-length: 23782 ZGlmZiAtLWdpdCBhL2djYy9jZ3JhcGguYyBiL2djYy9jZ3JhcGguYwppbmRl eCBlNTA1YjEwZTIxMS4uZWFiODIxNjEwMGUgMTAwNjQ0Ci0tLSBhL2djYy9j Z3JhcGguYworKysgYi9nY2MvY2dyYXBoLmMKQEAgLTI0OTIsNiArMjQ5Miw2 MSBAQCBjZ3JhcGhfbm9kZTo6c2V0X25vdGhyb3dfZmxhZyAoYm9vbCBub3Ro cm93KQogICByZXR1cm4gY2hhbmdlZDsKIH0KIAorLyogV29ya2VyIHRvIHNl dCBtYWxsb2MgZmxhZy4gICovCitzdGF0aWMgdm9pZAorc2V0X21hbGxvY19m bGFnXzEgKGNncmFwaF9ub2RlICpub2RlLCBib29sIG1hbGxvY19wLCBib29s IG5vbl9jYWxsLAorCQkgICAgYm9vbCAqY2hhbmdlZCkKK3sKKyAgY2dyYXBo X2VkZ2UgKmU7CisKKyAgaWYgKG1hbGxvY19wICYmICFERUNMX0lTX01BTExP QyAobm9kZS0+ZGVjbCkpCisgICAgeworICAgICAgLyogV2l0aCBub24tY2Fs bCBleGNlcHRpb25zIHdlIGNhbid0IHNheSBmb3Igc3VyZSBpZiBvdGhlciBm dW5jdGlvbgorIAkgYm9keSB3YXMgbm90IHBvc3NpYmx5IG9wdGltaXplZCB0 byBzdGlsbCB0aHJvdy4gICovCisgICAgICBpZiAoIW5vbl9jYWxsIHx8IG5v ZGUtPmJpbmRzX3RvX2N1cnJlbnRfZGVmX3AgKCkpCisJeworCSAgREVDTF9J U19NQUxMT0MgKG5vZGUtPmRlY2wpID0gdHJ1ZTsKKwkgICpjaGFuZ2VkID0g dHJ1ZTsKKwl9CisgICAgfQorICBlbHNlIGlmICghbWFsbG9jX3AgJiYgREVD TF9JU19NQUxMT0MgKG5vZGUtPmRlY2wpKQorICAgIHsKKyAgICAgIERFQ0xf SVNfTUFMTE9DIChub2RlLT5kZWNsKSA9IGZhbHNlOworICAgICAgKmNoYW5n ZWQgPSB0cnVlOworICAgIH0KKworICBpcGFfcmVmICpyZWY7CisgIEZPUl9F QUNIX0FMSUFTIChub2RlLCByZWYpCisgICAgeworICAgICAgY2dyYXBoX25v ZGUgKmFsaWFzID0gZHluX2Nhc3Q8Y2dyYXBoX25vZGUgKj4gKHJlZi0+cmVm ZXJyaW5nKTsKKyAgICAgIGlmICghbWFsbG9jX3AgfHwgYWxpYXMtPmdldF9h dmFpbGFiaWxpdHkgKCkgPiBBVkFJTF9JTlRFUlBPU0FCTEUpCisJc2V0X21h bGxvY19mbGFnXzEgKGFsaWFzLCBtYWxsb2NfcCwgbm9uX2NhbGwsIGNoYW5n ZWQpOworICAgIH0KK30KKy8qIFNldCBERUNMX0lTX01BTExPQyBvbiBOT0RF J3MgZGVjbCBhbmQgb24gTk9ERSdzIGFsaWFzZXMgaWYgYW55LiAgKi8KKwor Ym9vbAorY2dyYXBoX25vZGU6OnNldF9tYWxsb2NfZmxhZyAoYm9vbCBtYWxs b2NfcCkKK3sKKyAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgIGJvb2wgbm9u X2NhbGwgPSBvcHRfZm9yX2ZuIChkZWNsLCBmbGFnX25vbl9jYWxsX2V4Y2Vw dGlvbnMpOworCisgIGlmICghbWFsbG9jX3AgfHwgZ2V0X2F2YWlsYWJpbGl0 eSAoKSA+IEFWQUlMX0lOVEVSUE9TQUJMRSkKKyAgICBzZXRfbWFsbG9jX2Zs YWdfMSAodGhpcywgbWFsbG9jX3AsIG5vbl9jYWxsLCAmY2hhbmdlZCk7Cisg IGVsc2UKKyAgICB7CisgICAgICBpcGFfcmVmICpyZWY7CisKKyAgICAgIEZP Ul9FQUNIX0FMSUFTICh0aGlzLCByZWYpCisJeworCSAgY2dyYXBoX25vZGUg KmFsaWFzID0gZHluX2Nhc3Q8Y2dyYXBoX25vZGUgKj4gKHJlZi0+cmVmZXJy aW5nKTsKKwkgIGlmICghbWFsbG9jX3AgfHwgYWxpYXMtPmdldF9hdmFpbGFi aWxpdHkgKCkgPiBBVkFJTF9JTlRFUlBPU0FCTEUpCisJICAgIHNldF9tYWxs b2NfZmxhZ18xIChhbGlhcywgbWFsbG9jX3AsIG5vbl9jYWxsLCAmY2hhbmdl ZCk7CisJfQorICAgIH0KKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKIC8qIFdv cmtlciB0byBzZXRfY29uc3RfZmxhZy4gICovCiAKIHN0YXRpYyB2b2lkCmRp ZmYgLS1naXQgYS9nY2MvY2dyYXBoLmggYi9nY2MvY2dyYXBoLmgKaW5kZXgg YmU0ZWFlZTcxZTIuLjY3MzliYjMwOTRkIDEwMDY0NAotLS0gYS9nY2MvY2dy YXBoLmgKKysrIGIvZ2NjL2NncmFwaC5oCkBAIC0xMTE2LDYgKzExMTYsMTAg QEAgcHVibGljOgogICAgICBpZiBhbnkgdG8gTk9USFJPVy4gICovCiAgIGJv b2wgc2V0X25vdGhyb3dfZmxhZyAoYm9vbCBub3Rocm93KTsKIAorICAvKiBT RVQgREVDTF9JU19NQUxMT0Mgb24gY2dyYXBoX25vZGUncyBkZWNsIGFuZCBv biBhbGlhc2VzIG9mIHRoZSBub2RlCisgICAgIGlmIGFueS4gICovCisgIGJv b2wgc2V0X21hbGxvY19mbGFnIChib29sIG1hbGxvY19wKTsKKwogICAvKiBJ ZiBTRVRfQ09OU1QgaXMgdHJ1ZSwgbWFyayBmdW5jdGlvbiwgYWxpYXNlcyBh bmQgdGh1bmtzIHRvIGJlIEVDRl9DT05TVC4KICAgICBJZiBTRVRfQ09OU1Qg aWYgZmFsc2UsIGNsZWFyIHRoZSBmbGFnLgogCmRpZmYgLS1naXQgYS9nY2Mv aXBhLXB1cmUtY29uc3QuYyBiL2djYy9pcGEtcHVyZS1jb25zdC5jCmluZGV4 IGU0NTcxNjZlYTM5Li43MjRjMjZlMDNmNiAxMDA2NDQKLS0tIGEvZ2NjL2lw YS1wdXJlLWNvbnN0LmMKKysrIGIvZ2NjL2lwYS1wdXJlLWNvbnN0LmMKQEAg LTU2LDYgKzU2LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJ0cmVlLXNjYWxhci1l dm9sdXRpb24uaCIKICNpbmNsdWRlICJpbnRsLmgiCiAjaW5jbHVkZSAib3B0 cy5oIgorI2luY2x1ZGUgInNzYS5oIgogCiAvKiBMYXR0aWNlIHZhbHVlcyBm b3IgY29uc3QgYW5kIHB1cmUgZnVuY3Rpb25zLiAgRXZlcnl0aGluZyBzdGFy dHMgb3V0CiAgICBiZWluZyBjb25zdCwgdGhlbiBtYXkgZHJvcCB0byBwdXJl IGFuZCB0aGVuIG5laXRoZXIgZGVwZW5kaW5nIG9uCkBAIC02OSw2ICs3MCwx NSBAQCBlbnVtIHB1cmVfY29uc3Rfc3RhdGVfZQogCiBjb25zdCBjaGFyICpw dXJlX2NvbnN0X25hbWVzWzNdID0geyJjb25zdCIsICJwdXJlIiwgIm5laXRo ZXIifTsKIAorZW51bSBtYWxsb2Nfc3RhdGVfZQoreworICBQVVJFX0NPTlNU X01BTExPQ19UT1AsCisgIFBVUkVfQ09OU1RfTUFMTE9DLAorICBQVVJFX0NP TlNUX01BTExPQ19CT1RUT00KK307CisKK2NvbnN0IGNoYXIgKm1hbGxvY19z dGF0ZV9uYW1lc1tdID0geyJtYWxsb2NfdG9wIiwgIm1hbGxvYyIsICJtYWxs b2NfYm90dG9tIn07CisKIC8qIEhvbGRlciBmb3IgdGhlIGNvbnN0X3N0YXRl LiAgVGhlcmUgaXMgb25lIG9mIHRoZXNlIHBlciBmdW5jdGlvbgogICAgZGVj bC4gICovCiBzdHJ1Y3QgZnVuY3Rfc3RhdGVfZApAQCAtOTIsMTEgKzEwMiwx MyBAQCBzdHJ1Y3QgZnVuY3Rfc3RhdGVfZAogICAvKiBJZiBmdW5jdGlvbiBj YW4gY2FsbCBmcmVlLCBtdW5tYXAgb3Igb3RoZXJ3aXNlIG1ha2UgcHJldmlv dXNseQogICAgICBub24tdHJhcHBpbmcgbWVtb3J5IGFjY2Vzc2VzIHRyYXBw aW5nLiAgKi8KICAgYm9vbCBjYW5fZnJlZTsKKworICBlbnVtIG1hbGxvY19z dGF0ZV9lIG1hbGxvY19zdGF0ZTsKIH07CiAKIC8qIFN0YXRlIHVzZWQgd2hl biB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgZnVuY3Rpb24uICAqLwogc3RhdGlj IHN0cnVjdCBmdW5jdF9zdGF0ZV9kIHZhcnlpbmdfc3RhdGUKLSAgID0geyBJ UEFfTkVJVEhFUiwgSVBBX05FSVRIRVIsIHRydWUsIHRydWUsIHRydWUsIHRy dWUgfTsKKyAgID0geyBJUEFfTkVJVEhFUiwgSVBBX05FSVRIRVIsIHRydWUs IHRydWUsIHRydWUsIHRydWUsIFBVUkVfQ09OU1RfTUFMTE9DX0JPVFRPTSB9 OwogCiAKIHR5cGVkZWYgc3RydWN0IGZ1bmN0X3N0YXRlX2QgKiBmdW5jdF9z dGF0ZTsKQEAgLTEwOSw2ICsxMjEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgZnVu Y3Rfc3RhdGVfZCAqIGZ1bmN0X3N0YXRlOwogCiBzdGF0aWMgdmVjPGZ1bmN0 X3N0YXRlPiBmdW5jdF9zdGF0ZV92ZWM7CiAKKy8qIEEgbWFwIGZyb20gbm9k ZSB0byBzdWJzZXQgb2YgY2FsbGVlcy4gVGhlIHN1YnNldCBjb250YWlucyB0 aG9zZSBjYWxsZWVzCisgKiB3aG9zZSByZXR1cm4tdmFsdWUgaXMgcmV0dXJu ZWQgYnkgdGhlIG5vZGUuICovCitzdGF0aWMgaGFzaF9tYXA8IGNncmFwaF9u b2RlICosIHZlYzxjZ3JhcGhfbm9kZSAqPiogPiAqcmV0dXJuX2NhbGxlZXNf bWFwOworCiBzdGF0aWMgYm9vbCBnYXRlX3B1cmVfY29uc3QgKHZvaWQpOwog CiBuYW1lc3BhY2UgewpAQCAtODEyLDYgKzgyOCwxMjQgQEAgY2hlY2tfc3Rt dCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaXAsIGZ1bmN0X3N0YXRlIGxv Y2FsLCBib29sIGlwYSkKICAgICB9CiB9CiAKK3N0YXRpYyBib29sCitjaGVj a19yZXR2YWxfdXNlcyAodHJlZSByZXR2YWwsIGdpbXBsZSAqc3RtdCkKK3sK KyAgaW1tX3VzZV9pdGVyYXRvciB1c2VfaXRlcjsKKyAgZ2ltcGxlICp1c2Vf c3RtdDsKKworICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgKHVzZV9zdG10LCB1 c2VfaXRlciwgcmV0dmFsKQorICAgIGlmIChnY29uZCAqY29uZCA9IGR5bl9j YXN0PGdjb25kICo+ICh1c2Vfc3RtdCkpCisgICAgICB7CisJZW51bSB0cmVl X2NvZGUgY29kZSA9IGdpbXBsZV9jb25kX2NvZGUgKGNvbmQpOworCWlmIChU UkVFX0NPREVfQ0xBU1MgKGNvZGUpICE9IHRjY19jb21wYXJpc29uKQorCSAg UkVUVVJOX0ZST01fSU1NX1VTRV9TVE1UICh1c2VfaXRlciwgZmFsc2UpOwor ICAgICAgfQorICAgIGVsc2UgaWYgKGdhc3NpZ24gKmdhID0gZHluX2Nhc3Q8 Z2Fzc2lnbiAqPiAodXNlX3N0bXQpKQorICAgICAgeworCWVudW0gdHJlZV9j b2RlIGNvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChnYSk7CisJaWYg KFRSRUVfQ09ERV9DTEFTUyAoY29kZSkgIT0gdGNjX2NvbXBhcmlzb24pCisJ ICBSRVRVUk5fRlJPTV9JTU1fVVNFX1NUTVQgKHVzZV9pdGVyLCBmYWxzZSk7 CisgICAgICB9CisgICAgZWxzZSBpZiAodXNlX3N0bXQgIT0gc3RtdCkKKyAg ICAgIFJFVFVSTl9GUk9NX0lNTV9VU0VfU1RNVCAodXNlX2l0ZXIsIGZhbHNl KTsKKworICByZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEN1cnJlbnRseSB0 aGlzIGZ1bmN0aW9uIGRvZXMgYSB2ZXJ5IGNvbnNlcnZhdGl2ZSBhbmFseXNp cyB0byBjaGVjayBpZgorICogZnVuY3Rpb24gY291bGQgYmUgYSBtYWxsb2Mg Y2FuZGlkYXRlLgorICoKKyAqIFRoZSBmdW5jdGlvbiBpcyBjb25zaWRlcmVk IHRvIGJlIGEgY2FuZGlkYXRlIGlmCisgKiAxKSBUaGUgZnVuY3Rpb24gcmV0 dXJucyBhIHZhbHVlIG9mIHBvaW50ZXIgdHlwZS4KKyAqIDIpIFNTQV9OQU1F X0RFRl9TVE1UIChyZXR1cm5fdmFsdWUpIGlzIGVpdGhlciBhIGZ1bmN0aW9u IGNhbGwgb3IKKyAqICAgIGEgcGhpLCBhbmQgU1NBX05BTUVfREVGX1NUTVQo ZWFjaCBlbGVtZW50IG9mIHBoaSkgaXMgZnVuY3Rpb24gY2FsbC4KKyAqIDMp IFRoZSByZXR1cm4tdmFsdWUgaGFzIGltbWVkaWF0ZSB1c2VzIG9ubHkgd2l0 aGluIGNvbXBhcmlzb25zIChnY29uZCBvciBnYXNzaWduKQorICogICAgYW5k IHJldHVybl9zdG10IChhbmQgbGlrZXdpc2UgYSBwaGkgYXJnIGhhcyBpbW1l ZGlhdGUgdXNlIG9ubHkgd2l0aGluIGNvbXBhcmlzb24KKyAqICAgIG9yIHRo ZSBwaGkgc3RtdCkuCisgKi8KKworc3RhdGljIGJvb2wKK21hbGxvY19jYW5k aWRhdGVfcCAoZnVuY3Rpb24gKmZ1biwgdmVjPGNncmFwaF9ub2RlICo+JiBj YWxsZWVzKQoreworICBiYXNpY19ibG9jayBiYjsKKyAgRk9SX0VBQ0hfQkJf Rk4gKGJiLCBmdW4pCisgICAgeworICAgICAgZm9yIChnaW1wbGVfc3RtdF9p dGVyYXRvciBnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsKKwkgICAhZ3NpX2Vu ZF9wIChnc2kpOworCSAgIGdzaV9uZXh0ICgmZ3NpKSkKKwl7CisJICBncmV0 dXJuICpyZXRfc3RtdCA9IGR5bl9jYXN0PGdyZXR1cm4gKj4gKGdzaV9zdG10 IChnc2kpKTsKKwkgIGlmIChyZXRfc3RtdCkKKwkgICAgeworCSAgICAgIHRy ZWUgcmV0dmFsID0gZ2ltcGxlX3JldHVybl9yZXR2YWwgKHJldF9zdG10KTsK KwkgICAgICBpZiAoIXJldHZhbCkKKwkJcmV0dXJuIGZhbHNlOworCisJICAg ICAgaWYgKFRSRUVfQ09ERSAocmV0dmFsKSAhPSBTU0FfTkFNRQorCQkgIHx8 IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChyZXR2YWwpKSAhPSBQT0lOVEVSX1RZ UEUpCisJCXJldHVybiBmYWxzZTsKKworCSAgICAgIGlmICghY2hlY2tfcmV0 dmFsX3VzZXMgKHJldHZhbCwgcmV0X3N0bXQpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkgICAgICBnaW1wbGUgKmRlZiA9IFNTQV9OQU1FX0RFRl9TVE1UIChy ZXR2YWwpOworCSAgICAgIGlmIChnY2FsbCAqY2FsbF9zdG10ID0gZHluX2Nh c3Q8Z2NhbGwgKj4gKGRlZikpCisJCXsKKwkJICB0cmVlIGNhbGxlZV9kZWNs ID0gZ2ltcGxlX2NhbGxfZm5kZWNsIChjYWxsX3N0bXQpOworCQkgIC8qIEZJ WE1FOiBJbiBjYXNlIG9mIGluZGlyZWN0IGNhbGwsIGNhbGxlZV9kZWNsIG1p Z2h0IGJlIE5VTEwKKyAJCSAgICAgTm90IHN1cmUgd2hhdCB0byBkbyBpbiB0 aGF0IGNhc2UsIHB1bnRpbmcgZm9yIG5vdy4gICovCisJCSAgaWYgKCFjYWxs ZWVfZGVjbCkKKwkJICAgIHJldHVybiBmYWxzZTsKKwkJICBjZ3JhcGhfbm9k ZSAqY2FsbGVlID0gY2dyYXBoX25vZGU6OmdldF9jcmVhdGUgKGNhbGxlZV9k ZWNsKTsKKwkJICBjYWxsZWVzLnNhZmVfcHVzaCAoY2FsbGVlKTsKKwkJfQor CSAgICAgIGVsc2UgaWYgKGdwaGkgKnBoaSA9IGR5bl9jYXN0PGdwaGkgKj4g KGRlZikpCisJCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVfcGhp X251bV9hcmdzIChwaGkpOyArK2kpCisJCSAgeworCQkgICAgdHJlZSBhcmcg PSBnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaSwgaSk7CisJCSAgICBpZiAoVFJF RV9DT0RFIChhcmcpICE9IFNTQV9OQU1FKQorCQkgICAgICByZXR1cm4gZmFs c2U7CisJCSAgICBpZiAoIWNoZWNrX3JldHZhbF91c2VzIChhcmcsIHBoaSkp CisJCSAgICAgIHJldHVybiBmYWxzZTsKKworCQkgICAgZ2ltcGxlICphcmdf ZGVmID0gU1NBX05BTUVfREVGX1NUTVQgKGFyZyk7CisJCSAgICBnY2FsbCAq Y2FsbF9zdG10ID0gZHluX2Nhc3Q8Z2NhbGwgKj4gKGFyZ19kZWYpOworCQkg ICAgaWYgKCFjYWxsX3N0bXQpCisJCSAgICAgIHJldHVybiBmYWxzZTsKKwkJ ICAgIHRyZWUgY2FsbGVlX2RlY2wgPSBnaW1wbGVfY2FsbF9mbmRlY2wgKGNh bGxfc3RtdCk7CisJCSAgICBpZiAoIWNhbGxlZV9kZWNsKQorCQkgICAgICBy ZXR1cm4gZmFsc2U7CisJCSAgICBjZ3JhcGhfbm9kZSAqY2FsbGVlID0gY2dy YXBoX25vZGU6OmdldF9jcmVhdGUgKGNhbGxlZV9kZWNsKTsKKwkJICAgIGNh bGxlZXMuc2FmZV9wdXNoIChjYWxsZWUpOworCQkgIH0KKwkgICAgICBlbHNl CisJCXJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYg KGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAg ICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcbkZvdW5kICVzIHRvIGJlIGNhbmRp ZGF0ZSBmb3IgbWFsbG9jIGF0dHJpYnV0ZVxuIiwKKwkgICAgIElERU5USUZJ RVJfUE9JTlRFUiAoREVDTF9OQU1FIChmdW4tPmRlY2wpKSk7CisgIHJldHVy biB0cnVlOworfQorCisKK3N0YXRpYyB2b2lkCitmcmVlX3JldHVybl9jYWxs ZWVzX21hcCAodm9pZCkKK3sKKyAgZm9yIChoYXNoX21hcDxjZ3JhcGhfbm9k ZSAqLCB2ZWM8Y2dyYXBoX25vZGUgKj4qPjo6aXRlcmF0b3IgaXQgPSByZXR1 cm5fY2FsbGVlc19tYXAtPmJlZ2luICgpOworICAgICAgIGl0ICE9IHJldHVy bl9jYWxsZWVzX21hcC0+ZW5kICgpOworICAgICAgICsraXQpCisgICAgewor ICAgICAgc3RkOjpwYWlyPGNncmFwaF9ub2RlICosIHZlYzxjZ3JhcGhfbm9k ZSAqPio+IHAgPSAqaXQ7CisgICAgICBwLnNlY29uZC0+cmVsZWFzZSAoKTsK KyAgICAgIGRlbGV0ZSBwLnNlY29uZDsKKyAgICB9CisgIGRlbGV0ZSByZXR1 cm5fY2FsbGVlc19tYXA7Cit9CiAKIC8qIFRoaXMgaXMgdGhlIG1haW4gcm91 dGluZSBmb3IgZmluZGluZyB0aGUgcmVmZXJlbmNlIHBhdHRlcm5zIGZvcgog ICAgZ2xvYmFsIHZhcmlhYmxlcyB3aXRoaW4gYSBmdW5jdGlvbiBGTi4gICov CkBAIC05MjEsNiArMTA1NSwyMyBAQCBlbmQ6CiAgIGlmIChUUkVFX05PVEhS T1cgKGRlY2wpKQogICAgIGwtPmNhbl90aHJvdyA9IGZhbHNlOwogCisgIGlm IChpcGEpCisgICAgeworICAgICAgdmVjPGNncmFwaF9ub2RlICo+IHYgPSB2 TlVMTDsKKyAgICAgIGwtPm1hbGxvY19zdGF0ZSA9IFBVUkVfQ09OU1RfTUFM TE9DX0JPVFRPTTsKKyAgICAgIGlmIChERUNMX0lTX01BTExPQyAoZGVjbCkp CisJbC0+bWFsbG9jX3N0YXRlID0gUFVSRV9DT05TVF9NQUxMT0M7CisgICAg ICBlbHNlIGlmIChtYWxsb2NfY2FuZGlkYXRlX3AgKERFQ0xfU1RSVUNUX0ZV TkNUSU9OIChkZWNsKSwgdikpCisJeworCSAgbC0+bWFsbG9jX3N0YXRlID0g UFVSRV9DT05TVF9NQUxMT0NfVE9QOworCSAgdmVjPGNncmFwaF9ub2RlICo+ ICpjYWxsZWVzX3AgPSBuZXcgdmVjPGNncmFwaF9ub2RlICo+ICh2TlVMTCk7 CisJICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi5sZW5ndGggKCk7ICsr aSkKKwkgICAgY2FsbGVlc19wLT5zYWZlX3B1c2ggKHZbaV0pOworCSAgcmV0 dXJuX2NhbGxlZXNfbWFwLT5wdXQgKGZuLCBjYWxsZWVzX3ApOworCX0KKyAg ICAgIHYucmVsZWFzZSAoKTsKKyAgICB9CisKICAgcG9wX2NmdW4gKCk7CiAg IGlmIChkdW1wX2ZpbGUpCiAgICAgewpAQCAtMTAwMyw2ICsxMTU0LDcgQEAg cHVyZV9jb25zdF9nZW5lcmF0ZV9zdW1tYXJ5ICh2b2lkKQogCiAgIHBhc3Nf aXBhX3B1cmVfY29uc3QgKnBhc3MgPSBzdGF0aWNfY2FzdCA8cGFzc19pcGFf cHVyZV9jb25zdCAqPiAoY3VycmVudF9wYXNzKTsKICAgcGFzcy0+cmVnaXN0 ZXJfaG9va3MgKCk7CisgIHJldHVybl9jYWxsZWVzX21hcCA9IG5ldyBoYXNo X21hcDxjZ3JhcGhfbm9kZSAqLCB2ZWM8Y2dyYXBoX25vZGUgKj4qPjsKIAog ICAvKiBQcm9jZXNzIGFsbCBvZiB0aGUgZnVuY3Rpb25zLgogCkBAIC0xMDY3 LDExICsxMjE5LDMwIEBAIHB1cmVfY29uc3Rfd3JpdGVfc3VtbWFyeSAodm9p ZCkKIAkgIGJwX3BhY2tfdmFsdWUgKCZicCwgZnMtPmxvb3BpbmcsIDEpOwog CSAgYnBfcGFja192YWx1ZSAoJmJwLCBmcy0+Y2FuX3Rocm93LCAxKTsKIAkg IGJwX3BhY2tfdmFsdWUgKCZicCwgZnMtPmNhbl9mcmVlLCAxKTsKKwkgIGJw X3BhY2tfdmFsdWUgKCZicCwgZnMtPm1hbGxvY19zdGF0ZSwgMik7CiAJICBz dHJlYW1lcl93cml0ZV9iaXRwYWNrICgmYnApOworCisJICB2ZWM8Y2dyYXBo X25vZGUgKj4gKipjYWxsZWVzX3BwID0gcmV0dXJuX2NhbGxlZXNfbWFwLT5n ZXQgKG5vZGUpOworCSAgaWYgKGNhbGxlZXNfcHApCisJICAgIHsKKwkgICAg ICB2ZWM8Y2dyYXBoX25vZGUgKj4gY2FsbGVlcyA9ICoqY2FsbGVlc19wcDsK KwkgICAgICBzdHJlYW1lcl93cml0ZV91aHdpX3N0cmVhbSAob2ItPm1haW5f c3RyZWFtLCBjYWxsZWVzLmxlbmd0aCAoKSk7CisJICAgICAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IGNhbGxlZXMubGVuZ3RoICgpOyArK2kpCisJCXsK KwkJICBpbnQgY2FsbGVlX3JlZiA9IGx0b19zeW10YWJfZW5jb2Rlcl9lbmNv ZGUgKGVuY29kZXIsIGNhbGxlZXNbaV0pOworCQkgIHN0cmVhbWVyX3dyaXRl X3Vod2lfc3RyZWFtIChvYi0+bWFpbl9zdHJlYW0sIGNhbGxlZV9yZWYpOwor CQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgc3RyZWFtZXJfd3JpdGVfdWh3 aV9zdHJlYW0gKG9iLT5tYWluX3N0cmVhbSwgMCk7CiAJfQogICAgIH0KIAog ICBsdG9fZGVzdHJveV9zaW1wbGVfb3V0cHV0X2Jsb2NrIChvYik7CisKKyAg Ly8gRklYTUU6IERvIG5vdCBmcmVlIGlmIC1mZmF0LWx0by1vYmplY3RzIGlz IGVuYWJsZWQuCisgIGlmICghZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ZhdF9s dG9fb2JqZWN0cykKKyAgICBmcmVlX3JldHVybl9jYWxsZWVzX21hcCAoKTsK IH0KIAogCkBAIC0xMDg3LDYgKzEyNTgsOCBAQCBwdXJlX2NvbnN0X3JlYWRf c3VtbWFyeSAodm9pZCkKICAgcGFzc19pcGFfcHVyZV9jb25zdCAqcGFzcyA9 IHN0YXRpY19jYXN0IDxwYXNzX2lwYV9wdXJlX2NvbnN0ICo+IChjdXJyZW50 X3Bhc3MpOwogICBwYXNzLT5yZWdpc3Rlcl9ob29rcyAoKTsKIAorICByZXR1 cm5fY2FsbGVlc19tYXAgPSBuZXcgaGFzaF9tYXA8Y2dyYXBoX25vZGUgKiwg dmVjPGNncmFwaF9ub2RlICo+ICo+OworCiAgIHdoaWxlICgoZmlsZV9kYXRh ID0gZmlsZV9kYXRhX3ZlY1tqKytdKSkKICAgICB7CiAgICAgICBjb25zdCBj aGFyICpkYXRhOwpAQCAtMTEyNyw2ICsxMzAwLDIyIEBAIHB1cmVfY29uc3Rf cmVhZF9zdW1tYXJ5ICh2b2lkKQogCSAgICAgIGZzLT5sb29waW5nID0gYnBf dW5wYWNrX3ZhbHVlICgmYnAsIDEpOwogCSAgICAgIGZzLT5jYW5fdGhyb3cg PSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CiAJICAgICAgZnMtPmNhbl9m cmVlID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDEpOworCSAgICAgIGZzLT5t YWxsb2Nfc3RhdGUKKwkJCT0gKGVudW0gbWFsbG9jX3N0YXRlX2UpIGJwX3Vu cGFja192YWx1ZSAoJmJwLCAyKTsKKworCSAgICAgIHVuc2lnbmVkIGxlbiA9 IHN0cmVhbWVyX3JlYWRfdWh3aSAoaWIpOworCSAgICAgIGlmIChsZW4pCisJ CXsKKwkJICB2ZWM8Y2dyYXBoX25vZGUgKj4gKmNhbGxlZXNfcCA9IG5ldyB2 ZWM8Y2dyYXBoX25vZGUgKj4gKHZOVUxMKTsKKwkJICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCSAgICB7CisJCSAgICAgIGludCBj YWxsZWVfaW5kZXggPSBzdHJlYW1lcl9yZWFkX3Vod2kgKGliKTsKKwkJICAg ICAgY2dyYXBoX25vZGUgKmNhbGxlZSA9IGR5bl9jYXN0PGNncmFwaF9ub2Rl ICo+IChsdG9fc3ltdGFiX2VuY29kZXJfZGVyZWYgKGVuY29kZXIsIGNhbGxl ZV9pbmRleCkpOworCQkgICAgICBjYWxsZWVzX3AtPnNhZmVfcHVzaCAoY2Fs bGVlKTsKKwkJICAgIH0KKwkJICByZXR1cm5fY2FsbGVlc19tYXAtPnB1dCAo bm9kZSwgY2FsbGVlc19wKTsKKwkJfQorCiAJICAgICAgaWYgKGR1bXBfZmls ZSkKIAkJewogCQkgIGludCBmbGFncyA9IGZsYWdzX2Zyb21fZGVjbF9vcl90 eXBlIChub2RlLT5kZWNsKTsKQEAgLTExNTEsNiArMTM0MCw4IEBAIHB1cmVf Y29uc3RfcmVhZF9zdW1tYXJ5ICh2b2lkKQogCQkgICAgZnByaW50ZiAoZHVt cF9maWxlLCIgIGZ1bmN0aW9uIGlzIGxvY2FsbHkgdGhyb3dpbmdcbiIpOwog CQkgIGlmIChmcy0+Y2FuX2ZyZWUpCiAJCSAgICBmcHJpbnRmIChkdW1wX2Zp bGUsIiAgZnVuY3Rpb24gY2FuIGxvY2FsbHkgZnJlZVxuIik7CisJCSAgZnBy aW50ZiAoZHVtcF9maWxlLCAiXG4gbWFsbG9jIHN0YXRlOiAlc1xuIiwKKwkJ CSAgIG1hbGxvY19zdGF0ZV9uYW1lc1tmcy0+bWFsbG9jX3N0YXRlXSk7CiAJ CX0KIAkgICAgfQogCkBAIC0xNjY0LDYgKzE4NTUsMTIxIEBAIHByb3BhZ2F0 ZV9ub3Rocm93ICh2b2lkKQogICBmcmVlIChvcmRlcik7CiB9CiAKK0RFQlVH X0ZVTkNUSU9OCitzdGF0aWMgdm9pZAorZHVtcF9tYWxsb2NfbGF0dGljZSAo RklMRSAqZHVtcF9maWxlLCBjb25zdCBjaGFyICpzKQoreworICBpZiAoIWR1 bXBfZmlsZSkKKyAgICByZXR1cm47CisKKyAgZnByaW50ZiAoZHVtcF9maWxl LCAiXG5cbk1BTExPQyBMQVRUSUNFICVzOlxuIiwgcyk7CisgIGNncmFwaF9u b2RlICpub2RlOworICBGT1JfRUFDSF9GVU5DVElPTiAobm9kZSkKKyAgICB7 CisgICAgICBmdW5jdF9zdGF0ZSBmcyA9IGdldF9mdW5jdGlvbl9zdGF0ZSAo bm9kZSk7CisgICAgICBtYWxsb2Nfc3RhdGVfZSBzdGF0ZSA9IGZzLT5tYWxs b2Nfc3RhdGU7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIlczogJXNc biIsIG5vZGUtPm5hbWUgKCksIG1hbGxvY19zdGF0ZV9uYW1lc1tzdGF0ZV0p OworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Byb3BhZ2F0ZV9tYWxsb2Mg KHZvaWQpCit7CisgIGNncmFwaF9ub2RlICpub2RlOworICBGT1JfRUFDSF9G VU5DVElPTiAobm9kZSkKKyAgICB7CisgICAgICBpZiAoREVDTF9JU19NQUxM T0MgKG5vZGUtPmRlY2wpKQorCWlmICghaGFzX2Z1bmN0aW9uX3N0YXRlIChu b2RlKSkKKwkgIHsKKwkgICAgZnVuY3Rfc3RhdGUgbCA9IFhDTkVXIChzdHJ1 Y3QgZnVuY3Rfc3RhdGVfZCk7CisJICAgICpsID0gdmFyeWluZ19zdGF0ZTsK KwkgICAgbC0+bWFsbG9jX3N0YXRlID0gUFVSRV9DT05TVF9NQUxMT0M7CisJ ICAgIHNldF9mdW5jdGlvbl9zdGF0ZSAobm9kZSwgbCk7CisJICB9CisgICAg fQorCisgIGR1bXBfbWFsbG9jX2xhdHRpY2UgKGR1bXBfZmlsZSwgIkluaXRp YWwiKTsKKyAgc3RydWN0IGNncmFwaF9ub2RlICoqb3JkZXIKKyAgICA9IFhO RVdWRUMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBzeW10YWItPmNncmFwaF9j b3VudCk7CisgIGludCBvcmRlcl9wb3MgPSBpcGFfcmV2ZXJzZV9wb3N0b3Jk ZXIgKG9yZGVyKTsKKyAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKworICB3aGls ZSAoY2hhbmdlZCkKKyAgICB7CisgICAgICBjaGFuZ2VkID0gZmFsc2U7Cisg ICAgICAvKiBXYWxrIGluIHBvc3RvcmRlci4gICovCisgICAgICBmb3IgKGlu dCBpID0gb3JkZXJfcG9zIC0gMTsgaSA+PSAwOyAtLWkpCisJeworCSAgY2dy YXBoX25vZGUgKm5vZGUgPSBvcmRlcltpXTsKKwkgIGlmIChub2RlLT5hbGlh cworCSAgICAgIHx8ICFub2RlLT5kZWZpbml0aW9uCisJICAgICAgfHwgIWhh c19mdW5jdGlvbl9zdGF0ZSAobm9kZSkpCisJICAgIGNvbnRpbnVlOworCisJ ICBmdW5jdF9zdGF0ZSBsID0gZ2V0X2Z1bmN0aW9uX3N0YXRlIChub2RlKTsK KworCSAgLyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBpbmRpcmVjdC1jYWxs cy4gICovCisJICBpZiAobm9kZS0+aW5kaXJlY3RfY2FsbHMpCisJICAgIHsK KwkgICAgICBsLT5tYWxsb2Nfc3RhdGUgPSBQVVJFX0NPTlNUX01BTExPQ19C T1RUT007CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgaWYgKG5v ZGUtPmdldF9hdmFpbGFiaWxpdHkgKCkgPD0gQVZBSUxfSU5URVJQT1NBQkxF KQorCSAgICB7CisJICAgICAgbC0+bWFsbG9jX3N0YXRlID0gUFVSRV9DT05T VF9NQUxMT0NfQk9UVE9NOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisK KwkgIGlmIChsLT5tYWxsb2Nfc3RhdGUgPT0gUFVSRV9DT05TVF9NQUxMT0Nf Qk9UVE9NKQorCSAgICBjb250aW51ZTsKKworCSAgdmVjPGNncmFwaF9ub2Rl ICo+ICoqY2FsbGVlc19wcCA9IHJldHVybl9jYWxsZWVzX21hcC0+Z2V0IChu b2RlKTsKKwkgIGlmICghY2FsbGVlc19wcCkKKwkgICAgY29udGludWU7CisK KwkgIHZlYzxjZ3JhcGhfbm9kZSAqPiBjYWxsZWVzID0gKipjYWxsZWVzX3Bw OworCSAgbWFsbG9jX3N0YXRlX2UgbmV3X3N0YXRlID0gbC0+bWFsbG9jX3N0 YXRlOworCSAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbGxlZXMubGVu Z3RoICgpOyBqKyspCisJICAgIHsKKwkgICAgICBjZ3JhcGhfbm9kZSAqY2Fs bGVlID0gY2FsbGVlc1tqXTsKKwkgICAgICBpZiAoIWhhc19mdW5jdGlvbl9z dGF0ZSAoY2FsbGVlKSkKKwkJeworCQkgIG5ld19zdGF0ZSA9IFBVUkVfQ09O U1RfTUFMTE9DX0JPVFRPTTsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIG1h bGxvY19zdGF0ZV9lIGNhbGxlZV9zdGF0ZSA9IGdldF9mdW5jdGlvbl9zdGF0 ZSAoY2FsbGVlKS0+bWFsbG9jX3N0YXRlOworCSAgICAgIGlmIChuZXdfc3Rh dGUgPCBjYWxsZWVfc3RhdGUpCisJCW5ld19zdGF0ZSA9IGNhbGxlZV9zdGF0 ZTsKKwkgICAgfQorCSAgaWYgKG5ld19zdGF0ZSAhPSBsLT5tYWxsb2Nfc3Rh dGUpCisJICAgIHsKKwkgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKwkgICAgICBs LT5tYWxsb2Nfc3RhdGUgPSBuZXdfc3RhdGU7CisJICAgIH0KKwl9CisgICAg fQorCisgIEZPUl9FQUNIX0RFRklORURfRlVOQ1RJT04gKG5vZGUpCisgICAg aWYgKGhhc19mdW5jdGlvbl9zdGF0ZSAobm9kZSkpCisgICAgICB7CisJZnVu Y3Rfc3RhdGUgbCA9IGdldF9mdW5jdGlvbl9zdGF0ZSAobm9kZSk7CisJaWYg KCFub2RlLT5hbGlhcworCSAgICAmJiBsLT5tYWxsb2Nfc3RhdGUgPT0gUFVS RV9DT05TVF9NQUxMT0MKKwkgICAgJiYgIW5vZGUtPmdsb2JhbC5pbmxpbmVk X3RvKQorCSAgeworCSAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdz ICYgVERGX0RFVEFJTFMpKQorCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IkZ1bmN0aW9uICVzIGZvdW5kIHRvIGJlIG1hbGxvY1xuIiwKKwkJICAgICAg IG5vZGUtPm5hbWUgKCkpOworCSAgICBub2RlLT5zZXRfbWFsbG9jX2ZsYWcg KHRydWUpOworCSAgfQorICAgICAgfQorCisgIGR1bXBfbWFsbG9jX2xhdHRp Y2UgKGR1bXBfZmlsZSwgImFmdGVyIHByb3BhZ2F0aW9uIik7CisgIGlwYV9m cmVlX3Bvc3RvcmRlcl9pbmZvICgpOworICBmcmVlIChvcmRlcik7CisgIGZy ZWVfcmV0dXJuX2NhbGxlZXNfbWFwICgpOworfQogCiAvKiBQcm9kdWNlIHRo ZSBnbG9iYWwgaW5mb3JtYXRpb24gYnkgcHJlZm9ybWluZyBhIHRyYW5zaXRp dmUgY2xvc3VyZQogICAgb24gdGhlIGxvY2FsIGluZm9ybWF0aW9uIHRoYXQg d2FzIHByb2R1Y2VkIGJ5IGdlbmVyYXRlX3N1bW1hcnkuICAqLwpAQCAtMTY4 Miw2ICsxOTg4LDcgQEAgZXhlY3V0ZSAoZnVuY3Rpb24gKikKICAgLyogTm90 aHJvdyBtYWtlcyBtb3JlIGZ1bmN0aW9uIHRvIG5vdCBsZWFkIHRvIHJldHVy biBhbmQgaW1wcm92ZQogICAgICBsYXRlciBhbmFseXNpcy4gICovCiAgIHBy b3BhZ2F0ZV9ub3Rocm93ICgpOworICBwcm9wYWdhdGVfbWFsbG9jICgpOwog ICByZW1vdmVfcCA9IHByb3BhZ2F0ZV9wdXJlX2NvbnN0ICgpOwogCiAgIC8q IENsZWFudXAuICovCmRpZmYgLS1naXQgYS9nY2Mvc3NhLWl0ZXJhdG9ycy5o IGIvZ2NjL3NzYS1pdGVyYXRvcnMuaAppbmRleCBjOGFhNzdiZDRmMy4uNzQw Y2JmMTNjYjIgMTAwNjQ0Ci0tLSBhL2djYy9zc2EtaXRlcmF0b3JzLmgKKysr IGIvZ2NjL3NzYS1pdGVyYXRvcnMuaApAQCAtOTMsNiArOTMsMTIgQEAgc3Ry dWN0IGltbV91c2VfaXRlcmF0b3IKICAgICAgYnJlYWs7CQkJCQkJCVwKICAg IH0KIAorLyogU2ltaWxhcmx5IGZvciByZXR1cm4uICAqLworI2RlZmluZSBS RVRVUk5fRlJPTV9JTU1fVVNFX1NUTVQoSVRFUiwgVkFMKQkJCVwKKyAgewkJ CQkJCQkJXAorICAgIGVuZF9pbW1fdXNlX3N0bXRfdHJhdmVyc2UgKCYoSVRF UikpOwkJCVwKKyAgICByZXR1cm4gKFZBTCk7CQkJCQkJXAorICB9CiAKIC8q IFVzZSB0aGlzIGl0ZXJhdG9yIGluIGNvbWJpbmF0aW9uIHdpdGggRk9SX0VB Q0hfSU1NX1VTRV9TVE1UIHRvCiAgICBnZXQgYWNjZXNzIHRvIGVhY2ggb2Nj dXJyZW5jZSBvZiBzc2F2YXIgb24gdGhlIHN0bXQgcmV0dXJuZWQgYnkKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9j LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9jLTEu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWE5 NWY4MTcwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9pcGEvcHJvcG1hbGxvYy0xLmMKQEAgLTAsMCArMSwyMSBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1m ZHVtcC1pcGEtcHVyZS1jb25zdC1kZXRhaWxzIiB9ICovCisKK19fYXR0cmli dXRlX18oKG5vaW5saW5lLCBub19pY2YsIHVzZWQpKQorc3RhdGljIHZvaWQg KmYoX19TSVpFX1RZUEVfXyBuKQoreworICB2b2lkICpwID0gX19idWlsdGlu X21hbGxvYyAobik7CisgIGlmIChwID09IDApCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworICByZXR1cm4gcDsKK30KKworX19hdHRyaWJ1dGVfXygobm9p bmxpbmUsIG5vX2ljZiwgdXNlZCkpCitzdGF0aWMgdm9pZCAqYmFyKF9fU0la RV9UWVBFX18gbikKK3sKKyAgdm9pZCAqcCA9IGYgKG4pOworICByZXR1cm4g cDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkZ1bmN0 aW9uIGYgZm91bmQgdG8gYmUgbWFsbG9jIiAicHVyZS1jb25zdCIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24gYmFy IGZvdW5kIHRvIGJlIG1hbGxvYyIgInB1cmUtY29uc3QiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2Mt Mi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NWIy ZmQ3NGE3YQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wbWFsbG9jLTIuYwpAQCAtMCwwICsxLDIzIEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZk dW1wLWlwYS1wdXJlLWNvbnN0LWRldGFpbHMiIH0gKi8KKworX19hdHRyaWJ1 dGVfXygobm9pbmxpbmUsIHVzZWQsIG5vX2ljZikpCitzdGF0aWMgdm9pZCAq Zm9vIChfX1NJWkVfVFlQRV9fIG4pCit7CisgIHJldHVybiBfX2J1aWx0aW5f bWFsbG9jIChuICogMTApOworfQorCitfX2F0dHJpYnV0ZV9fKChub2lubGlu ZSwgdXNlZCwgbm9faWNmKSkKK3N0YXRpYyB2b2lkICpiYXIoX19TSVpFX1RZ UEVfXyBuLCBpbnQgY29uZCkKK3sKKyAgdm9pZCAqcDsKKyAgaWYgKGNvbmQp CisgICAgcCA9IGZvbyAobik7CisgIGVsc2UKKyAgICBwID0gX19idWlsdGlu X21hbGxvYyAobik7CisKKyAgcmV0dXJuIHA7Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLWlwYS1kdW1wICJGdW5jdGlvbiBmb28gZm91bmQgdG8gYmUg bWFsbG9jIiAicHVyZS1jb25zdCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24gYmFyIGZvdW5kIHRvIGJlIG1hbGxv YyIgInB1cmUtY29uc3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMy5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvaXBhL3Byb3BtYWxsb2MtMy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzU1OGRkZDA3ZAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wbWFsbG9j LTMuYwpAQCAtMCwwICsxLDI0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLWlwYS1wdXJlLWNvbnN0 LWRldGFpbHMiIH0gKi8KKworc3RhdGljIHZvaWQgKmZvbyhfX1NJWkVfVFlQ RV9fLCBpbnQpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub19pY2YsIHVz ZWQpKTsKKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIHVzZWQsIG5vX2lj ZikpCitzdGF0aWMgdm9pZCAqYmFyKF9fU0laRV9UWVBFX18gbiwgaW50IG0p Cit7CisgIHJldHVybiBmb28gKG4sIG0pOworfQorCitzdGF0aWMgdm9pZCAq Zm9vKF9fU0laRV9UWVBFX18gbiwgaW50IG0pCit7CisgIHZvaWQgKnA7Cisg IGlmIChtID4gMCkKKyAgICBwID0gYmFyIChuLCAtLW0pOworICBlbHNlCisg ICAgcCA9IF9fYnVpbHRpbl9tYWxsb2MgKG4pOworCisgIHJldHVybiBwOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiRnVuY3Rpb24g Zm9vIGZvdW5kIHRvIGJlIG1hbGxvYyIgInB1cmUtY29uc3QiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkZ1bmN0aW9uIGJhciBm b3VuZCB0byBiZSBtYWxsb2MiICJwdXJlLWNvbnN0IiB9IH0gKi8K --001a1145eab0c51dc7054f8dabfd--