From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25538 invoked by alias); 22 Mar 2016 14:16:28 -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 25446 invoked by uid 89); 22 Mar 2016 14:16:28 -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_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=marcos, pos, Adds, Attempt X-HELO: mail-yw0-f171.google.com Received: from mail-yw0-f171.google.com (HELO mail-yw0-f171.google.com) (209.85.161.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 22 Mar 2016 14:16:17 +0000 Received: by mail-yw0-f171.google.com with SMTP id h65so112998299ywe.0 for ; Tue, 22 Mar 2016 07:16:17 -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:from:date:message-id:subject:to; bh=MGVacJIiLdjEp4/e9CqDN4t+k6OLraD6QFrj1oSXQk0=; b=gnFPwOOwcImWNHt5YaVOZzEU7Kbp3wGhEp9nuvTvxTN0tmQSeP6FdXNRyQUTfYkSg1 ey2mM6y+Lvji0trJDmATD8sNiI+uy8pXZRqzyjptWpUNVu4kNZa9D0AdKQ8dRAoiJhf3 MQtQWUweA23z5KxPqfZbYuI6H8EkXbdb8vY3Jtk/iUKWySW94E0SgrKTqoSe9ES8q8yE /gKlaJM2dvfJG3Q8mzT1C1xXSg/McGOqcP2/v+89aZ86lyaTF9OCJ7DHW0HAdrNZQ/Tu xymBsoreHZ3hofrgqPS6ltAx02L/1WuC46bt7878rPRUiJiX8KIkbuUSwg5lsWw7Yg3O /YmQ== X-Gm-Message-State: AD7BkJKmv5DNXtW2N14wiM3bHWbcEZN8Zp8lxjBgu8WnlANMd/uNfLGmkIed8PPhfcyd2UACbLyAJZDJL4NpANFc X-Received: by 10.129.77.85 with SMTP id a82mr16429983ywb.149.1458656175230; Tue, 22 Mar 2016 07:16:15 -0700 (PDT) MIME-Version: 1.0 Received: by 10.37.37.4 with HTTP; Tue, 22 Mar 2016 07:15:55 -0700 (PDT) From: =?UTF-8?B?TWFyY29zIETDrWF6?= Date: Tue, 22 Mar 2016 14:31:00 -0000 Message-ID: Subject: [PATCH] Add security_sensitive attribute to clean function stack and regs. To: "gcc-patches@gcc.gnu.org" , Andres Tiraboschi , Daniel Gutson Content-Type: multipart/mixed; boundary=001a11406d722cda39052ea3dbd4 X-IsSubscribed: yes X-SW-Source: 2016-03/txt/msg01246.txt.bz2 --001a11406d722cda39052ea3dbd4 Content-Type: text/plain; charset=UTF-8 Content-length: 1687 Hi, the attached patch adds a new attribute 'security_sensitive' for functions. The idea was discussed in PR middle-end/69976. This attribute makes gcc to emit clean up code at the function's epilogue. This clean-up code cleans the stack used by this function and that isn't needed anymore. It also cleans used registers. It only works in x86_64. Please, review the discussion here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69976 since we had some doubts with the implementation. We also added some test-cases and ran all tests in x86_64. We think this isn't a bug-fix but a new feature. Changelog 2016-03-21 Marcos Diaz Andres Tiraboschi PR tree-optimization/69820 * config/i386/i386-protos.h: Add ix86_clear_regs_emit and ix86_sec_sensitive_attr_p * config/i386/i386.c: (ix86_sec_sensitive_attr_p): New function (ix86_using_red_zone): now take into account if the function has the new attribute. (is_preserved_reg): New function. (is_integer_reg): New function. (is_used_as_ret): New function. (reg_to_string): New function. (clear_reg_emit): New function. (ix86_clear_regs_emit): New function. (ix86_expand_epilogue): Added code to emit clean up code only when security_sensitive attribute is set. (ix86_handle_security_sensitive_attribute): New function. (ix86_attribute_table): Added new attribute. * config/i386/i386.md: (UNSPECV_CLRSTACK): New unspecv. (UNSPECV_CLRREGS): New unspecv. (return): Conditionally emit cleaning regs code. (simple_return): Likewise (clear_regs): New insn. (clear_stack): New insn. * doc/extend.texi: Added description for new security_sensitive attribute. --001a11406d722cda39052ea3dbd4 Content-Type: text/plain; charset=US-ASCII; name="secSensitive.diff" Content-Disposition: attachment; filename="secSensitive.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_im3i6ynm0 Content-length: 16300 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKaW5kZXggZTQ2NTJmMy4u YjY5YWE1OSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJv dG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAg LTMyLDYgKzMyLDggQEAgZXh0ZXJuIEhPU1RfV0lERV9JTlQgaXg4Nl9pbml0 aWFsX2VsaW1pbmF0aW9uX29mZnNldCAoaW50LCBpbnQpOwogZXh0ZXJuIHZv aWQgaXg4Nl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpOwogZXh0ZXJuIHZvaWQg aXg4Nl9tYXliZV9lbWl0X2VwaWxvZ3VlX3Z6ZXJvdXBwZXIgKHZvaWQpOwog ZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfZXBpbG9ndWUgKGludCk7CitleHRl cm4gdm9pZCBpeDg2X2NsZWFyX3JlZ3NfZW1pdCAocnR4Kik7CitleHRlcm4g Ym9vbCBpeDg2X3NlY19zZW5zaXRpdmVfYXR0cl9wKHZvaWQpOwogZXh0ZXJu IHZvaWQgaXg4Nl9leHBhbmRfc3BsaXRfc3RhY2tfcHJvbG9ndWUgKHZvaWQp OwogCiBleHRlcm4gdm9pZCBpeDg2X291dHB1dF9hZGRyX3ZlY19lbHQgKEZJ TEUgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2 LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCmluZGV4IDNkOGRiYzQuLjdj NThkNmQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMKKysr IGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwpAQCAtMzY5MCwxMiArMzY5MCwx OSBAQCBtYWtlX3Bhc3Nfc3R2IChnY2M6OmNvbnRleHQgKmN0eHQpCiAgIHJl dHVybiBuZXcgcGFzc19zdHYgKGN0eHQpOwogfQogCitib29sIGl4ODZfc2Vj X3NlbnNpdGl2ZV9hdHRyX3Aodm9pZCkKK3sKKyAgcmV0dXJuIGxvb2t1cF9h dHRyaWJ1dGUgKCJzZWN1cml0eV9zZW5zaXRpdmUiLCBERUNMX0FUVFJJQlVU RVMgKGNmdW4tPmRlY2wpKTsKK30KKworCiAvKiBSZXR1cm4gdHJ1ZSBpZiBh IHJlZC16b25lIGlzIGluIHVzZS4gICovCiAKIHN0YXRpYyBpbmxpbmUgYm9v bAogaXg4Nl91c2luZ19yZWRfem9uZSAodm9pZCkKIHsKLSAgcmV0dXJuIFRB UkdFVF9SRURfWk9ORSAmJiAhVEFSR0VUXzY0QklUX01TX0FCSTsKKyAgcmV0 dXJuIFRBUkdFVF9SRURfWk9ORSAmJiAhVEFSR0VUXzY0QklUX01TX0FCSQor CSYmICFpeDg2X3NlY19zZW5zaXRpdmVfYXR0cl9wKCk7CiB9CiAMCiAvKiBS ZXR1cm4gYSBzdHJpbmcgdGhhdCBkb2N1bWVudHMgdGhlIGN1cnJlbnQgLW0g b3B0aW9ucy4gIFRoZSBjYWxsZXIgaXMKQEAgLTEzMzI1LDYgKzEzMzMyLDE0 NCBAQCBpeDg2X2VtaXRfcmVzdG9yZV9zc2VfcmVnc191c2luZ19tb3YgKEhP U1RfV0lERV9JTlQgY2ZhX29mZnNldCwKICAgICAgIH0KIH0KIAorLyogUmV0 dXJucyB0cnVlIGlmZiByZWdubyBpcyBhIHJlZ2lzdGVyIHRoYXQgbXVzdCBi ZSBwcmVzZXJ2ZWQgaW4gYSBmdW5jdGlvbi4qLworc3RhdGljIGlubGluZSBi b29sCitpc19wcmVzZXJ2ZWRfcmVnKGNvbnN0IHVuc2lnbmVkIGludCByZWdu bykKK3sKKyAgcmV0dXJuIChyZWdubyA9PSBCWF9SRUcpCisJIHx8IChyZWdu byA9PSBCUF9SRUcpCisJIHx8IChyZWdubyA9PSBTUF9SRUcpCisJIHx8IChy ZWdubyA9PSBSMTJfUkVHKQorCSB8fCAocmVnbm8gPT0gUjEzX1JFRykKKwkg fHwgKHJlZ25vID09IFIxNF9SRUcpCisJIHx8IChyZWdubyA9PSBSMTVfUkVH KTsKK30KKworLyogUmV0dXJucyB0cnVlIGlmZiByZWdubyBpcyBhbiBpbnRl Z2VyIHJlZ2lzdGVyLiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfaW50ZWdl cl9yZWcodW5zaWduZWQgaW50IHJlZ25vKQoreworICByZXR1cm4gKHJlZ25v IDw9IDd1KSB8fAorICAgICAoKEZJUlNUX1JFWF9JTlRfUkVHIDw9IHJlZ25v KSAmJiAocmVnbm8gPD0gTEFTVF9SRVhfSU5UX1JFRykpOworfQorCisvKiBS ZXR1cm5zIHRydWUgaWZmIHJlZ25vIGlzIHVzZWQgdG8gcmV0dXJuIGluIHRo ZSBjdXJyZW50IGZ1bmN0aW9uLiovCitzdGF0aWMgaW5saW5lIGJvb2wKK2lz X3VzZWRfYXNfcmV0KGNvbnN0IHVuc2lnbmVkIGludCByZWdfbnVtYmVyKQor eworICBib29sIGlzX3JldCA9IGl4ODZfZnVuY3Rpb25fdmFsdWVfcmVnbm9f cChyZWdfbnVtYmVyKTsKKyAgaWYgKGlzX3JldCkKKyAgICB7CisgICAgICBy dHggcmV0ID0gaXg4Nl9mdW5jdGlvbl92YWx1ZQorCQkoVFJFRV9UWVBFIChE RUNMX1JFU1VMVCAoY2Z1bi0+ZGVjbCkpLCBjZnVuLT5kZWNsLCB0cnVlKTsK KyAgICAgIGlmICgoUkVHX1AocmV0KSkKKwkgICYmIChpc19pbnRlZ2VyX3Jl ZyhSRUdOTyhyZXQpKSkKKwkgICYmIChpc19pbnRlZ2VyX3JlZyhyZWdfbnVt YmVyKSkKKwkgKQorCXsKKwkgIGlmICgoR0VUX01PREUocmV0KSA9PSBUSW1v ZGUpIHx8IChHRVRfTU9ERShyZXQpID09IENESW1vZGUpKQorCSAgICBpc19y ZXQgPSAocmVnX251bWJlciA9PSBBWF9SRUcpIHx8IChyZWdfbnVtYmVyID09 IERYX1JFRyk7CisJICBlbHNlCisJICAgIGlzX3JldCA9IChyZWdfbnVtYmVy ID09IEFYX1JFRyk7CisJfQorICAgICAgZWxzZSBpZiAoKFJFR19QKHJldCkp KQorCWlzX3JldCA9IFJFR05PKHJldCkgPT0gcmVnX251bWJlcjsKKyAgICAg IGVsc2UKKwl7CisJICAvLyBJcyBwYXJhbGxlbAorCSAgY29uc3QgdW5zaWdu ZWQgaW50IGxlbiA9IFhWRUNMRU4ocmV0LCAwKTsKKwkgIHVuc2lnbmVkIGlu dCBqID0gMHU7CisJICBib29sIGZvdW5kID0gZmFsc2U7CisJICB3aGlsZSAo IWZvdW5kICYmIGogPCBsZW4pCisJICAgIHsKKwkgICAgICBjb25zdCBydHgg ZXhwbGlzdCA9IFhWRUNFWFAocmV0LCAwLCBqKTsKKwkgICAgICBjb25zdCBy dHggcmV0X3JlZyA9IFhFWFAoZXhwbGlzdCwgMCk7CisJICAgICAgZm91bmQg PSBSRUdOTyhyZXRfcmVnKSA9PSByZWdfbnVtYmVyOworCSAgICAgICsrajsK KwkgICAgfQorCSAgaXNfcmV0ID0gZm91bmQ7CisJfQorCisgICAgfQorICBy ZXR1cm4gaXNfcmV0OworfQorCisvLyBNYWtlIHRoaXMgYmlnIGVub3VnaCB0 byBzdG9yZSBhbnkgaW5zdHJ1Y3Rpb24KKyNkZWZpbmUgTUFYX0NMRUFSX1NU UklOR19TSVpFIDUwCisKKy8qIEFkZHMgdG8gc3RyIGluIHBvcyBwb3NpdGlv biB0aGUgbmVhbWUgb2YgdGhlIHJlZ2lzdGVyIHJlZ25vLiovCitzdGF0aWMg c2l6ZV90CityZWdfdG9fc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGludCByZWdu bywgc2l6ZV90IHBvcywgY2hhciAqIGNvbnN0IHN0cikKK3sKKyAgc3RyW3Bv cysrXSA9ICclJzsKKyAgc3RyW3BvcysrXSA9ICclJzsKKyAgaWYgKHJlZ25v IDw9IFNUQUNLX1BPSU5URVJfUkVHTlVNKQorICAgIHN0cltwb3MrK10gPSAn ZSc7CisKKyAgc3RybmNweShzdHIgKyBwb3MsIHJlZ19uYW1lc1tyZWdub10s IE1BWF9DTEVBUl9TVFJJTkdfU0laRSAtIHBvcyk7CisgIHBvcyArPSBzdHJu bGVuKHJlZ19uYW1lc1tyZWdub10sIE1BWF9DTEVBUl9TVFJJTkdfU0laRSAt IHBvcyk7CisgIHJldHVybiBwb3M7Cit9CisKKy8qRW1pdHMgYW4gaW5zdHJ1 Y3Rpb24gdG8gY2xlYXIgcmVnbm8gcmVnaXN0ZXIuKi8KK3N0YXRpYyB2b2lk CitjbGVhcl9yZWdfZW1pdChjb25zdCB1bnNpZ25lZCBpbnQgcmVnbm8sIHJ0 eCAqb3BlcmFuZHMpCit7CisgIHN0YXRpYyBjaGFyIG91dHB1dFtNQVhfQ0xF QVJfU1RSSU5HX1NJWkVdOworICBzaXplX3Qgc2l6ZSA9IDB1OworICBib29s IGVtaXQgPSB0cnVlOworICBpZiAocmVnbm8gPD0gU1RBQ0tfUE9JTlRFUl9S RUdOVU0pCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgY2xlYXJf aW5zW10gPSAieG9ybFx0IjsKKyAgICAgIHNpemUgPSBzdHJubGVuKGNsZWFy X2lucywgc2l6ZW9mKGNsZWFyX2lucykpOworICAgICAgc3RybmNweShvdXRw dXQsIGNsZWFyX2lucywgc2l6ZSk7CisgICAgfQorICBlbHNlIGlmICgoRklS U1RfUkVYX0lOVF9SRUcgPD0gcmVnbm8pICYmIChyZWdubyA8PSBMQVNUX1JF WF9JTlRfUkVHKSkKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgY2hhciBj bGVhcl9pbnNbXSA9ICJ4b3JxXHQiOworICAgICAgc2l6ZSA9IHN0cm5sZW4o Y2xlYXJfaW5zLCBzaXplb2YoY2xlYXJfaW5zKSk7CisgICAgICBzdHJuY3B5 KG91dHB1dCwgY2xlYXJfaW5zLCBzaXplKTsKKyAgICB9CisgIGVsc2UgaWYg KCAoKEZJUlNUX1NTRV9SRUcgPD0gcmVnbm8pICYmIChyZWdubyA8PSBMQVNU X1NTRV9SRUcpKSB8fAorCSAgICAoKEZJUlNUX1JFWF9TU0VfUkVHIDw9IHJl Z25vKSAmJiAocmVnbm8gPD0gTEFTVF9SRVhfU1NFX1JFRykpICkKKyAgICB7 CisgICAgICBzdGF0aWMgY29uc3QgY2hhciBjbGVhcl9pbnNbXSA9ICJ4b3Jw c1x0IjsKKyAgICAgIHNpemUgPSBzdHJubGVuKGNsZWFyX2lucywgc2l6ZW9m KGNsZWFyX2lucykpOworICAgICAgc3RybmNweShvdXRwdXQsIGNsZWFyX2lu cywgc2l6ZSk7CisgICAgfQorICBlbHNlIGlmICgoRklSU1RfTU1YX1JFRyA8 PSByZWdubykgJiYgKHJlZ25vIDw9IExBU1RfTU1YX1JFRykpCisgICAgewor ICAgICAgc3RhdGljIGNvbnN0IGNoYXIgY2xlYXJfaW5zW10gPSAicHhvclx0 IjsKKyAgICAgIHNpemUgPSBzdHJubGVuKGNsZWFyX2lucywgc2l6ZW9mKGNs ZWFyX2lucykpOworICAgICAgc3RybmNweShvdXRwdXQsIGNsZWFyX2lucywg c2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgZW1pdCA9IGZhbHNlOworCisg IGlmIChlbWl0KQorICAgIHsKKyAgICAgIHNpemUgPSByZWdfdG9fc3RyaW5n IChyZWdubywgc2l6ZSwgb3V0cHV0KTsKKyAgICAgIGdjY19hc3NlcnQgKHNp emUgPCBNQVhfQ0xFQVJfU1RSSU5HX1NJWkUgLSAyKTsKKyAgICAgIG91dHB1 dFtzaXplKytdID0gJywnOworICAgICAgb3V0cHV0W3NpemUrK10gPSAnICc7 CisgICAgICBzaXplID0gcmVnX3RvX3N0cmluZyAocmVnbm8sIHNpemUsIG91 dHB1dCk7CisgICAgICBnY2NfYXNzZXJ0IChzaXplIDwgTUFYX0NMRUFSX1NU UklOR19TSVpFKTsKKyAgICAgIG91dHB1dFtzaXplXSA9ICdcMCc7CisgICAg ICBvdXRwdXRfYXNtX2luc24gKG91dHB1dCwgb3BlcmFuZHMpOworICAgIH0K K30KKworLyogRmluZHMgd2hpY2ggcmVnaXN0ZXJzIGNhbiBiZSBjbGVhcmVk IGFuZCBlbWl0cyBjb2RlIHRvIGRvIHRoYXQuKi8KK3ZvaWQgaXg4Nl9jbGVh cl9yZWdzX2VtaXQgKHJ0eCAqb3BlcmFuZHMpCit7CisgIGZvciAodW5zaWdu ZWQgaW50IGogPSAwdTsgaiA8PSBMQVNUX1JFWF9TU0VfUkVHOyArK2opCisg ICAgeworICAgICAgY29uc3QgYm9vbCBpc19yZXQgPSBpc191c2VkX2FzX3Jl dChqKTsKKyAgICAgIGNvbnN0IGJvb2wgaXNfcHJlcyA9IGlzX3ByZXNlcnZl ZF9yZWcoaik7CisgICAgICBpZiAoZGZfaGFyZF9yZWdfdXNlZF9wKGopICYm ICFpc19wcmVzICYmICFpc19yZXQpCisJY2xlYXJfcmVnX2VtaXQoaiwgb3Bl cmFuZHMpOworICAgIH0KK30KKwogLyogUmVzdG9yZSBmdW5jdGlvbiBzdGFj aywgZnJhbWUsIGFuZCByZWdpc3RlcnMuICAqLwogCiB2b2lkCkBAIC0xMzMz NSw2ICsxMzQ4MCw4IEBAIGl4ODZfZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5 bGUpCiAgIHN0cnVjdCBpeDg2X2ZyYW1lIGZyYW1lOwogICBib29sIHJlc3Rv cmVfcmVnc192aWFfbW92OwogICBib29sIHVzaW5nX2RyYXA7CisgIGNvbnN0 IGJvb2wgc2VjdXJpdHlfc2Vuc2l0aXZlX2F0dHJpYnV0ZSA9CisJaXg4Nl9z ZWNfc2Vuc2l0aXZlX2F0dHJfcCgpOwogCiAgIGl4ODZfZmluYWxpemVfc3Rh Y2tfcmVhbGlnbl9mbGFncyAoKTsKICAgaXg4Nl9jb21wdXRlX2ZyYW1lX2xh eW91dCAoJmZyYW1lKTsKQEAgLTEzNjIwLDYgKzEzNzY3LDE3IEBAIGl4ODZf ZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5bGUpCiAgIGVsc2UKICAgICBpeDg2 X2FkZF9xdWV1ZWRfY2ZhX3Jlc3RvcmVfbm90ZXMgKGdldF9sYXN0X2luc24g KCkpOwogCisgIC8qIElmICJzZWN1cml0eV9zZW5zaXRpdmUiIGF0dHJpYnV0 ZSBlbmFibGVkLCBlbWl0IGNvZGUgdG8gY2xlYXIgdGhlIHN0YWNrLiovCisg IGlmIChzZWN1cml0eV9zZW5zaXRpdmVfYXR0cmlidXRlKQorICAgIHsKKyAg ICAgIGNvbnN0IGludCBzdGFja19zaXplX3RvX2NsZWFyID0gZnJhbWUuc3Rh Y2tfcG9pbnRlcl9vZmZzZXQKKwkJCQkgICAgICAtIG0tPmZzLnNwX29mZnNl dDsKKyAgICAgIGNvbnN0IGludCBzaXplX2luX3dvcmRzID0gc3RhY2tfc2l6 ZV90b19jbGVhciAvIFVOSVRTX1BFUl9XT1JEOworICAgICAgaWYgKHN0YWNr X3NpemVfdG9fY2xlYXIpCisJZW1pdF9pbnNuKGdlbl9jbGVhcl9zdGFjayhH RU5fSU5UKHN0YWNrX3NpemVfdG9fY2xlYXIpLAorICAgICAgICAJICBHRU5f SU5UKHNpemVfaW5fd29yZHMpKSk7CisgICAgfQorCiAgIC8qIFNpYmNhbGwg ZXBpbG9ndWVzIGRvbid0IHdhbnQgYSByZXR1cm4gaW5zdHJ1Y3Rpb24uICAq LwogICBpZiAoc3R5bGUgPT0gMCkKICAgICB7CkBAIC0xMzYyNyw2ICsxMzc4 NSwxMCBAQCBpeDg2X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQogICAg ICAgcmV0dXJuOwogICAgIH0KIAorICAvKiBXZSBlbWl0IGNsZWFuaW5nIHJl Z2lzdGVycyBjb2RlIG9ubHkgaW4gbm9uIHNpYmNhbGxzKi8KKyAgaWYgKHNl Y3VyaXR5X3NlbnNpdGl2ZV9hdHRyaWJ1dGUpCisgICAgZW1pdF9pbnNuKGdl bl9jbGVhcl9yZWdzKCkpOworCiAgIGlmIChjcnRsLT5hcmdzLnBvcHNfYXJn cyAmJiBjcnRsLT5hcmdzLnNpemUpCiAgICAgewogICAgICAgcnR4IHBvcGMg PSBHRU5fSU5UIChjcnRsLT5hcmdzLnBvcHNfYXJncyk7CkBAIC00NDUzMiw2 ICs0NDY5NCwzMiBAQCBpeDg2X2hhbmRsZV9mbmRlY2xfYXR0cmlidXRlICh0 cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUsIGludCwKICAgcmV0dXJuIE5V TExfVFJFRTsKIH0KIAorc3RhdGljIHRyZWUKK2l4ODZfaGFuZGxlX3NlY3Vy aXR5X3NlbnNpdGl2ZV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFt ZSwgdHJlZSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCAqbm9fYWRkX2F0dHJzKQoreworICBpZiAoVFJFRV9DT0RFICgqbm9k ZSkgIT0gRlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAgICB3YXJuaW5nIChP UFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0 byBmdW5jdGlvbnMiLAorICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAq bm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFUQVJH RVRfNjRCSVQgfHwgaXg4Nl9jZnVuX2FiaSAoKSA9PSBNU19BQkkpCisgICAg eworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJp YnV0ZSBvbmx5IHZhbGlkIGZvciA2NGJpdHMgbm90IE1TIEFCSSIsCisgICAg ICAgICAgICAgICBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVl OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIERFQ0xfQVRUUklCVVRF UyAoKm5vZGUpCisgICAgICAgID0gdHJlZV9jb25zIChnZXRfaWRlbnRpZmll ciAoIm5vaW5saW5lIiksCisgICAgICAgICAgICAgICAgICAgICBOVUxMX1RS RUUsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKTsKKyAgICAgIERFQ0xfVU5J TkxJTkFCTEUgKCpub2RlKSA9IDE7CisgICAgfQorICByZXR1cm4gTlVMTF9U UkVFOworfQorCiBzdGF0aWMgYm9vbAogaXg4Nl9tc19iaXRmaWVsZF9sYXlv dXRfcCAoY29uc3RfdHJlZSByZWNvcmRfdHlwZSkKIHsKQEAgLTQ4NzQyLDYg KzQ4OTMwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3Bl YyBpeDg2X2F0dHJpYnV0ZV90YWJsZVtdID0KICAgICBmYWxzZSB9LAogICB7 ICJjYWxsZWVfcG9wX2FnZ3JlZ2F0ZV9yZXR1cm4iLCAxLCAxLCBmYWxzZSwg dHJ1ZSwgdHJ1ZSwKICAgICBpeDg2X2hhbmRsZV9jYWxsZWVfcG9wX2FnZ3Jl Z2F0ZV9yZXR1cm4sIHRydWUgfSwKKyAgeyAic2VjdXJpdHlfc2Vuc2l0aXZl IiwgMCwgMCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLAorICAgIGl4ODZfaGFuZGxl X3NlY3VyaXR5X3NlbnNpdGl2ZV9hdHRyaWJ1dGUsIGZhbHNlfSwKICAgLyog RW5kIGVsZW1lbnQuICAqLwogICB7IE5VTEwsICAgICAgICAwLCAwLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBmYWxzZSB9CiB9OwpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni5tZAppbmRleCBlZWQ0M2IxLi43YzJjY2MwIDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL2kzODYvaTM4Ni5tZAorKysgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni5tZApAQCAtMjcwLDYgKzI3MCwxMCBAQAogCiAgIDs7IEZvciBSRFBL UlUgYW5kIFdSUEtSVSBzdXBwb3J0CiAgIFVOU1BFQ1ZfUEtVCisKKyAgOzsg Rm9yIHNlY3VyaXR5X3NlbnNpdGl2ZSBhdHRyaWJ1dGUKKyAgVU5TUEVDVl9D TFJTVEFDSworICBVTlNQRUNWX0NMUlJFR1MKIF0pCiAKIDs7IENvbnN0YW50 cyB0byByZXByZXNlbnQgcm91bmRpbmcgbW9kZXMgaW4gdGhlIFJPVU5EIGlu c3RydWN0aW9uCkBAIC0xMjM0MSw2ICsxMjM0NSw4IEBACiAgIFsoc2ltcGxl X3JldHVybildCiAgICJpeDg2X2Nhbl91c2VfcmV0dXJuX2luc25fcCAoKSIK IHsKKyAgaWYgKGl4ODZfc2VjX3NlbnNpdGl2ZV9hdHRyX3AoKSkKKyAgICBl bWl0X2luc24oZ2VuX2NsZWFyX3JlZ3MoKSk7CiAgIGlmIChjcnRsLT5hcmdz LnBvcHNfYXJncykKICAgICB7CiAgICAgICBydHggcG9wYyA9IEdFTl9JTlQg KGNydGwtPmFyZ3MucG9wc19hcmdzKTsKQEAgLTEyMzYxLDYgKzEyMzY3LDgg QEAKICAgWyhzaW1wbGVfcmV0dXJuKV0KICAgIiFUQVJHRVRfU0VIICYmICFp eDg2X3N0YXRpY19jaGFpbl9vbl9zdGFjayIKIHsKKyAgaWYgKGl4ODZfc2Vj X3NlbnNpdGl2ZV9hdHRyX3AoKSkKKyAgICBlbWl0X2luc24oZ2VuX2NsZWFy X3JlZ3MoKSk7CiAgIGlmIChjcnRsLT5hcmdzLnBvcHNfYXJncykKICAgICB7 CiAgICAgICBydHggcG9wYyA9IEdFTl9JTlQgKGNydGwtPmFyZ3MucG9wc19h cmdzKTsKQEAgLTEyNTcyLDYgKzEyNTgwLDIzIEBACiAgIERPTkU7CiB9KQog CisoZGVmaW5lX2luc24gImNsZWFyX3JlZ3MiCisgIFsodW5zcGVjX3ZvbGF0 aWxlIFsoY29uc3RfaW50IDApXSBVTlNQRUNWX0NMUlJFR1MpXQorICAicmVs b2FkX2NvbXBsZXRlZCIKKyAgIioKKyAgeworICAgIGl4ODZfY2xlYXJfcmVn c19lbWl0IChvcGVyYW5kcyk7CisgICAgcmV0dXJuIFwiXCI7CisgIH0iCisp CisKKyhkZWZpbmVfaW5zbiAiY2xlYXJfc3RhY2siCisgIFsodW5zcGVjX3Zv bGF0aWxlIFsobWF0Y2hfb3BlcmFuZCAwICJjb25zdF9pbnRfb3BlcmFuZCIg IiIpCisgIChtYXRjaF9vcGVyYW5kIDEgImNvbnN0X2ludF9vcGVyYW5kIiAi IildIFVOU1BFQ1ZfQ0xSU1RBQ0spXQorICAiVEFSR0VUXzY0QklUIgorICAi bW92cVx0JSVyYXgsICUlcnNpXG5cdHhvcmxcdCUlZWF4LCAlJWVheFxuXHRt b3ZxXHQlJXJzcCwgJSVyZGlcblx0c3VicVx0JTAsICUlcmRpXG5cdG1vdmxc dCUxLCAlJWVjeFxuXHRyZXAgc3Rvc3Fcblx0bW92cVx0JSVyc2ksICUlcmF4 IgorKQorCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJlaF9yZXR1cm5faW50 ZXJuYWwiCiAgIFsoZWhfcmV0dXJuKV0KICAgIiIKZGlmZiAtLWdpdCBhL2dj Yy9kb2MvZXh0ZW5kLnRleGkgYi9nY2MvZG9jL2V4dGVuZC50ZXhpCmluZGV4 IDhmZGRiMzQuLjczZDlmMmQgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvZXh0ZW5k LnRleGkKKysrIGIvZ2NjL2RvYy9leHRlbmQudGV4aQpAQCAtNTIxNiw2ICs1 MjE2LDE0IEBAIHRoaXMgZnVuY3Rpb24gYXR0cmlidXRlIHRvIG1ha2UgR0ND IGdlbmVyYXRlIHRoZSBgYGhvdC1wYXRjaGluZycnIGZ1bmN0aW9uCiBwcm9s b2d1ZSB1c2VkIGluIFdpbjMyIEFQSSBmdW5jdGlvbnMgaW4gTWljcm9zb2Z0 IFdpbmRvd3MgWFAgU2VydmljZSBQYWNrIDIKIGFuZCBuZXdlci4KIAorQGl0 ZW0gc2VjdXJpdHlfc2Vuc2l0aXZlCitAY2luZGV4IEBjb2Rle3NlY3VyaXR5 X3NlbnNpdGl2ZX0gZnVuY3Rpb24gYXR0cmlidXRlLCB4ODYKKworT24geDg2 XzY0IHRhcmdldHMsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gYXR0cmli dXRlIHRvIG1ha2UgR0NDIGdlbmVyYXRlCitzdGFjayBhbmQgcmVnaXN0ZXJz IGNsZWFuaW5nIGNvZGUsIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhpcyBm dW5jdGlvbi4KK05vdGUgdGhhdCB0aGlzIHdpbGwgZW5hYmxlIHRoZSBhdHRy aWJ1dGUgQGNvZGV7bm9pbmxpbmV9LCBhbmQgd2lsbCBtYWtlIHRoZQorZnVu Y3Rpb24gbm90IHRvIHVzZSB0aGUgcmVkIHpvbmUuCisKIEBpdGVtIHJlZ3Bh cm0gKEB2YXJ7bnVtYmVyfSkKIEBjaW5kZXggQGNvZGV7cmVncGFybX0gZnVu Y3Rpb24gYXR0cmlidXRlLCB4ODYKIEBjaW5kZXggZnVuY3Rpb25zIHRoYXQg YXJlIHBhc3NlZCBhcmd1bWVudHMgaW4gcmVnaXN0ZXJzIG9uIHg4Ni0zMgpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvc2Vj dXJpdHlfc2Vuc2l0aXZlX2F0dHItYXNtLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9zZWN1cml0eV9zZW5zaXRpdmVfYXR0ci1hc20uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQzNzRhCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvc2VjdXJpdHlfc2Vuc2l0aXZlX2F0dHItYXNtLmMKQEAgLTAsMCArMSwx NCBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISBpYTMyIH0g fSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJyZXAgc3Rvc3EiIDEgfSB9 Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAieG9y bFxcdCVlc2ksICVlc2kiICAxIH0gfSAqLworCit2b2lkIHJlYWRfc2VjcmV0 KGNoYXIqIGJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOworaW50CisgIF9fYXR0 cmlidXRlX18oKHNlY3VyaXR5X3NlbnNpdGl2ZSkpCitjaGVja19wYXNzd29y ZCAodm9pZCkKK3sKKyAgY2hhciBidWZbMTZdOworICByZWFkX3NlY3JldCAo YnVmLCAxNik7CisgIHJldHVybiAxOworfQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3NlY3VyaXR5X3NlbnNpdGl2ZV9hdHRyLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9zZWN1cml0eV9zZW5zaXRpdmVfYXR0ci5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYWRkMTQK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9zZWN1cml0eV9zZW5zaXRpdmVfYXR0ci5jCkBAIC0wLDAgKzEsMzkg QEAKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAqLworCisjaW5jbHVkZSA8c3Ry aW5nLmg+CisKK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSByZWFk X3NlY3JldCAoY2hhciAqb3V0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3RybmNw eSAob3V0LCAic2VjcmV0IHBhc3N3b3JkIiwgc2l6ZSk7Cit9CisKK2ludAor ICBfX2F0dHJpYnV0ZV9fKChzZWN1cml0eV9zZW5zaXRpdmUpKQorY2hlY2tf cGFzc3dvcmQgKHZvaWQpCit7CisgIGNoYXIgYnVmWzE2XTsKKyAgcmVhZF9z ZWNyZXQgKGJ1ZiwgMTYpOworICByZXR1cm4gMTsKK30KKworLyogQXR0ZW1w dCB0byBhY2Nlc3MgdGhlIHNlY3JldCBzdGlsbCBvbiB0aGUgc3RhY2suICAq LworCitpbnQKKyAgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorc3RlYWxf cGFzc3dvcmQgKHZvaWQpCit7CisgIGNoYXIgYnVmWzE2XTsKKyAgaWYgKHN0 cnN0cihidWYsICJwYXNzd29yZCIpKQorICAgIHJldHVybiAxOworICByZXR1 cm4gMDsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICoq YXJndikKK3sKKyAgaWYgKCFjaGVja19wYXNzd29yZCAoKSkKKyAgICByZXR1 cm4gMTsKKworICBpZiAoc3RlYWxfcGFzc3dvcmQgKCkpCisgICAgcmV0dXJu IDI7Cit9Cg== --001a11406d722cda39052ea3dbd4--