From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 33231 invoked by alias); 22 Jul 2015 15:53:30 -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 33220 invoked by uid 89); 22 Jul 2015 15:53:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.0 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-wi0-f173.google.com Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com) (209.85.212.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 22 Jul 2015 15:53:26 +0000 Received: by wibud3 with SMTP id ud3so160256174wib.1 for ; Wed, 22 Jul 2015 08:53:22 -0700 (PDT) X-Received: by 10.194.201.71 with SMTP id jy7mr6625876wjc.93.1437580402371; Wed, 22 Jul 2015 08:53:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.188.139 with HTTP; Wed, 22 Jul 2015 08:52:42 -0700 (PDT) From: =?UTF-8?B?TWFudWVsIEzDs3Blei1JYsOhw7Fleg==?= Date: Wed, 22 Jul 2015 16:01:00 -0000 Message-ID: Subject: PR middle-end/16351 NULL dereference warnings To: Gcc Patch List , Richard Biener , Jakub Jelinek , Jeff Law , Florian Weimer Content-Type: multipart/mixed; boundary=047d7bae4944384e8c051b78c55e X-SW-Source: 2015-07/txt/msg01862.txt.bz2 --047d7bae4944384e8c051b78c55e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 2203 I took the patch in https://gcc.gnu.org/ml/gcc-patches/2014-01/msg01715.html and removed the Wnull-attribute part, since most of it can be done from the FE as shown in https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01857.html and also to make the patch smaller and easier to review. I also fixed the comments by Florian here: https://gcc.gnu.org/ml/gcc-patches/2014-02/msg00149.html and added more tests from the PR and its duplicates (one xfailed, I'll open a new PR about it). Futher cleanups may be possible (infer_nonnull_range_by_attribute checks flag_delete_null_pointer_checks, which seems weird to me but it matches the existing behavior of infer_nonnull_range). I added this to Wall to get as much testing as possible, we can always move it to Wextra or disable it by default just before the release if it turns out to be too noisy. Boostrapped and regression tested on x86_64-linux-gnu. OK? gcc/ChangeLog: 2015-07-22 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez Jeff Law PR c/16351 * doc/invoke.texi (Wnull-dereference): New. * tree-vrp.c (infer_value_range): Update call to infer_nonnull_range. * gimple-ssa-isolate-paths.c (find_implicit_erroneous_behaviour): Warn for potential NULL dereferences. (find_explicit_erroneous_behaviour): Warn for NULL dereferences. * ubsan.c (instrument_nonnull_arg): Call infer_nonnull_range_by_attribute. (instrument_nonnull_return): Likewise. * common.opt (Wnull-dereference); New. * gimple.c (infer_nonnull_range): Remove bool arguments. (infer_nonnull_range_by_dereference): New. (infer_nonnull_range_by_attribute): New. * gimple.h: Update declarations. gcc/testsuite/ChangeLog: 2015-07-22 Manuel L=C3=B3pez-Ib=C3=A1=C3=B1ez Jeff Law PR c/16351 * gcc.dg/tree-ssa/isolate-2.c: Close comment. * gcc.dg/tree-ssa/isolate-4.c: Likewise. * gcc.dg/tree-ssa/wnull-dereference.c: New test. * gcc.dg/tree-ssa/isolate-1.c: Test warnings with -Wnull-dereference. * gcc.dg/tree-ssa/isolate-3.c: Likewise. * gcc.dg/tree-ssa/isolate-5.c: Likewise. * c-c++-common/wnonnull-1.c: New test. --047d7bae4944384e8c051b78c55e Content-Type: text/plain; charset=US-ASCII; name="wnull-dereference.diff" Content-Disposition: attachment; filename="wnull-dereference.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_icey6tl40 Content-length: 26820 SW5kZXg6IGdjYy90cmVlLXZycC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90cmVlLXZycC5jCShyZXZpc2lvbiAyMjU4NjgpCisrKyBnY2Mv dHJlZS12cnAuYwkod29ya2luZyBjb3B5KQpAQCAtNDkzNiwxMSArNDkzNiwx MSBAQCBpbmZlcl92YWx1ZV9yYW5nZSAoZ2ltcGxlIHN0bXQsIHRyZWUgb3As CiAJICBicmVhazsKICAgICAgIGlmIChlID09IE5VTEwpCiAJcmV0dXJuIGZh bHNlOwogICAgIH0KIAotICBpZiAoaW5mZXJfbm9ubnVsbF9yYW5nZSAoc3Rt dCwgb3AsIHRydWUsIHRydWUpKQorICBpZiAoaW5mZXJfbm9ubnVsbF9yYW5n ZSAoc3RtdCwgb3ApKQogICAgIHsKICAgICAgICp2YWxfcCA9IGJ1aWxkX2lu dF9jc3QgKFRSRUVfVFlQRSAob3ApLCAwKTsKICAgICAgICpjb21wX2NvZGVf cCA9IE5FX0VYUFI7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4 OiBnY2MvZG9jL2ludm9rZS50ZXhpCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy9kb2MvaW52b2tlLnRleGkJKHJldmlzaW9uIDIyNTg2OCkKKysr IGdjYy9kb2MvaW52b2tlLnRleGkJKHdvcmtpbmcgY29weSkKQEAgLTI1OCwx MCArMjU4LDExIEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERp YWxlY3RzfS4KIC1XZnJhbWUtbGFyZ2VyLXRoYW49QHZhcntsZW59IC1Xbm8t ZnJlZS1ub25oZWFwLW9iamVjdCAtV2p1bXAtbWlzc2VzLWluaXQgQGdvbAog LVdpZ25vcmVkLXF1YWxpZmllcnMgIC1XaW5jb21wYXRpYmxlLXBvaW50ZXIt dHlwZXMgQGdvbAogLVdpbXBsaWNpdCAgLVdpbXBsaWNpdC1mdW5jdGlvbi1k ZWNsYXJhdGlvbiAgLVdpbXBsaWNpdC1pbnQgQGdvbAogLVdpbml0LXNlbGYg IC1XaW5saW5lICAtV25vLWludC1jb252ZXJzaW9uIEBnb2wKIC1Xbm8taW50 LXRvLXBvaW50ZXItY2FzdCAtV25vLWludmFsaWQtb2Zmc2V0b2YgQGdvbAor LVdudWxsLWRlcmVmZXJlbmNlIEBnb2wKIC1XaW52YWxpZC1wY2ggLVdsYXJn ZXItdGhhbj1AdmFye2xlbn0gIC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9u cyBAZ29sCiAtV2xvZ2ljYWwtb3AgLVdsb2dpY2FsLW5vdC1wYXJlbnRoZXNl cyAtV2xvbmctbG9uZyBAZ29sCiAtV21haW4gLVdtYXliZS11bmluaXRpYWxp emVkIC1XbWVtc2V0LXRyYW5zcG9zZWQtYXJncyBAZ29sCiAtV21pc2xlYWRp bmctaW5kZW50YXRpb24gLVdtaXNzaW5nLWJyYWNlcyBAZ29sCiAtV21pc3Np bmctZmllbGQtaW5pdGlhbGl6ZXJzIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMg QGdvbApAQCAtNDEzMCwxMCArNDEzMywyMCBAQCBBbGwgdGhlIGFib3ZlIEBv cHRpb257LVd1bnVzZWR9IG9wdGlvbnMgCiAKIEluIG9yZGVyIHRvIGdldCBh IHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlciwg eW91IG11c3QKIGVpdGhlciBzcGVjaWZ5IEBvcHRpb257LVdleHRyYSAtV3Vu dXNlZH0gKG5vdGUgdGhhdCBAb3B0aW9uey1XYWxsfSBpbXBsaWVzCiBAb3B0 aW9uey1XdW51c2VkfSksIG9yIHNlcGFyYXRlbHkgc3BlY2lmeSBAb3B0aW9u ey1XdW51c2VkLXBhcmFtZXRlcn0uCiAKK0BpdGVtIC1XbnVsbC1kZXJlZmVy ZW5jZQorQG9waW5kZXggV251bGwtZGVyZWZlcmVuY2UKK0BvcGluZGV4IFdu by1udWxsLWRlcmVmZXJlbmNlCitXYXJuIGlmIHRoZSBjb21waWxlciBkZXRl Y3RzIHBhdGhzIHdoaWNoIHRyaWdnZXIgZXJyb25lb3VzIG9yCit1bmRlZmlu ZWQgYmVoYXZpb3VyIGR1ZSB0byBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2lu dGVyLiAgVGhpcyBvcHRpb24KK2lzIG9ubHkgYWN0aXZlIHdoZW4gQG9wdGlv bnstZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzfSBpcyBhY3RpdmUsCit3 aGljaCBpcyBlbmFibGVkIGJ5IG9wdGltaXphdGlvbnMgaW4gbW9zdCB0YXJn ZXRzLiAgVGhlIHByZWNpc2lvbiBvZgordGhlIHdhcm5pbmdzIGRlcGVuZHMg b24gdGhlIG9wdGltaXphdGlvbiBvcHRpb25zIHVzZWQuICBUaGlzIG9wdGlv biBpcworZW5hYmxlZCBieSBAb3B0aW9uey1XYWxsfS4KKwogQGl0ZW0gLVd1 bmluaXRpYWxpemVkCiBAb3BpbmRleCBXdW5pbml0aWFsaXplZAogQG9waW5k ZXggV25vLXVuaW5pdGlhbGl6ZWQKIFdhcm4gaWYgYW4gYXV0b21hdGljIHZh cmlhYmxlIGlzIHVzZWQgd2l0aG91dCBmaXJzdCBiZWluZyBpbml0aWFsaXpl ZAogb3IgaWYgYSB2YXJpYWJsZSBtYXkgYmUgY2xvYmJlcmVkIGJ5IGEgQGNv ZGV7c2V0am1wfSBjYWxsLiBJbiBDKyssCkluZGV4OiBnY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9pc29sYXRlLTIuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9pc29s YXRlLTIuYwkocmV2aXNpb24gMjI1ODY4KQorKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvaXNvbGF0ZS0yLmMJKHdvcmtpbmcgY29weSkKQEAg LTMzLDEwICszMywxMCBAQCBiYXIgKHZvaWQpCiAgICByZXR1cm5zIG5vbi1u dWxsIGF0dHJpYnV0ZSB0byBpc29sYXRlIGEgcGF0aCB3aGVyZSBOVUxMIGZs b3dzIGludG8KICAgIGEgcmV0dXJuIHN0YXRlbWVudC4gIFdlIHRlc3QgdGhp cyB0d2ljZSwgb25jZSB3aGVyZSB0aGUgTlVMTCBmbG93cwogICAgZnJvbSBh IFBISSwgdGhlIHNlY29uZCB3aXRoIGFuIGV4cGxpY2l0IHJldHVybiAwIGlu IHRoZSBJTC4KIAogICAgV2UgYWxzbyB2ZXJpZnkgdGhhdCBhZnRlciBpc29s YXRpb24gcGhpLWNwcm9wIHNpbXBsaWZpZXMgdGhlCi0gICByZXR1cm4gc3Rh dGVtZW50IHNvIHRoYXQgaXQgcmV0dXJucyAmeiBkaXJlY3RseS4KKyAgIHJl dHVybiBzdGF0ZW1lbnQgc28gdGhhdCBpdCByZXR1cm5zICZ6IGRpcmVjdGx5 LiAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fdHJhcCIgMiAiaXNvbGF0ZS1wYXRocyJ9IH0gKi8KIC8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicmV0dXJuICZ6OyIg MSAicGhpY3Byb3AxIn0gfSAqLwogCiAKSW5kZXg6IGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL2lzb2xhdGUtNC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2lzb2xh dGUtNC5jCShyZXZpc2lvbiAyMjU4NjgpCisrKyBnY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9pc29sYXRlLTQuYwkod29ya2luZyBjb3B5KQpAQCAt MjIsMTAgKzIyLDEwIEBAIGJhciAodm9pZCkKIC8qIFdlIHRlc3RpbmcgdGhh dCB0aGUgcGF0aCBpc29sYXRpb24gY29kZSBjYW4gdGFrZSBhZHZhbnRhZ2Ug b2YgdGhlCiAgICByZXR1cm5zIG5vbi1udWxsIGF0dHJpYnV0ZSB0byBpc29s YXRlIGEgcGF0aCB3aGVyZSBOVUxMIGZsb3dzIGludG8KICAgIGEgcmV0dXJu IHN0YXRlbWVudC4KIAogICAgV2UgYWxzbyB2ZXJpZnkgdGhhdCBhZnRlciBp c29sYXRpb24gcGhpLWNwcm9wIHNpbXBsaWZpZXMgdGhlCi0gICByZXR1cm4g c3RhdGVtZW50IHNvIHRoYXQgaXQgcmV0dXJucyAmeiBkaXJlY3RseS4KKyAg IHJldHVybiBzdGF0ZW1lbnQgc28gdGhhdCBpdCByZXR1cm5zICZ6IGRpcmVj dGx5LiAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJfX2J1aWx0aW5fdHJhcCIgMiAiaXNvbGF0ZS1wYXRocyJ9IH0gKi8KIC8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9vIC4mei47 IiAxICJwaGljcHJvcDEifSB9ICovCiAKIApJbmRleDogZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2Evd251bGwtZGVyZWZlcmVuY2UuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVl LXNzYS93bnVsbC1kZXJlZmVyZW5jZS5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evd251bGwtZGVyZWZlcmVuY2Uu YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8gCisvKiBQUiBjLzE2NTMxICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzIC1XbnVsbC1k ZXJlZmVyZW5jZSIgfSAqLworLyogeyBkZy1za2lwLWlmICIiIGtlZXBzX251 bGxfcG9pbnRlcl9jaGVja3MgfSAqLworCisjaWZuZGVmIF9fY3BsdXNwbHVz CisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisjZWxzZQorI2RlZmluZSBOVUxM IG51bGxwdHIKKyNlbmRpZgorCitzdHJ1Y3QgdAoreworICBpbnQgYmFyOwor fTsKKworc3RydWN0IHQyCit7CisgIHN0cnVjdCB0ICpzOworfTsKKwordm9p ZCB0ZXN0MSAoKQoreworICBzdHJ1Y3QgdCAqcyA9IE5VTEw7CisgIHMtPmJh ciA9IDE7ICAvKiB7IGRnLXdhcm5pbmcgIm51bGwiIH0gKi8KK30KKwordm9p ZCB0ZXN0MiAoc3RydWN0IHQgKnMpCit7CisgIGlmIChzID09IE5VTEwgJiYg cy0+YmFyID4gMikgIC8qIHsgZGctd2FybmluZyAibnVsbCIgfSAqLworICAg IHJldHVybjsKKworICBzLT5iYXIgPSAzOworfQorCit2b2lkIHRlc3QzIChz dHJ1Y3QgdCAqcykKK3sKKyAgaWYgKHMgIT0gTlVMTCB8fCBzLT5iYXIgPiAy KSAgLyogeyBkZy13YXJuaW5nICJudWxsIiB9ICovCisgICAgcmV0dXJuOwor CisgIHMtPmJhciA9IDM7ICAvKiB7IGRnLXdhcm5pbmcgIm51bGwiIH0gKi8K K30KKwordm9pZCB0ZXN0NCAoc3RydWN0IHQgKnMpCit7CisgIGlmIChzICE9 IE5VTEwgJiYgcy0+YmFyID4gMikgIC8qIHsgZGctYm9ndXMgIm51bGwiIH0g Ki8KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgdGVzdDUgKHN0cnVjdCB0ICpz KQoreworICBpZiAocyA9PSBOVUxMIHx8IHMtPmJhciA+IDIpICAvKiB7IGRn LWJvZ3VzICJudWxsIiB9ICovCisgICAgcmV0dXJuOworCit9CisKK3ZvaWQg dGVzdDYgKHN0cnVjdCB0MiAqcykKK3sKKyAgaWYgKHMtPnMgPT0gMCAmJiBz LT5zLT5iYXIgPT0gMCkgIC8qIHsgZGctd2FybmluZyAibnVsbCIgIm51bGwi IHsgeGZhaWwgKi0qLSogfSB9ICovCisgICAgcmV0dXJuOworfQorCitpbnQg dGVzdDcgKHN0cnVjdCB0ICpzKQoreworICBzID0gMDsKKyAgcmV0dXJuIHMt PmJhcjsgIC8qIHsgZGctd2FybmluZyAibnVsbCIgfSAqLworfQorCitpbnQg dGVzdDggKCkKK3sKKyAgcmV0dXJuICgoc3RydWN0IHQgKikwKS0+YmFyOyAg LyogeyBkZy13YXJuaW5nICJudWxsIiB9ICovCit9CisKK3ZvaWQgdGVzdDkg KHN0cnVjdCB0ICoqcykKK3sKKyAgaWYgKHMgPT0gMCkKKyAgICAqcyA9IDA7 ICAvKiB7IGRnLXdhcm5pbmcgIm51bGwiIH0gKi8KK30KKworCkluZGV4OiBn Y2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9pc29sYXRlLTEuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9pc29sYXRlLTEuYwkocmV2aXNpb24gMjI1ODY4KQorKysgZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXNvbGF0ZS0xLmMJKHdvcmtp bmcgY29weSkKQEAgLTEsOCArMSw3IEBACi0KIC8qIHsgZGctZG8gY29tcGls ZSB9ICovIAotLyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtaXNv bGF0ZS1wYXRocyAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzIiB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1pc29sYXRlLXBh dGhzIC1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MgLVdudWxsLWRlcmVm ZXJlbmNlIiB9ICovCiAvKiB7IGRnLXNraXAtaWYgIiIga2VlcHNfbnVsbF9w b2ludGVyX2NoZWNrcyB9ICovCiAKIAogc3RydWN0IGRlbWFuZ2xlX2NvbXBv bmVudAogewpAQCAtMzcsMTIgKzM2LDEyIEBAIGRfbWFrZV9lbXB0eSAoc3Ry dWN0IGRfaW5mbyAqZGkpCiBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9uZW50ICoK IGRfdHlwZSAoc3RydWN0IGRfaW5mbyAqZGkpCiB7CiAgICBzdHJ1Y3QgZGVt YW5nbGVfY29tcG9uZW50ICpyZXQ7CiAgICByZXQgPSBkX21ha2VfZW1wdHkg KGRpKTsKLSAgIHJldC0+dHlwZSA9IDQyOwotICAgcmV0LT56enogPSAtMTsK KyAgIHJldC0+dHlwZSA9IDQyOwkJLyogeyBkZy13YXJuaW5nICJudWxsIHBv aW50ZXIgZGVyZWZlcmVuY2UiIH0gKi8KKyAgIHJldC0+enp6ID0gLTE7CQkv KiB7IGRnLXdhcm5pbmcgIm51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSIgfSAq LwogICAgcmV0dXJuIHJldDsKIH0KIAogLyogV2UncmUgdGVzdGluZyB0aHJl ZSBhc3BlY3RzIG9mIGlzb2xhdGlvbiBoZXJlLiAgRmlyc3QgdGhhdCBpc29s YXRpb24KICAgIG9jY3Vycywgc2Vjb25kIHRoYXQgaWYgd2UgaGF2ZSB0d28g bnVsbCBkZXJlZmVyZW5jZXMgaW4gYSBibG9jayB0aGF0CkBAIC01MSwxMCAr NTAsNSBAQCBkX3R5cGUgKHN0cnVjdCBkX2luZm8gKmRpKQogICAgYW5kIGZp bmFsbHkgdGhhdCB3ZSBzZXQgdGhlIFJIUyBvZiB0aGUgc3RvcmUgdG8gemVy by4gICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg Il9fYnVpbHRpbl90cmFwIiAxICJpc29sYXRlLXBhdGhzIn0gfSAqLwogLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICItPnR5cGUgPSA0 MiIgMSAiaXNvbGF0ZS1wYXRocyJ9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiLT50eXBlID17dn0gMCIgMSAiaXNvbGF0 ZS1wYXRocyJ9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiLT56enoiIDEgImlzb2xhdGUtcGF0aHMifSB9ICovCi0KLQot Ci0KLQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXNv bGF0ZS0zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXNvbGF0ZS0zLmMJKHJldmlzaW9uIDIy NTg2OCkKKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2lzb2xh dGUtMy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogeyBk Zy1kbyBjb21waWxlIH0gKi8gCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1 bXAtdHJlZS1pc29sYXRlLXBhdGhzIC1mZGVsZXRlLW51bGwtcG9pbnRlci1j aGVja3MiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVl LWlzb2xhdGUtcGF0aHMgLWZkZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcyAt V251bGwtZGVyZWZlcmVuY2UiIH0gKi8KIC8qIHsgZGctc2tpcC1pZiAiIiBr ZWVwc19udWxsX3BvaW50ZXJfY2hlY2tzIH0gKi8KIAogCiB0eXBlZGVmIF9f U0laRV9UWVBFX18gc2l6ZV90OwogZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9p ZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQpAQCAtMjcsMTEgKzI3LDEx IEBAIHR5cGVkZWYgc3RydWN0IFZFQ19ydHhfZ2MKIAogc3RhdGljIF9faW5s aW5lX18gdm9pZAogVkVDX3J0eF9nY19zYWZlX2dyb3cgKFZFQ19ydHhfZ2Mg KiogdmVjXywgaW50IHNpemVfLCBjb25zdCBjaGFyICpmaWxlXywKICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lXywgY29uc3QgY2hhciAq ZnVuY3Rpb25fKQogewotICAoKCp2ZWNfKSA/ICYoKnZlY18pLT5iYXNlIDog MCktPm51bSA9IHNpemVfOworICAoKCp2ZWNfKSA/ICYoKnZlY18pLT5iYXNl IDogMCktPm51bSA9IHNpemVfOyAvKiB7IGRnLXdhcm5pbmcgIm51bGwgcG9p bnRlciBkZXJlZmVyZW5jZSIgfSAqLwogfSAKIAogc3RhdGljIF9faW5saW5l X18gdm9pZAogVkVDX3J0eF9nY19zYWZlX2dyb3dfY2xlYXJlZCAoVkVDX3J0 eF9nYyAqKiB2ZWNfLCBpbnQgc2l6ZV8sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlXywgdW5zaWduZWQgbGluZV8s CkluZGV4OiBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9pc29sYXRl LTUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9pc29sYXRlLTUuYwkocmV2aXNpb24gMjI1ODY4 KQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXNvbGF0ZS01 LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLyAKLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZGVsZXRl LW51bGwtcG9pbnRlci1jaGVja3MgLWZkdW1wLXRyZWUtaXNvbGF0ZS1wYXRo cyAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIC1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MgLWZkdW1wLXRy ZWUtaXNvbGF0ZS1wYXRocyAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQgLVdudWxs LWRlcmVmZXJlbmNlIiB9ICovCiAvKiB7IGRnLXNraXAtaWYgIiIga2VlcHNf bnVsbF9wb2ludGVyX2NoZWNrcyB9ICovCiAKIHN0cnVjdCBkZW1hbmdsZV9j b21wb25lbnQKIHsKIApAQCAtMzQsMTIgKzM0LDEyIEBAIGRfbWFrZV9lbXB0 eSAoc3RydWN0IGRfaW5mbyAqZGkpCiBzdHJ1Y3QgZGVtYW5nbGVfY29tcG9u ZW50ICoKIGRfdHlwZSAoc3RydWN0IGRfaW5mbyAqZGkpCiB7CiAgICBzdHJ1 Y3QgZGVtYW5nbGVfY29tcG9uZW50ICpyZXQ7CiAgICByZXQgPSBkX21ha2Vf ZW1wdHkgKGRpKTsKLSAgIGZvbyAocmV0LT50eXBlKTsKLSAgIGJhciAocmV0 LT56enopOworICAgZm9vIChyZXQtPnR5cGUpOyAvKiB7IGRnLXdhcm5pbmcg Im51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSIgfSAqLworICAgYmFyIChyZXQt Pnp6eik7IC8qIHsgZGctd2FybmluZyAibnVsbCBwb2ludGVyIGRlcmVmZXJl bmNlIiB9ICovCiAgICByZXR1cm4gcmV0OwogfQogCiAvKiBXZSdyZSB0ZXN0 aW5nIHR3byBhc3BlY3RzIG9mIGlzb2xhdGlvbiBoZXJlLiAgRmlyc3QgdGhh dCBpc29sYXRpb24KICAgIG9jY3Vycywgc2Vjb25kIHRoYXQgaWYgd2UgaGF2 ZSB0d28gbnVsbCBkZXJlZmVyZW5jZXMgaW4gYSBibG9jayB0aGF0CkluZGV4 OiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi93bm9ubnVsbC0xLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vd25vbm51bGwtMS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vd25vbm51bGwtMS5jCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDQyIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLyAKKy8q IHsgZGctb3B0aW9ucyAiLVdub25udWxsIiB9ICovCisKKworZXh0ZXJuIHZv aWQgZm9vKHZvaWQgKikgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fICgx KSkpOworCitpbnQgejsKK2ludCB5OworCit2b2lkCitjb20gKGludCBhKQor eworICBmb28gKGEgPT0gNDIgPyAmeiAgOiAodm9pZCAqKSAwKTsgLyogeyBk Zy13YXJuaW5nICJudWxsIiB9ICovCit9CisKK3ZvaWQKK2JhciAodm9pZCkK K3sKKyAgZm9vICgodm9pZCAqKTApOyAvKiB7IGRnLXdhcm5pbmcgIm51bGwi IH0gKi8KK30KKworaW50ICogZm9vX3IoaW50IGEpIF9fYXR0cmlidXRlX18o KHJldHVybnNfbm9ubnVsbCkpOworaW50ICogYmFyX3Iodm9pZCkgX19hdHRy aWJ1dGVfXygocmV0dXJuc19ub25udWxsKSk7CisKK2ludCAqCitmb29fcihp bnQgYSkKK3sKKyAgc3dpdGNoIChhKQorICAgIHsKKyAgICAgIGNhc2UgMDoK KyAgICAgICAgcmV0dXJuICZ6OworICAgICAgZGVmYXVsdDoKKyAgICAgICAg cmV0dXJuIChpbnQgKikwOyAvKiB7IGRnLXdhcm5pbmcgIm51bGwiIH0gKi8K KyAgICB9Cit9CisKK2ludCAqCitiYXJfciAodm9pZCkKK3sKKyAgcmV0dXJu IDA7CQkvKiB7IGRnLXdhcm5pbmcgIm51bGwiIH0gKi8KK30KKwpJbmRleDog Z2NjL2dpbXBsZS1zc2EtaXNvbGF0ZS1wYXRocy5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGdjYy9naW1wbGUtc3NhLWlzb2xhdGUtcGF0aHMuYwko cmV2aXNpb24gMjI1ODY4KQorKysgZ2NjL2dpbXBsZS1zc2EtaXNvbGF0ZS1w YXRocy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksMTUgKzMyOSwzMyBAQCBm aW5kX2ltcGxpY2l0X2Vycm9uZW91c19iZWhhdmlvdXIgKHZvaWQpCiAJCSAg ICAgaW4gb3RoZXIgYmxvY2tzIHdvdWxkIHJlcXVpcmUgbW9yZSBjb21wbGV4 IHBhdGgKIAkJICAgICBpc29sYXRpb24gY29kZS4gICAqLwogCQkgIGlmIChn aW1wbGVfYmIgKHVzZV9zdG10KSAhPSBiYikKIAkJICAgIGNvbnRpbnVlOwog Ci0JCSAgaWYgKGluZmVyX25vbm51bGxfcmFuZ2UgKHVzZV9zdG10LCBsaHMs Ci0JCQkJCSAgIGZsYWdfaXNvbGF0ZV9lcnJvbmVvdXNfcGF0aHNfZGVyZWZl cmVuY2UsCi0JCQkJCSAgIGZsYWdfaXNvbGF0ZV9lcnJvbmVvdXNfcGF0aHNf YXR0cmlidXRlKSkKKwkJICBib29sIGJ5X2RlcmVmZXJlbmNlIAorCQkgICAg PSBpbmZlcl9ub25udWxsX3JhbmdlX2J5X2RlcmVmZXJlbmNlICh1c2Vfc3Rt dCwgbGhzKTsKIAorCQkgIGlmIChieV9kZXJlZmVyZW5jZSAKKwkJICAgICAg fHwgaW5mZXJfbm9ubnVsbF9yYW5nZV9ieV9hdHRyaWJ1dGUgKHVzZV9zdG10 LCBsaHMpKQogCQkgICAgeworCQkgICAgICBsb2NhdGlvbl90IGxvYyA9IGdp bXBsZV9sb2NhdGlvbiAodXNlX3N0bXQpCisJCQk/IGdpbXBsZV9sb2NhdGlv biAodXNlX3N0bXQpCisJCQk6IGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uIChw aGksIGkpOworCisJCSAgICAgIGlmIChieV9kZXJlZmVyZW5jZSkKKwkJCXsK KwkJCSAgd2FybmluZ19hdCAobG9jLCBPUFRfV251bGxfZGVyZWZlcmVuY2Us CisJCQkJICAgICAgInBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVu Y2UiKTsKKwkJCSAgaWYgKCFmbGFnX2lzb2xhdGVfZXJyb25lb3VzX3BhdGhz X2RlcmVmZXJlbmNlKQorCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkgICAg ICBlbHNlIAorCQkJeworCQkJICBpZiAoIWZsYWdfaXNvbGF0ZV9lcnJvbmVv dXNfcGF0aHNfYXR0cmlidXRlKQorCQkJICAgIGNvbnRpbnVlOworCQkJfQor CiAJCSAgICAgIGR1cGxpY2F0ZSA9IGlzb2xhdGVfcGF0aCAoYmIsIGR1cGxp Y2F0ZSwgZSwKIAkJCQkJCXVzZV9zdG10LCBsaHMsIGZhbHNlKTsKIAogCQkg ICAgICAvKiBXaGVuIHdlIHJlbW92ZSBhbiBpbmNvbWluZyBlZGdlLCB3ZSBu ZWVkIHRvCiAJCQkgcmVwcm9jZXNzIHRoZSBJdGggZWxlbWVudC4gICovCkBA IC0zNzksMTcgKzM5NywzMyBAQCBmaW5kX2V4cGxpY2l0X2Vycm9uZW91c19i ZWhhdmlvdXIgKHZvaWQpCiAJIGJlY2F1c2Ugb2YganVtcCB0aHJlYWRpbmcg YW5kIGNvbnN0YW50IHByb3BhZ2F0aW9uLiAgKi8KICAgICAgIGZvciAoc2kg PSBnc2lfc3RhcnRfYmIgKGJiKTsgIWdzaV9lbmRfcCAoc2kpOyBnc2lfbmV4 dCAoJnNpKSkKIAl7CiAJICBnaW1wbGUgc3RtdCA9IGdzaV9zdG10IChzaSk7 CiAKLQkgIC8qIEJ5IHBhc3NpbmcgbnVsbF9wb2ludGVyX25vZGUsIHdlIGNh biB1c2UgaW5mZXJfbm9ubnVsbF9yYW5nZQotCSAgICAgdG8gZGV0ZWN0IGV4 cGxpY2l0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIG90aGVyIHVz ZXMKLQkgICAgIHdoZXJlIGEgbm9uLU5VTEwgdmFsdWUgaXMgcmVxdWlyZWQu ICAqLwotCSAgaWYgKGluZmVyX25vbm51bGxfcmFuZ2UgKHN0bXQsIG51bGxf cG9pbnRlcl9ub2RlLAotCQkJCSAgIGZsYWdfaXNvbGF0ZV9lcnJvbmVvdXNf cGF0aHNfZGVyZWZlcmVuY2UsCi0JCQkJICAgZmxhZ19pc29sYXRlX2Vycm9u ZW91c19wYXRoc19hdHRyaWJ1dGUpKQorCSAgLyogQnkgcGFzc2luZyBudWxs X3BvaW50ZXJfbm9kZSwgd2UgY2FuIHVzZSB0aGUKKwkgICAgIGluZmVyX25v bm51bGxfcmFuZ2UgZnVuY3Rpb25zIHRvIGRldGVjdCBleHBsaWNpdCBOVUxM CisJICAgICBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgb3RoZXIgdXNlcyB3 aGVyZSBhIG5vbi1OVUxMCisJICAgICB2YWx1ZSBpcyByZXF1aXJlZC4gICov CisJICAKKwkgIGJvb2wgYnlfZGVyZWZlcmVuY2UKKwkgICAgPSBpbmZlcl9u b25udWxsX3JhbmdlX2J5X2RlcmVmZXJlbmNlIChzdG10LCBudWxsX3BvaW50 ZXJfbm9kZSk7CisJICBpZiAoYnlfZGVyZWZlcmVuY2UKKwkgICAgICB8fCBp bmZlcl9ub25udWxsX3JhbmdlX2J5X2F0dHJpYnV0ZSAoc3RtdCwgbnVsbF9w b2ludGVyX25vZGUpKQogCSAgICB7CisJICAgICAgaWYgKGJ5X2RlcmVmZXJl bmNlKQorCQl7CisJCSAgd2FybmluZ19hdCAoZ2ltcGxlX2xvY2F0aW9uIChz dG10KSwgT1BUX1dudWxsX2RlcmVmZXJlbmNlLAorCQkJICAgICAgIm51bGwg cG9pbnRlciBkZXJlZmVyZW5jZSIpOworCQkgIGlmICghZmxhZ19pc29sYXRl X2Vycm9uZW91c19wYXRoc19kZXJlZmVyZW5jZSkKKwkJICAgIGNvbnRpbnVl OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKCFmbGFnX2lzb2xh dGVfZXJyb25lb3VzX3BhdGhzX2F0dHJpYnV0ZSkKKwkJICAgIGNvbnRpbnVl OworCQl9CisKIAkgICAgICBpbnNlcnRfdHJhcF9hbmRfcmVtb3ZlX3RyYWls aW5nX3N0YXRlbWVudHMgKCZzaSwKIAkJCQkJCQkgIG51bGxfcG9pbnRlcl9u b2RlKTsKIAogCSAgICAgIC8qIEFuZCBmaW5hbGx5LCByZW1vdmUgYWxsIG91 dGdvaW5nIGVkZ2VzIGZyb20gQkIuICAqLwogCSAgICAgIGVkZ2UgZTsKQEAg LTUzMiwxMSArNTY2LDEyIEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGdh dGUgKGZ1bmN0aW9uICopCiAgICAgewogICAgICAgLyogSWYgd2UgZG8gbm90 IGhhdmUgYSBzdWl0YWJsZSBidWlsdGluIGZ1bmN0aW9uIGZvciB0aGUgdHJh cCBzdGF0ZW1lbnQsCiAJIHRoZW4gZG8gbm90IHBlcmZvcm0gdGhlIG9wdGlt aXphdGlvbi4gICovCiAgICAgICByZXR1cm4gKGZsYWdfaXNvbGF0ZV9lcnJv bmVvdXNfcGF0aHNfZGVyZWZlcmVuY2UgIT0gMAotCSAgICAgIHx8IGZsYWdf aXNvbGF0ZV9lcnJvbmVvdXNfcGF0aHNfYXR0cmlidXRlICE9IDApOworCSAg ICAgIHx8IGZsYWdfaXNvbGF0ZV9lcnJvbmVvdXNfcGF0aHNfYXR0cmlidXRl ICE9IDAKKwkgICAgICB8fCB3YXJuX251bGxfZGVyZWZlcmVuY2UpOwogICAg IH0KIAogICB2aXJ0dWFsIHVuc2lnbmVkIGludCBleGVjdXRlIChmdW5jdGlv biAqKQogICAgIHsKICAgICAgIHJldHVybiBnaW1wbGVfc3NhX2lzb2xhdGVf ZXJyb25lb3VzX3BhdGhzICgpOwpJbmRleDogZ2NjL3Vic2FuLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Vic2FuLmMJKHJldmlzaW9uIDIy NTg2OCkKKysrIGdjYy91YnNhbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEz LDExICsxNjEzLDExIEBAIGluc3RydW1lbnRfbm9ubnVsbF9hcmcgKGdpbXBs ZV9zdG10X2l0ZXIKICAgbG9jWzFdID0gVU5LTk9XTl9MT0NBVElPTjsKICAg Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnaW1wbGVfY2FsbF9udW1f YXJncyAoc3RtdCk7IGkrKykKICAgICB7CiAgICAgICB0cmVlIGFyZyA9IGdp bXBsZV9jYWxsX2FyZyAoc3RtdCwgaSk7CiAgICAgICBpZiAoUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAoYXJnKSkKLQkgICYmIGluZmVyX25vbm51bGxf cmFuZ2UgKHN0bXQsIGFyZywgZmFsc2UsIHRydWUpKQorCSAgJiYgaW5mZXJf bm9ubnVsbF9yYW5nZV9ieV9hdHRyaWJ1dGUgKHN0bXQsIGFyZykpCiAJewog CSAgZ2ltcGxlIGc7CiAJICBpZiAoIWlzX2dpbXBsZV92YWwgKGFyZykpCiAJ ICAgIHsKIAkgICAgICBnID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobWFrZV9z c2FfbmFtZSAoVFJFRV9UWVBFIChhcmcpKSwgYXJnKTsKQEAgLTE2NzgsMTEg KzE2NzgsMTEgQEAgaW5zdHJ1bWVudF9ub25udWxsX3JldHVybiAoZ2ltcGxl X3N0bXRfaQogICBsb2NbMF0gPSBnaW1wbGVfbG9jYXRpb24gKHN0bXQpOwog ICBsb2NbMV0gPSBVTktOT1dOX0xPQ0FUSU9OOwogICBpZiAoYXJnCiAgICAg ICAmJiBQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChhcmcpKQogICAgICAg JiYgaXNfZ2ltcGxlX3ZhbCAoYXJnKQotICAgICAgJiYgaW5mZXJfbm9ubnVs bF9yYW5nZSAoc3RtdCwgYXJnLCBmYWxzZSwgdHJ1ZSkpCisgICAgICAmJiBp bmZlcl9ub25udWxsX3JhbmdlX2J5X2F0dHJpYnV0ZSAoc3RtdCwgYXJnKSkK ICAgICB7CiAgICAgICBiYXNpY19ibG9jayB0aGVuX2JiLCBmYWxsdGhydV9i YjsKICAgICAgICpnc2kgPSBjcmVhdGVfY29uZF9pbnNlcnRfcG9pbnQgKGdz aSwgdHJ1ZSwgZmFsc2UsIHRydWUsCiAJCQkJICAgICAgICZ0aGVuX2JiLCAm ZmFsbHRocnVfYmIpOwogICAgICAgZ2ltcGxlIGcgPSBnaW1wbGVfYnVpbGRf Y29uZCAoRVFfRVhQUiwgYXJnLApJbmRleDogZ2NjL2NvbW1vbi5vcHQKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL2NvbW1vbi5vcHQJKHJldmlz aW9uIDIyNTg2OCkKKysrIGdjYy9jb21tb24ub3B0CSh3b3JraW5nIGNvcHkp CkBAIC01OTAsMTAgKzU5MCwxNSBAQCBDb21tb24gUmVqZWN0TmVnYXRpdmUg Sm9pbmVkIFdhcm5pbmcgVW5kCiAKIFdsYXJnZXItdGhhbj0KIENvbW1vbiBS ZWplY3ROZWdhdGl2ZSBKb2luZWQgVUludGVnZXIgV2FybmluZwogLVdsYXJn ZXItdGhhbj08bnVtYmVyPglXYXJuIGlmIGFuIG9iamVjdCBpcyBsYXJnZXIg dGhhbiA8bnVtYmVyPiBieXRlcwogCitXbnVsbC1kZXJlZmVyZW5jZQorQ29t bW9uIFZhcih3YXJuX251bGxfZGVyZWZlcmVuY2UpIFdhcm5pbmcgRW5hYmxl ZEJ5KFdhbGwpCitXYXJuIGlmIHRoZSBjb21waWxlciBkZXRlY3RzIHBhdGhz IHdoaWNoIHRyaWdnZXIgZXJyb25lb3VzIG9yIHVuZGVmaW5lZAorYmVoYXZp b3VyIGR1ZSB0byBkZXJlZmVyZW5jaW5nIGEgTlVMTCBwb2ludGVyLgorCiBX dW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucwogQ29tbW9uIFZhcih3YXJuX3Vu c2FmZV9sb29wX29wdGltaXphdGlvbnMpIFdhcm5pbmcKIFdhcm4gaWYgdGhl IGxvb3AgY2Fubm90IGJlIG9wdGltaXplZCBkdWUgdG8gbm9udHJpdmlhbCBh c3N1bXB0aW9ucy4KIAogV21pc3Npbmctbm9yZXR1cm4KSW5kZXg6IGdjYy9n aW1wbGUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvZ2ltcGxl LmMJKHJldmlzaW9uIDIyNTg2OCkKKysrIGdjYy9naW1wbGUuYwkod29ya2lu ZyBjb3B5KQpAQCAtMjYxNiwzNSArMjYxNiw1MiBAQCBjaGVja19sb2Fkc3Rv cmUgKGdpbXBsZSwgdHJlZSBvcCwgdHJlZSwgCiAgICAgICAmJiBvcGVyYW5k X2VxdWFsX3AgKFRSRUVfT1BFUkFORCAob3AsIDApLCAodHJlZSlkYXRhLCAw KSkKICAgICByZXR1cm4gdHJ1ZTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi0v KiBJZiBPUCBjYW4gYmUgaW5mZXJyZWQgdG8gYmUgbm9uLU5VTEwgYWZ0ZXIg U1RNVCBleGVjdXRlcywgcmV0dXJuIHRydWUuCiAKLSAgIERFUkVGRVJFTkNF IGlzIFRSVUUgaWYgd2UgY2FuIHVzZSBhIHBvaW50ZXIgZGVyZWZlcmVuY2Ug dG8gaW5mZXIgYQotICAgbm9uLU5VTEwgcmFuZ2UsIEZBTFNFIG90aGVyd2lz ZS4KLQotICAgQVRUUklCVVRFIGlzIFRSVUUgaWYgd2UgY2FuIHVzZSBhdHRy aWJ1dGVzIHRvIGluZmVyIGEgbm9uLU5VTEwgcmFuZ2UKLSAgIGZvciBmdW5j dGlvbiBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMuICBGQUxTRSBvdGhl cndpc2UuICAqLworLyogUmV0dXJuIHRydWUgaWYgT1AgY2FuIGJlIGluZmVy cmVkIHRvIGJlIG5vbi1OVUxMIGFmdGVyIFNUTVQgZXhlY3V0ZXMsCisgICBl aXRoZXIgYnkgdXNpbmcgYSBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGF0dHJp YnV0ZXMuICAqLworYm9vbAoraW5mZXJfbm9ubnVsbF9yYW5nZSAoZ2ltcGxl IHN0bXQsIHRyZWUgb3ApCit7CisgIHJldHVybiBpbmZlcl9ub25udWxsX3Jh bmdlX2J5X2RlcmVmZXJlbmNlIChzdG10LCBvcCkKKyAgICB8fCBpbmZlcl9u b25udWxsX3JhbmdlX2J5X2F0dHJpYnV0ZSAoc3RtdCwgb3ApOworfQogCisv KiBSZXR1cm4gdHJ1ZSBpZiBPUCBjYW4gYmUgaW5mZXJyZWQgdG8gYmUgbm9u LU5VTEwgYWZ0ZXIgU1RNVAorICAgZXhlY3V0ZXMgYnkgdXNpbmcgYSBwb2lu dGVyIGRlcmVmZXJlbmNlLiAgKi8KIGJvb2wKLWluZmVyX25vbm51bGxfcmFu Z2UgKGdpbXBsZSBzdG10LCB0cmVlIG9wLCBib29sIGRlcmVmZXJlbmNlLCBi b29sIGF0dHJpYnV0ZSkKK2luZmVyX25vbm51bGxfcmFuZ2VfYnlfZGVyZWZl cmVuY2UgKGdpbXBsZSBzdG10LCB0cmVlIG9wKQogewogICAvKiBXZSBjYW4g b25seSBhc3N1bWUgdGhhdCBhIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2lsbCB5 aWVsZAogICAgICBub24tTlVMTCBpZiAtZmRlbGV0ZS1udWxsLXBvaW50ZXIt Y2hlY2tzIGlzIGVuYWJsZWQuICAqLwogICBpZiAoIWZsYWdfZGVsZXRlX251 bGxfcG9pbnRlcl9jaGVja3MKICAgICAgIHx8ICFQT0lOVEVSX1RZUEVfUCAo VFJFRV9UWVBFIChvcCkpCiAgICAgICB8fCBnaW1wbGVfY29kZSAoc3RtdCkg PT0gR0lNUExFX0FTTSkKICAgICByZXR1cm4gZmFsc2U7CiAKLSAgaWYgKGRl cmVmZXJlbmNlCi0gICAgICAmJiB3YWxrX3N0bXRfbG9hZF9zdG9yZV9vcHMg KHN0bXQsICh2b2lkICopb3AsCi0JCQkJICAgY2hlY2tfbG9hZHN0b3JlLCBj aGVja19sb2Fkc3RvcmUpKQorICBpZiAod2Fsa19zdG10X2xvYWRfc3RvcmVf b3BzIChzdG10LCAodm9pZCAqKW9wLAorCQkJCWNoZWNrX2xvYWRzdG9yZSwg Y2hlY2tfbG9hZHN0b3JlKSkKICAgICByZXR1cm4gdHJ1ZTsKIAotICBpZiAo YXR0cmlidXRlCi0gICAgICAmJiBpc19naW1wbGVfY2FsbCAoc3RtdCkgJiYg IWdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQpKQorICByZXR1cm4gZmFs c2U7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIE9QIGNhbiBiZSBpbmZlcnJl ZCB0byBiZSBhIG5vbi1OVUxMIGFmdGVyIFNUTVQKKyAgIGV4ZWN1dGVzIGJ5 IHVzaW5nIGF0dHJpYnV0ZXMuICAqLworYm9vbAoraW5mZXJfbm9ubnVsbF9y YW5nZV9ieV9hdHRyaWJ1dGUgKGdpbXBsZSBzdG10LCB0cmVlIG9wKQorewor ICAvKiBXZSBjYW4gb25seSBhc3N1bWUgdGhhdCBhIHBvaW50ZXIgZGVyZWZl cmVuY2Ugd2lsbCB5aWVsZAorICAgICBub24tTlVMTCBpZiAtZmRlbGV0ZS1u dWxsLXBvaW50ZXItY2hlY2tzIGlzIGVuYWJsZWQuICAqLworICBpZiAoIWZs YWdfZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MKKyAgICAgIHx8ICFQT0lO VEVSX1RZUEVfUCAoVFJFRV9UWVBFIChvcCkpCisgICAgICB8fCBnaW1wbGVf Y29kZSAoc3RtdCkgPT0gR0lNUExFX0FTTSkKKyAgICByZXR1cm4gZmFsc2U7 CisKKyAgaWYgKGlzX2dpbXBsZV9jYWxsIChzdG10KSAmJiAhZ2ltcGxlX2Nh bGxfaW50ZXJuYWxfcCAoc3RtdCkpCiAgICAgewogICAgICAgdHJlZSBmbnR5 cGUgPSBnaW1wbGVfY2FsbF9mbnR5cGUgKHN0bXQpOwogICAgICAgdHJlZSBh dHRycyA9IFRZUEVfQVRUUklCVVRFUyAoZm50eXBlKTsKICAgICAgIGZvciAo OyBhdHRyczsgYXR0cnMgPSBUUkVFX0NIQUlOIChhdHRycykpCiAJewpAQCAt MjY3OSwxNyArMjY5NiwxNiBAQCBpbmZlcl9ub25udWxsX3JhbmdlIChnaW1w bGUgc3RtdCwgdHJlZSBvCiAJfQogICAgIH0KIAogICAvKiBJZiB0aGlzIGZ1 bmN0aW9uIGlzIG1hcmtlZCBhcyByZXR1cm5pbmcgbm9uLW51bGwsIHRoZW4g d2UgY2FuCiAgICAgIGluZmVyIE9QIGlzIG5vbi1udWxsIGlmIGl0IGlzIHVz ZWQgaW4gdGhlIHJldHVybiBzdGF0ZW1lbnQuICAqLwotICBpZiAoYXR0cmli dXRlKQotICAgIGlmIChncmV0dXJuICpyZXR1cm5fc3RtdCA9IGR5bl9jYXN0 IDxncmV0dXJuICo+IChzdG10KSkKLSAgICAgIGlmIChnaW1wbGVfcmV0dXJu X3JldHZhbCAocmV0dXJuX3N0bXQpCi0JICAmJiBvcGVyYW5kX2VxdWFsX3Ag KGdpbXBsZV9yZXR1cm5fcmV0dmFsIChyZXR1cm5fc3RtdCksIG9wLCAwKQot CSAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoInJldHVybnNfbm9ubnVsbCIsCi0J CQkgICAgICAgVFlQRV9BVFRSSUJVVEVTIChUUkVFX1RZUEUgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCkpKSkKLQlyZXR1cm4gdHJ1ZTsKKyAgaWYgKGdyZXR1 cm4gKnJldHVybl9zdG10ID0gZHluX2Nhc3QgPGdyZXR1cm4gKj4gKHN0bXQp KQorICAgIGlmIChnaW1wbGVfcmV0dXJuX3JldHZhbCAocmV0dXJuX3N0bXQp CisJJiYgb3BlcmFuZF9lcXVhbF9wIChnaW1wbGVfcmV0dXJuX3JldHZhbCAo cmV0dXJuX3N0bXQpLCBvcCwgMCkKKwkmJiBsb29rdXBfYXR0cmlidXRlICgi cmV0dXJuc19ub25udWxsIiwKKwkJCSAgICAgVFlQRV9BVFRSSUJVVEVTIChU UkVFX1RZUEUgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpKSkKKyAgICAgIHJl dHVybiB0cnVlOwogCiAgIHJldHVybiBmYWxzZTsKIH0KIAogLyogQ29tcGFy ZSB0d28gY2FzZSBsYWJlbHMuICBCZWNhdXNlIHRoZSBmcm9udCBlbmQgc2hv dWxkIGFscmVhZHkgaGF2ZQpJbmRleDogZ2NjL2dpbXBsZS5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGdjYy9naW1wbGUuaAkocmV2aXNpb24gMjI1 ODY4KQorKysgZ2NjL2dpbXBsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5 LDExICsxMzk5LDEzIEBAIGV4dGVybiBib29sIGdpbXBsZV9jYWxsX2J1aWx0 aW5fcCAoY29uc3QKIGV4dGVybiBib29sIGdpbXBsZV9jYWxsX2J1aWx0aW5f cCAoY29uc3RfZ2ltcGxlLCBlbnVtIGJ1aWx0X2luX2NsYXNzKTsKIGV4dGVy biBib29sIGdpbXBsZV9jYWxsX2J1aWx0aW5fcCAoY29uc3RfZ2ltcGxlLCBl bnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTsKIGV4dGVybiBib29sIGdpbXBsZV9h c21fY2xvYmJlcnNfbWVtb3J5X3AgKGNvbnN0IGdhc20gKik7CiBleHRlcm4g dm9pZCBkdW1wX2RlY2xfc2V0IChGSUxFICosIGJpdG1hcCk7CiBleHRlcm4g Ym9vbCBub25mcmVlaW5nX2NhbGxfcCAoZ2ltcGxlKTsKLWV4dGVybiBib29s IGluZmVyX25vbm51bGxfcmFuZ2UgKGdpbXBsZSwgdHJlZSwgYm9vbCwgYm9v bCk7CitleHRlcm4gYm9vbCBpbmZlcl9ub25udWxsX3JhbmdlIChnaW1wbGUs IHRyZWUpOworZXh0ZXJuIGJvb2wgaW5mZXJfbm9ubnVsbF9yYW5nZV9ieV9k ZXJlZmVyZW5jZSAoZ2ltcGxlLCB0cmVlKTsKK2V4dGVybiBib29sIGluZmVy X25vbm51bGxfcmFuZ2VfYnlfYXR0cmlidXRlIChnaW1wbGUsIHRyZWUpOwog ZXh0ZXJuIHZvaWQgc29ydF9jYXNlX2xhYmVscyAodmVjPHRyZWU+KTsKIGV4 dGVybiB2b2lkIHByZXByb2Nlc3NfY2FzZV9sYWJlbF92ZWNfZm9yX2dpbXBs ZSAodmVjPHRyZWU+LCB0cmVlLCB0cmVlICopOwogZXh0ZXJuIHZvaWQgZ2lt cGxlX3NlcV9zZXRfbG9jYXRpb24gKGdpbXBsZV9zZXEsIGxvY2F0aW9uX3Qp OwogZXh0ZXJuIHZvaWQgZ2ltcGxlX3NlcV9kaXNjYXJkIChnaW1wbGVfc2Vx KTsKIGV4dGVybiB2b2lkIG1heWJlX3JlbW92ZV91bnVzZWRfY2FsbF9hcmdz IChzdHJ1Y3QgZnVuY3Rpb24gKiwgZ2ltcGxlKTsK --047d7bae4944384e8c051b78c55e--