From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2806 invoked by alias); 6 Oct 2009 23:08:54 -0000 Received: (qmail 2792 invoked by uid 22791); 6 Oct 2009 23:08:50 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,SARE_MSGID_LONG40,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Oct 2009 23:08:42 +0000 Received: from spaceape10.eur.corp.google.com (spaceape10.eur.corp.google.com [172.28.16.144]) by smtp-out.google.com with ESMTP id n96N8d5g025679 for ; Wed, 7 Oct 2009 00:08:39 +0100 Received: from ywh27 (ywh27.prod.google.com [10.192.8.27]) by spaceape10.eur.corp.google.com with ESMTP id n96N80dY025637 for ; Tue, 6 Oct 2009 16:08:37 -0700 Received: by ywh27 with SMTP id 27so10616245ywh.2 for ; Tue, 06 Oct 2009 16:08:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.100.51.4 with SMTP id y4mr2177393any.191.1254870516580; Tue, 06 Oct 2009 16:08:36 -0700 (PDT) In-Reply-To: <200910042132.23246.pedro@codesourcery.com> References: <20090902163344.833F476568@localhost> <8ac60eac0909021015u37d1a6e2u1ae88dd35d00d2b9@mail.gmail.com> <8ac60eac0910021651o38990564ue7a65a870c14d00b@mail.gmail.com> <200910042132.23246.pedro@codesourcery.com> Date: Tue, 06 Oct 2009 23:08:00 -0000 Message-ID: <8ac60eac0910061608w4d5d2697vbb1b23138f7d95be@mail.gmail.com> Subject: Re: [patch] Allow gdbserver to dynamically lookup libthread_db.so.1 From: Paul Pluzhnikov To: Pedro Alves Cc: gdb-patches@sourceware.org, dje@google.com Content-Type: multipart/mixed; boundary=0016e645f8c261428204754c4f98 X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2009-10/txt/msg00146.txt.bz2 --0016e645f8c261428204754c4f98 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 3642 On Sun, Oct 4, 2009 at 1:32 PM, Pedro Alves wrote: > I take it you only care for extended-remote? How is the user > supposed to tweak the new setting with plain remote? Note that default search path is initialized from LIBTHREAD_DB_SEARCH_PATH. The user is expected to set this to appropriate system-specific default if the standard loader search path is inappropriate. >> Index: gdbserver/acinclude.m4 >> =================================================================== >> RCS file: /cvs/src/src/gdb/gdbserver/acinclude.m4,v >> retrieving revision 1.7 >> diff -u -p -u -r1.7 acinclude.m4 >> --- gdbserver/acinclude.m4 5 Jun 2008 22:36:57 -0000 1.7 >> +++ gdbserver/acinclude.m4 2 Oct 2009 23:49:31 -0000 >> @@ -22,7 +22,7 @@ AC_DEFUN([SRV_CHECK_THREAD_DB], >> void ps_get_thread_area() {} >> void ps_getpid() {}], >> [td_ta_new();], >> - [srv_cv_thread_db="-lthread_db"], >> + [srv_cv_thread_db="-ldl"], >> [srv_cv_thread_db=no >> >> if test "$prefix" = "/usr" || test "$prefix" = "NONE"; then >> @@ -42,28 +42,9 @@ AC_DEFUN([SRV_CHECK_THREAD_DB], >> void ps_get_thread_area() {} >> void ps_getpid() {}], >> [td_ta_new();], >> - [srv_cv_thread_db="$thread_db"], >> + [srv_cv_thread_db="-ldl"], >> [srv_cv_thread_db=no]) >> ]) >> LIBS="$old_LIBS" > > This doesn't make sense. Why not? If we can find '-lthread_db', '/lib/libthread_db.so.1' or '$prefix/lib/libthread_db.so.1', then we switch on using libthread_db and use '-ldl' to dynamically load it. Perhaps a better fix is to skip this check altogether, and always use dlopen on Linux? >> + /* Handle of the libthread_db from dlopen. */ >> + void *handle; ... > > Although gdbserver doesn't have a target stack concept, let's try to keep the > layers a bit separate. Could you please make this a new (private) structure > in thread-db.c, and then have a new pointer here, say > process_info_private->thread_db into such an object? Done. Several existing members of struct process_info_private, e.g. thread_agent also are thread_db-private, so I moved them as well. I believe I've addressed all your other comments. Tested on Linux/x86_64 (with "--target_board native-gdbserver"), no regressions. Thanks, -- Paul Pluzhnikov doc/ 2009-10-06 Paul Pluzhnikov * gdb.texinfo (Server): Document libthread-db-search-path. gdbserver/ 2009-10-06 Paul Pluzhnikov * acinclude.m4: Link with libdl. * configure.ac: Don't check for tls_get_address. * linux-low.h (struct process_info_private): Move members to struct thread_db. (thread_db_free): New prototype. * linux-low.c (linux_remove_process): Adjust. (linux_wait_for_event_1, linux_look_up_symbols): Likewise. * server.c (handle_query): Move code ... (handle_monitor_command): ... here. * server.h (handle_monitor_command): New prototype. * target.h (struct target_ops): New member. * thread-db.c (struct thread_db): New. (libthread_db_search_path): New variable. (thread_db_create_event, thread_db_enable_reporting) (find_one_thread, maybe_attach_thread, find_new_threads_callback) (thread_db_find_new_threads, (thread_db_get_tls_address): Adjust. (try_thread_db_load_1, dladdr_to_soname): New functions. (try_thread_db_load, thread_db_load_search): New functions. (thread_db_init): Search for libthread_db. (thread_db_free): New function. (thread_db_handle_monitor_command): Likewise. --0016e645f8c261428204754c4f98 Content-Type: text/plain; charset=US-ASCII; name="gdb-gdbserver-threaddb-search-20091006.txt" Content-Disposition: attachment; filename="gdb-gdbserver-threaddb-search-20091006.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0h9fyvf0 Content-length: 39016 SW5kZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MzEKZGlmZiAtdSAtcCAtdSAtcjEu NjMxIGdkYi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRleGluZm8JNiBPY3QgMjAw OSAxODowMjozNiAtMDAwMAkxLjYzMQorKysgZG9jL2dkYi50ZXhpbmZvCTYg T2N0IDIwMDkgMjI6MzQ6NTQgLTAwMDAKQEAgLTE0OTAzLDYgKzE0OTAzLDEz IEBAIERpc2FibGUgb3IgZW5hYmxlIGdlbmVyYWwgZGVidWdnaW5nIG1lc3MK IERpc2FibGUgb3IgZW5hYmxlIHNwZWNpZmljIGRlYnVnZ2luZyBtZXNzYWdl cyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW90ZQogcHJvdG9jb2wgKEBweHJl ZntSZW1vdGUgUHJvdG9jb2x9KS4KIAorQGl0ZW0gbW9uaXRvciBzZXQgbGli dGhyZWFkLWRiLXNlYXJjaC1wYXRoIFtQQVRIXQorQGNpbmRleCBnZGJzZXJ2 ZXIsIHNlYXJjaCBwYXRoIGZvciBAY29kZXtsaWJ0aHJlYWRfZGJ9CitXaGVu IHRoaXMgY29tbWFuZCBpcyBpc3N1ZWQsIEB2YXJ7cGF0aH0gaXMgYSBjb2xv bi1zZXBhcmF0ZWQgbGlzdCBvZgorZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZv ciBAY29kZXtsaWJ0aHJlYWRfZGJ9IChAcHhyZWZ7VGhyZWFkcywsc2V0Cits aWJ0aHJlYWQtZGItc2VhcmNoLXBhdGh9KS4gIElmIHlvdSBvbWl0IEB2YXJ7 cGF0aH0sCitAc2FtcHtsaWJ0aHJlYWQtZGItc2VhcmNoLXBhdGh9IHdpbGwg YmUgcmVzZXQgdG8gYW4gZW1wdHkgbGlzdC4KKwogQGl0ZW0gbW9uaXRvciBl eGl0CiBUZWxsIGdkYnNlcnZlciB0byBleGl0IGltbWVkaWF0ZWx5LiAgVGhp cyBjb21tYW5kIHNob3VsZCBiZSBmb2xsb3dlZCBieQogQGNvZGV7ZGlzY29u bmVjdH0gdG8gY2xvc2UgdGhlIGRlYnVnZ2luZyBzZXNzaW9uLiAgQGNvZGV7 Z2Ric2VydmVyfSB3aWxsCkluZGV4OiBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvZ2Ric2VydmVyL2FjaW5jbHVkZS5tNCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS43CmRpZmYgLXUgLXAgLXUgLXIxLjcgYWNpbmNsdWRlLm00Ci0t LSBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00CTUgSnVuIDIwMDggMjI6MzY6NTcg LTAwMDAJMS43CisrKyBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00CTYgT2N0IDIw MDkgMjI6MzQ6NTQgLTAwMDAKQEAgLTIyLDcgKzIyLDcgQEAgQUNfREVGVU4o W1NSVl9DSEVDS19USFJFQURfREJdLAogICAgdm9pZCBwc19nZXRfdGhyZWFk X2FyZWEoKSB7fQogICAgdm9pZCBwc19nZXRwaWQoKSB7fV0sCiAgIFt0ZF90 YV9uZXcoKTtdLAotICBbc3J2X2N2X3RocmVhZF9kYj0iLWx0aHJlYWRfZGIi XSwKKyAgW3Nydl9jdl90aHJlYWRfZGI9Ii1sZGwiXSwKICAgW3Nydl9jdl90 aHJlYWRfZGI9bm8KIAogIGlmIHRlc3QgIiRwcmVmaXgiID0gIi91c3IiIHx8 IHRlc3QgIiRwcmVmaXgiID0gIk5PTkUiOyB0aGVuCkBAIC00MiwyOCArNDIs OSBAQCBBQ19ERUZVTihbU1JWX0NIRUNLX1RIUkVBRF9EQl0sCiAgICB2b2lk IHBzX2dldF90aHJlYWRfYXJlYSgpIHt9CiAgICB2b2lkIHBzX2dldHBpZCgp IHt9XSwKICAgW3RkX3RhX25ldygpO10sCi0gIFtzcnZfY3ZfdGhyZWFkX2Ri PSIkdGhyZWFkX2RiIl0sCisgIFtzcnZfY3ZfdGhyZWFkX2RiPSItbGRsIl0s CiAgIFtzcnZfY3ZfdGhyZWFkX2RiPW5vXSkKICAgXSkKICBMSUJTPSIkb2xk X0xJQlMiCiBdKV0pCiAKLUFDX0RFRlVOKFtTUlZfQ0hFQ0tfVExTX0dFVF9B RERSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIHRocmVhZF9kYl90bHNfZ2V0 X2FkZHJdLFtzcnZfY3ZfdGxzX2dldF9hZGRyXSwKLSBbb2xkX0xJQlM9IiRM SUJTIgotICBMSUJTPSIkTElCUyAkc3J2X2N2X3RocmVhZF9kYiIKLSAgQUNf VFJZX0xJTksoCi0gICBbdm9pZCBwc19wZ2xvYmFsX2xvb2t1cCgpIHt9Ci0g ICAgdm9pZCBwc19wZHJlYWQoKSB7fQotICAgIHZvaWQgcHNfcGR3cml0ZSgp IHt9Ci0gICAgdm9pZCBwc19sZ2V0cmVncygpIHt9Ci0gICAgdm9pZCBwc19s c2V0cmVncygpIHt9Ci0gICAgdm9pZCBwc19sZ2V0ZnByZWdzKCkge30KLSAg ICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAgIHZvaWQgcHNfZ2V0X3Ro cmVhZF9hcmVhKCkge30KLSAgICB2b2lkIHBzX2dldHBpZCgpIHt9XSwKLSAg IFt0ZF90aHJfdGxzX2dldF9hZGRyKCk7XSwKLSAgIFtzcnZfY3ZfdGxzX2dl dF9hZGRyPXllc10sCi0gICBbc3J2X2N2X3Rsc19nZXRfYWRkcj1ub10pCi0g IExJQlM9IiRvbGRfTElCUyIKLV0pXSkKSW5kZXg6IGdkYnNlcnZlci9jb25m aWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLmFjLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUgLXAgLXUgLXIxLjI2IGNvbmZp Z3VyZS5hYwotLS0gZ2Ric2VydmVyL2NvbmZpZ3VyZS5hYwk2IEp1bCAyMDA5 IDE4OjMxOjE5IC0wMDAwCTEuMjYKKysrIGdkYnNlcnZlci9jb25maWd1cmUu YWMJNiBPY3QgMjAwOSAyMjozNDo1NCAtMDAwMApAQCAtMTQ3LDcgKzE0Nyw2 IEBAIGlmIHRlc3QgIiRzcnZfbGludXhfdGhyZWFkX2RiIiA9ICJ5ZXMiOyAK ICAgICBzcnZfbGludXhfdGhyZWFkX2RiPW5vCiAgIGVsc2UKICAgICBzcnZf bGlicz0iJHNydl9jdl90aHJlYWRfZGIiCi0gICAgU1JWX0NIRUNLX1RMU19H RVRfQUREUgogICBmaQogICBvbGRfTERGTEFHUz0iJExERkxBR1MiCiAgIExE RkxBR1M9IiRMREZMQUdTIC1yZHluYW1pYyIKQEAgLTE2NiwxMCArMTY1LDYg QEAgaWYgdGVzdCAiJHNydl9saW51eF90aHJlYWRfZGIiID0gInllcyI7IAog ICBpZiB0ZXN0ICRnZGJzcnZfY3ZfaGF2ZV90ZF92ZXJzaW9uID0geWVzOyB0 aGVuCiAgICAgQUNfREVGSU5FKEhBVkVfVERfVkVSU0lPTiwgMSwgW0RlZmlu ZSBpZiBURF9WRVJTSU9OIGlzIGF2YWlsYWJsZS5dKQogICBmaQotCi0gIGlm IHRlc3QgIiRzcnZfY3ZfdGxzX2dldF9hZGRyIiA9IHllczsgdGhlbgotICAg IEFDX0RFRklORShIQVZFX1REX1RIUl9UTFNfR0VUX0FERFIsIDEsIFtEZWZp bmUgaWYgdGRfdGhyX3Rsc19nZXRfYWRkciBpcyBhdmFpbGFibGUuXSkKLSAg ZmkKIGZpCiAKIGlmIHRlc3QgIiRzcnZfeG1sZmlsZXMiICE9ICIiOyB0aGVu CkluZGV4OiBnZGJzZXJ2ZXIvbGludXgtbG93LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv bGludXgtbG93LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEyCmRpZmYg LXUgLXAgLXUgLXIxLjExMiBsaW51eC1sb3cuYwotLS0gZ2Ric2VydmVyL2xp bnV4LWxvdy5jCTMxIEp1bCAyMDA5IDE1OjI1OjIyIC0wMDAwCTEuMTEyCisr KyBnZGJzZXJ2ZXIvbGludXgtbG93LmMJNiBPY3QgMjAwOSAyMjozNDo1NCAt MDAwMApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGRpcmVudC5oPgog I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3Zmcy5oPgor I2luY2x1ZGUgPGRsZmNuLmg+CiAKICNpZm5kZWYgU1BVRlNfTUFHSUMKICNk ZWZpbmUgU1BVRlNfTUFHSUMgMHgyM2M5YjY0ZQpAQCAtMTE4LDYgKzExOSwx MSBAQCBpbnQgc3RvcHBpbmdfdGhyZWFkczsKIC8qIEZJWE1FIG1ha2UgaW50 byBhIHRhcmdldCBtZXRob2Q/ICAqLwogaW50IHVzaW5nX3RocmVhZHMgPSAx OwogCisjaWZkZWYgVVNFX1RIUkVBRF9EQgorLyogRnJvbSB0aHJlYWQtZGIu YyAgKi8KK2V4dGVybiB2b2lkIHRocmVhZF9kYl9oYW5kbGVfbW9uaXRvcl9j b21tYW5kIChjaGFyICopOworI2VuZGlmCisKIC8qIFRoaXMgZmxhZyBpcyB0 cnVlIGlmZiB3ZSd2ZSBqdXN0IGNyZWF0ZWQgb3IgYXR0YWNoZWQgdG8gb3Vy IGZpcnN0CiAgICBpbmZlcmlvciBidXQgaXQgaGFzIG5vdCBzdG9wcGVkIHll dC4gIEFzIHNvb24gYXMgaXQgZG9lcywgd2UgbmVlZAogICAgdG8gY2FsbCB0 aGUgbG93IHRhcmdldCdzIGFyY2hfc2V0dXAgY2FsbGJhY2suICBEb2luZyB0 aGlzIG9ubHkgb24KQEAgLTI2MSw4ICsyNjcsMTEgQEAgbGludXhfYWRkX3By b2Nlc3MgKGludCBwaWQsIGludCBhdHRhY2hlZAogc3RhdGljIHZvaWQKIGxp bnV4X3JlbW92ZV9wcm9jZXNzIChzdHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9j ZXNzKQogewotICBmcmVlIChwcm9jZXNzLT5wcml2YXRlLT5hcmNoX3ByaXZh dGUpOwotICBmcmVlIChwcm9jZXNzLT5wcml2YXRlKTsKKyAgc3RydWN0IHBy b2Nlc3NfaW5mb19wcml2YXRlICpwcml2ID0gcHJvY2Vzcy0+cHJpdmF0ZTsK KworICB0aHJlYWRfZGJfZnJlZSAocHJvY2Vzcyk7CisgIGZyZWUgKHByaXYt PmFyY2hfcHJpdmF0ZSk7CisgIGZyZWUgKHByaXYpOwogICByZW1vdmVfcHJv Y2VzcyAocHJvY2Vzcyk7CiB9CiAKQEAgLTExMjIsNyArMTEzMSw3IEBAIGxp bnV4X3dhaXRfZm9yX2V2ZW50XzEgKHB0aWRfdCBwdGlkLCBpbnQKIAkgICYm ICFldmVudF9jaGlsZC0+c3RlcHBpbmcKIAkgICYmICgKICNpZmRlZiBVU0Vf VEhSRUFEX0RCCi0JICAgICAgKGN1cnJlbnRfcHJvY2VzcyAoKS0+cHJpdmF0 ZS0+dGhyZWFkX2RiX2FjdGl2ZQorCSAgICAgIChjdXJyZW50X3Byb2Nlc3Mg KCktPnByaXZhdGUtPnRocmVhZF9kYiAhPSBOVUxMCiAJICAgICAgICYmIChX U1RPUFNJRyAoKndzdGF0KSA9PSBfX1NJR1JUTUlOCiAJCSAgIHx8IFdTVE9Q U0lHICgqd3N0YXQpID09IF9fU0lHUlRNSU4gKyAxKSkKIAkgICAgICB8fApA QCAtMjY0MiwxMSArMjY1MSwxMCBAQCBsaW51eF9sb29rX3VwX3N5bWJvbHMg KHZvaWQpCiAjaWZkZWYgVVNFX1RIUkVBRF9EQgogICBzdHJ1Y3QgcHJvY2Vz c19pbmZvICpwcm9jID0gY3VycmVudF9wcm9jZXNzICgpOwogCi0gIGlmIChw cm9jLT5wcml2YXRlLT50aHJlYWRfZGJfYWN0aXZlKQorICBpZiAocHJvYy0+ cHJpdmF0ZS0+dGhyZWFkX2RiICE9IE5VTEwpCiAgICAgcmV0dXJuOwogCi0g IHByb2MtPnByaXZhdGUtPnRocmVhZF9kYl9hY3RpdmUKLSAgICA9IHRocmVh ZF9kYl9pbml0ICghbGludXhfc3VwcG9ydHNfdHJhY2Vmb3JrX2ZsYWcpOwor ICB0aHJlYWRfZGJfaW5pdCAoIWxpbnV4X3N1cHBvcnRzX3RyYWNlZm9ya19m bGFnKTsKICNlbmRpZgogfQogCkBAIC0zMTcxLDcgKzMxNzksMTIgQEAgc3Rh dGljIHN0cnVjdCB0YXJnZXRfb3BzIGxpbnV4X3RhcmdldF9vcAogICBsaW51 eF9zdXBwb3J0c19ub25fc3RvcCwKICAgbGludXhfYXN5bmMsCiAgIGxpbnV4 X3N0YXJ0X25vbl9zdG9wLAotICBsaW51eF9zdXBwb3J0c19tdWx0aV9wcm9j ZXNzCisgIGxpbnV4X3N1cHBvcnRzX211bHRpX3Byb2Nlc3MsCisjaWZkZWYg VVNFX1RIUkVBRF9EQgorICB0aHJlYWRfZGJfaGFuZGxlX21vbml0b3JfY29t bWFuZAorI2Vsc2UKKyAgTlVMTAorI2VuZGlmCiB9OwogCiBzdGF0aWMgdm9p ZApJbmRleDogZ2Ric2VydmVyL2xpbnV4LWxvdy5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVy L2xpbnV4LWxvdy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMyCmRpZmYg LXUgLXAgLXUgLXIxLjMyIGxpbnV4LWxvdy5oCi0tLSBnZGJzZXJ2ZXIvbGlu dXgtbG93LmgJMzAgSnVuIDIwMDkgMTY6MzU6MjUgLTAwMDAJMS4zMgorKysg Z2Ric2VydmVyL2xpbnV4LWxvdy5oCTYgT2N0IDIwMDkgMjI6MzQ6NTQgLTAw MDAKQEAgLTQ3LDE4ICs0NywxMiBAQCBzdHJ1Y3Qgc2lnaW5mbzsKIAogc3Ry dWN0IHByb2Nlc3NfaW5mb19wcml2YXRlCiB7Ci0gIC8qIFRydWUgaWYgdGhp cyBwcm9jZXNzIGhhcyBsb2FkZWQgdGhyZWFkX2RiLCBhbmQgaXQgaXMgYWN0 aXZlLiAgKi8KLSAgaW50IHRocmVhZF9kYl9hY3RpdmU7Ci0KLSAgLyogU3Ry dWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUgY2hpbGQgcHJvY2VzcyBmb3Ig dGhlCi0gICAgIDxwcm9jX3NlcnZpY2UuaD4gaW50ZXJmYWNlLiAgKi8KLSAg c3RydWN0IHBzX3Byb2NoYW5kbGUgcHJvY19oYW5kbGU7Ci0KLSAgLyogQ29u bmVjdGlvbiB0byB0aGUgbGlidGhyZWFkX2RiIGxpYnJhcnkuICAqLwotICB0 ZF90aHJhZ2VudF90ICp0aHJlYWRfYWdlbnQ7Ci0KICAgLyogQXJjaC1zcGVj aWZpYyBhZGRpdGlvbnMuICAqLwogICBzdHJ1Y3QgYXJjaF9wcm9jZXNzX2lu Zm8gKmFyY2hfcHJpdmF0ZTsKKworICAvKiBsaWJ0aHJlYWRfZGItc3BlY2lm aWMgYWRkaXRpb25zLiAgTm90IE5VTEwgaWYgdGhpcyBwcm9jZXNzIGhhcyBs b2FkZWQKKyAgICAgdGhyZWFkX2RiLCBhbmQgaXQgaXMgYWN0aXZlLiAgKi8K KyAgc3RydWN0IHRocmVhZF9kYiAqdGhyZWFkX2RiOwogfTsKIAogc3RydWN0 IGx3cF9pbmZvOwpAQCAtMjA1LDYgKzE5OSw3IEBAIGludCBlbGZfNjRfZmls ZV9wIChjb25zdCBjaGFyICpmaWxlKTsKIHZvaWQgbGludXhfYXR0YWNoX2x3 cCAodW5zaWduZWQgbG9uZyBwaWQpOwogCiBpbnQgdGhyZWFkX2RiX2luaXQg KGludCB1c2VfZXZlbnRzKTsKK3ZvaWQgdGhyZWFkX2RiX2ZyZWUgKHN0cnVj dCBwcm9jZXNzX2luZm8gKik7CiBpbnQgdGhyZWFkX2RiX2dldF90bHNfYWRk cmVzcyAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIENPUkVfQUREUiBv ZmZzZXQsCiAJCQkgICAgICAgQ09SRV9BRERSIGxvYWRfbW9kdWxlLCBDT1JF X0FERFIgKmFkZHJlc3MpOwogCkluZGV4OiBnZGJzZXJ2ZXIvc2VydmVyLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTAyCmRpZmYgLXUgLXAgLXUgLXIxLjEwMiBzZXJ2ZXIuYwotLS0gZ2Ri c2VydmVyL3NlcnZlci5jCTMwIEp1biAyMDA5IDE2OjM1OjI1IC0wMDAwCTEu MTAyCisrKyBnZGJzZXJ2ZXIvc2VydmVyLmMJNiBPY3QgMjAwOSAyMjozNDo1 NCAtMDAwMApAQCAtMTIxMSw0NiArMTIxMSwxMSBAQCBoYW5kbGVfcXVlcnkg KGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRfCiAKICAgICAgIHdyaXRlX29r IChvd25fYnVmKTsKIAotICAgICAgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRl YnVnIDEiKSA9PSAwKQotCXsKLQkgIGRlYnVnX3RocmVhZHMgPSAxOwotCSAg bW9uaXRvcl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZW5hYmxlZC5cbiIpOwot CX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRlYnVnIDAi KSA9PSAwKQotCXsKLQkgIGRlYnVnX3RocmVhZHMgPSAwOwotCSAgbW9uaXRv cl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZGlzYWJsZWQuXG4iKTsKLQl9Ci0g ICAgICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCBkZWJ1Zy1ody1wb2lu dHMgMSIpID09IDApCi0JewotCSAgZGVidWdfaHdfcG9pbnRzID0gMTsKLQkg IG1vbml0b3Jfb3V0cHV0ICgiSC9XIHBvaW50IGRlYnVnZ2luZyBvdXRwdXQg ZW5hYmxlZC5cbiIpOwotCX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9u LCAic2V0IGRlYnVnLWh3LXBvaW50cyAwIikgPT0gMCkKLQl7Ci0JICBkZWJ1 Z19od19wb2ludHMgPSAwOwotCSAgbW9uaXRvcl9vdXRwdXQgKCJIL1cgcG9p bnQgZGVidWdnaW5nIG91dHB1dCBkaXNhYmxlZC5cbiIpOwotCX0KLSAgICAg IGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IHJlbW90ZS1kZWJ1ZyAxIikg PT0gMCkKLQl7Ci0JICByZW1vdGVfZGVidWcgPSAxOwotCSAgbW9uaXRvcl9v dXRwdXQgKCJQcm90b2NvbCBkZWJ1ZyBvdXRwdXQgZW5hYmxlZC5cbiIpOwot CX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IHJlbW90ZS1k ZWJ1ZyAwIikgPT0gMCkKLQl7Ci0JICByZW1vdGVfZGVidWcgPSAwOwotCSAg bW9uaXRvcl9vdXRwdXQgKCJQcm90b2NvbCBkZWJ1ZyBvdXRwdXQgZGlzYWJs ZWQuXG4iKTsKLQl9Ci0gICAgICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgImhl bHAiKSA9PSAwKQotCW1vbml0b3Jfc2hvd19oZWxwICgpOwotICAgICAgZWxz ZSBpZiAoc3RyY21wIChtb24sICJleGl0IikgPT0gMCkKLQlleGl0X3JlcXVl c3RlZCA9IDE7CisgICAgICBpZiAodGhlX3RhcmdldC0+aGFuZGxlX21vbml0 b3JfY29tbWFuZCAhPSBOVUxMKQorCSgqdGhlX3RhcmdldC0+aGFuZGxlX21v bml0b3JfY29tbWFuZCkgKG1vbik7CiAgICAgICBlbHNlCi0JewotCSAgbW9u aXRvcl9vdXRwdXQgKCJVbmtub3duIG1vbml0b3IgY29tbWFuZC5cblxuIik7 Ci0JICBtb25pdG9yX3Nob3dfaGVscCAoKTsKLQkgIHdyaXRlX2VubiAob3du X2J1Zik7Ci0JfQorCS8qIERlZmF1bHQgcHJvY2Vzc2luZy4gICovCisJaGFu ZGxlX21vbml0b3JfY29tbWFuZCAobW9uKTsKIAogICAgICAgZnJlZSAobW9u KTsKICAgICAgIHJldHVybjsKQEAgLTEyOTUsNiArMTI2MCw1MSBAQCBoYW5k bGVfcXVlcnkgKGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRfCiAgIG93bl9i dWZbMF0gPSAwOwogfQogCit2b2lkCitoYW5kbGVfbW9uaXRvcl9jb21tYW5k IChjaGFyICptb24pCit7CisgIGlmIChzdHJjbXAgKG1vbiwgInNldCBkZWJ1 ZyAxIikgPT0gMCkKKyAgICB7CisgICAgICBkZWJ1Z190aHJlYWRzID0gMTsK KyAgICAgIG1vbml0b3Jfb3V0cHV0ICgiRGVidWcgb3V0cHV0IGVuYWJsZWQu XG4iKTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRl YnVnIDAiKSA9PSAwKQorICAgIHsKKyAgICAgIGRlYnVnX3RocmVhZHMgPSAw OworICAgICAgbW9uaXRvcl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZGlzYWJs ZWQuXG4iKTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0 IGRlYnVnLWh3LXBvaW50cyAxIikgPT0gMCkKKyAgICB7CisgICAgICBkZWJ1 Z19od19wb2ludHMgPSAxOworICAgICAgbW9uaXRvcl9vdXRwdXQgKCJIL1cg cG9pbnQgZGVidWdnaW5nIG91dHB1dCBlbmFibGVkLlxuIik7CisgICAgfQor ICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCBkZWJ1Zy1ody1wb2ludHMg MCIpID09IDApCisgICAgeworICAgICAgZGVidWdfaHdfcG9pbnRzID0gMDsK KyAgICAgIG1vbml0b3Jfb3V0cHV0ICgiSC9XIHBvaW50IGRlYnVnZ2luZyBv dXRwdXQgZGlzYWJsZWQuXG4iKTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNt cCAobW9uLCAic2V0IHJlbW90ZS1kZWJ1ZyAxIikgPT0gMCkKKyAgICB7Cisg ICAgICByZW1vdGVfZGVidWcgPSAxOworICAgICAgbW9uaXRvcl9vdXRwdXQg KCJQcm90b2NvbCBkZWJ1ZyBvdXRwdXQgZW5hYmxlZC5cbiIpOworICAgIH0K KyAgZWxzZSBpZiAoc3RyY21wIChtb24sICJzZXQgcmVtb3RlLWRlYnVnIDAi KSA9PSAwKQorICAgIHsKKyAgICAgIHJlbW90ZV9kZWJ1ZyA9IDA7CisgICAg ICBtb25pdG9yX291dHB1dCAoIlByb3RvY29sIGRlYnVnIG91dHB1dCBkaXNh YmxlZC5cbiIpOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChtb24sICJo ZWxwIikgPT0gMCkKKyAgICBtb25pdG9yX3Nob3dfaGVscCAoKTsKKyAgZWxz ZSBpZiAoc3RyY21wIChtb24sICJleGl0IikgPT0gMCkKKyAgICBleGl0X3Jl cXVlc3RlZCA9IDE7CisgIGVsc2UKKyAgICB7CisgICAgICBtb25pdG9yX291 dHB1dCAoIlVua25vd24gbW9uaXRvciBjb21tYW5kLlxuXG4iKTsKKyAgICAg IG1vbml0b3Jfc2hvd19oZWxwICgpOworICAgICAgd3JpdGVfZW5uIChvd25f YnVmKTsKKyAgICB9Cit9CisKIC8qIFBhcnNlIHZDb250IHBhY2tldHMuICAq Lwogdm9pZAogaGFuZGxlX3ZfY29udCAoY2hhciAqb3duX2J1ZikKSW5kZXg6 IGdkYnNlcnZlci9zZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9zZXJ2ZXIuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZmIC11IC1wIC11IC1yMS41 OSBzZXJ2ZXIuaAotLS0gZ2Ric2VydmVyL3NlcnZlci5oCTMwIEp1biAyMDA5 IDE2OjM1OjI1IC0wMDAwCTEuNTkKKysrIGdkYnNlcnZlci9zZXJ2ZXIuaAk2 IE9jdCAyMDA5IDIyOjM0OjU0IC0wMDAwCkBAIC0yOTcsNiArMjk3LDcgQEAg ZXh0ZXJuIHZvaWQgc3RhcnRfZXZlbnRfbG9vcCAodm9pZCk7CiAvKiBGdW5j dGlvbnMgZnJvbSBzZXJ2ZXIuYy4gICovCiBleHRlcm4gdm9pZCBoYW5kbGVf c2VyaWFsX2V2ZW50IChpbnQgZXJyLCBnZGJfY2xpZW50X2RhdGEgY2xpZW50 X2RhdGEpOwogZXh0ZXJuIHZvaWQgaGFuZGxlX3RhcmdldF9ldmVudCAoaW50 IGVyciwgZ2RiX2NsaWVudF9kYXRhIGNsaWVudF9kYXRhKTsKK2V4dGVybiB2 b2lkIGhhbmRsZV9tb25pdG9yX2NvbW1hbmQgKGNoYXIgKik7CiAKIGV4dGVy biB2b2lkIHB1c2hfZXZlbnQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0 X3dhaXRzdGF0dXMgKnN0YXR1cyk7CiAKSW5kZXg6IGdkYnNlcnZlci90YXJn ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL2dkYnNlcnZlci90YXJnZXQuaCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zOQpkaWZmIC11IC1wIC11IC1yMS4zOSB0YXJnZXQuaAotLS0g Z2Ric2VydmVyL3RhcmdldC5oCTI1IEp1biAyMDA5IDIyOjEzOjUzIC0wMDAw CTEuMzkKKysrIGdkYnNlcnZlci90YXJnZXQuaAk2IE9jdCAyMDA5IDIyOjM0 OjU0IC0wMDAwCkBAIC0yNzksNiArMjc5LDkgQEAgc3RydWN0IHRhcmdldF9v cHMKIAogICAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhcmdldCBzdXBwb3J0 cyBtdWx0aS1wcm9jZXNzIGRlYnVnZ2luZy4gICovCiAgIGludCAoKnN1cHBv cnRzX211bHRpX3Byb2Nlc3MpICh2b2lkKTsKKworICAvKiBQcm9jZXNzIG1v bml0b3IgY29tbWFuZC4gICovCisgIHZvaWQgKCpoYW5kbGVfbW9uaXRvcl9j b21tYW5kKSAoY2hhciAqKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0 X29wcyAqdGhlX3RhcmdldDsKSW5kZXg6IGdkYnNlcnZlci90aHJlYWQtZGIu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2dkYnNlcnZlci90aHJlYWQtZGIuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4yMwpkaWZmIC11IC1wIC11IC1yMS4yMyB0aHJlYWQtZGIuYwot LS0gZ2Ric2VydmVyL3RocmVhZC1kYi5jCTMgQXByIDIwMDkgMjA6MTU6NTEg LTAwMDAJMS4yMworKysgZ2Ric2VydmVyL3RocmVhZC1kYi5jCTYgT2N0IDIw MDkgMjI6MzQ6NTQgLTAwMDAKQEAgLTI3LDEzICsyNyw1MSBAQCBleHRlcm4g aW50IGRlYnVnX3RocmVhZHM7CiAKIHN0YXRpYyBpbnQgdGhyZWFkX2RiX3Vz ZV9ldmVudHM7CiAKLSNpZmRlZiBIQVZFX1RIUkVBRF9EQl9ICi0jaW5jbHVk ZSA8dGhyZWFkX2RiLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImdkYl9wcm9j X3NlcnZpY2UuaCIKKyNpbmNsdWRlICIuLi9nZGJfdGhyZWFkX2RiLmgiCiAK KyNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgorI2lu Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK3N0cnVj dCB0aHJlYWRfZGIKK3sKKyAgLyogU3RydWN0dXJlIHRoYXQgaWRlbnRpZmll cyB0aGUgY2hpbGQgcHJvY2VzcyBmb3IgdGhlCisgICAgIDxwcm9jX3NlcnZp Y2UuaD4gaW50ZXJmYWNlLiAgKi8KKyAgc3RydWN0IHBzX3Byb2NoYW5kbGUg cHJvY19oYW5kbGU7CisKKyAgLyogQ29ubmVjdGlvbiB0byB0aGUgbGlidGhy ZWFkX2RiIGxpYnJhcnkuICAqLworICB0ZF90aHJhZ2VudF90ICp0aHJlYWRf YWdlbnQ7CisKKyAgLyogSGFuZGxlIG9mIHRoZSBsaWJ0aHJlYWRfZGIgZnJv bSBkbG9wZW4uICAqLworICB2b2lkICpoYW5kbGU7CisKKyAgLyogQWRkcmVz c2VzIG9mIGxpYnRocmVhZF9kYiBmdW5jdGlvbnMuICAqLworICB0ZF9lcnJf ZSAoKnRkX3RhX25ld19wKSAoc3RydWN0IHBzX3Byb2NoYW5kbGUgKiBwcywg dGRfdGhyYWdlbnRfdCAqKnRhKTsKKyAgdGRfZXJyX2UgKCp0ZF90YV9ldmVu dF9nZXRtc2dfcCkgKGNvbnN0IHRkX3RocmFnZW50X3QgKnRhLAorCQkJCSAg ICB0ZF9ldmVudF9tc2dfdCAqbXNnKTsKKyAgdGRfZXJyX2UgKCp0ZF90YV9z ZXRfZXZlbnRfcCkgKGNvbnN0IHRkX3RocmFnZW50X3QgKnRhLAorCQkJCSB0 ZF90aHJfZXZlbnRzX3QgKmV2ZW50KTsKKyAgdGRfZXJyX2UgKCp0ZF90YV9l dmVudF9hZGRyX3ApIChjb25zdCB0ZF90aHJhZ2VudF90ICp0YSwKKwkJCQkg IHRkX2V2ZW50X2UgZXZlbnQsIHRkX25vdGlmeV90ICpwdHIpOworICB0ZF9l cnJfZSAoKnRkX3RhX21hcF9sd3AydGhyX3ApIChjb25zdCB0ZF90aHJhZ2Vu dF90ICp0YSwgbHdwaWRfdCBsd3BpZCwKKwkJCQkgICB0ZF90aHJoYW5kbGVf dCAqdGgpOworICB0ZF9lcnJfZSAoKnRkX3Rocl9nZXRfaW5mb19wKSAoY29u c3QgdGRfdGhyaGFuZGxlX3QgKnRoLAorCQkJCSB0ZF90aHJpbmZvX3QgKmlu Zm9wKTsKKyAgdGRfZXJyX2UgKCp0ZF90aHJfZXZlbnRfZW5hYmxlX3ApIChj b25zdCB0ZF90aHJoYW5kbGVfdCAqdGgsIGludCBldmVudCk7CisgIHRkX2Vy cl9lICgqdGRfdGFfdGhyX2l0ZXJfcCkgKGNvbnN0IHRkX3RocmFnZW50X3Qg KnRhLAorCQkJCXRkX3Rocl9pdGVyX2YgKmNhbGxiYWNrLCB2b2lkICpjYmRh dGFfcCwKKwkJCQl0ZF90aHJfc3RhdGVfZSBzdGF0ZSwgaW50IHRpX3ByaSwK KwkJCQlzaWdzZXRfdCAqdGlfc2lnbWFza19wLAorCQkJCXVuc2lnbmVkIGlu dCB0aV91c2VyX2ZsYWdzKTsKKyAgdGRfZXJyX2UgKCp0ZF90aHJfdGxzX2dl dF9hZGRyX3ApIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqdGgsCisJCQkJICAg ICB2b2lkICptYXBfYWRkcmVzcywKKwkJCQkgICAgIHNpemVfdCBvZmZzZXQs IHZvaWQgKiphZGRyZXNzKTsKKyAgY29uc3QgY2hhciAqKiAoKnRkX3N5bWJv bF9saXN0X3ApICh2b2lkKTsKK307CisKK3N0YXRpYyBjaGFyICpsaWJ0aHJl YWRfZGJfc2VhcmNoX3BhdGg7CiAKIHN0YXRpYyBpbnQgZmluZF9vbmVfdGhy ZWFkIChwdGlkX3QpOwogc3RhdGljIGludCBmaW5kX25ld190aHJlYWRzX2Nh bGxiYWNrIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqdGhfcCwgdm9pZCAqZGF0 YSk7CkBAIC0xMzAsNyArMTY4LDExIEBAIHRocmVhZF9kYl9jcmVhdGVfZXZl bnQgKENPUkVfQUREUiB3aGVyZSkKICAgdGRfZXZlbnRfbXNnX3QgbXNnOwog ICB0ZF9lcnJfZSBlcnI7CiAgIHN0cnVjdCBsd3BfaW5mbyAqbHdwOwotICBz dHJ1Y3QgcHJvY2Vzc19pbmZvX3ByaXZhdGUgKnByb2MgPSBjdXJyZW50X3By b2Nlc3MoKS0+cHJpdmF0ZTsKKyAgc3RydWN0IHRocmVhZF9kYiAqdGhyZWFk X2RiID0gY3VycmVudF9wcm9jZXNzICgpLT5wcml2YXRlLT50aHJlYWRfZGI7 CisKKyAgaWYgKHRocmVhZF9kYi0+dGRfdGFfZXZlbnRfZ2V0bXNnX3AgPT0g TlVMTCkKKyAgICAvKiBXZSBzaG91bGRuJ3QgaGF2ZSBldmVyIGJlIGhlcmUg aW4gdGhlIGZpcnN0IHBsYWNlLiAgKi8KKyAgICByZXR1cm4gVERfRVJSOwog CiAgIGlmIChkZWJ1Z190aHJlYWRzKQogICAgIGZwcmludGYgKHN0ZGVyciwg IlRocmVhZCBjcmVhdGlvbiBldmVudC5cbiIpOwpAQCAtMTM5LDcgKzE4MSw3 IEBAIHRocmVhZF9kYl9jcmVhdGVfZXZlbnQgKENPUkVfQUREUiB3aGVyZSkK ICAgICAgSW4gdGhlIExpbnV4VGhyZWFkcyBpbXBsZW1lbnRhdGlvbiwgdGhp cyBpcyBzYWZlLAogICAgICBiZWNhdXNlIGFsbCBldmVudHMgY29tZSBmcm9t IHRoZSBtYW5hZ2VyIHRocmVhZAogICAgICAoZXhjZXB0IGZvciBpdHMgb3du IGNyZWF0aW9uLCBvZiBjb3Vyc2UpLiAgKi8KLSAgZXJyID0gdGRfdGFfZXZl bnRfZ2V0bXNnIChwcm9jLT50aHJlYWRfYWdlbnQsICZtc2cpOworICBlcnIg PSB0aHJlYWRfZGItPnRkX3RhX2V2ZW50X2dldG1zZ19wICh0aHJlYWRfZGIt PnRocmVhZF9hZ2VudCwgJm1zZyk7CiAgIGlmIChlcnIgIT0gVERfT0spCiAg ICAgZnByaW50ZiAoc3RkZXJyLCAidGhyZWFkIGdldG1zZyBlcnI6ICVzXG4i LAogCSAgICAgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikpOwpAQCAtMTU4LDM2 ICsyMDAsMjUgQEAgdGhyZWFkX2RiX2NyZWF0ZV9ldmVudCAoQ09SRV9BRERS IHdoZXJlKQogICByZXR1cm4gMDsKIH0KIAotI2lmIDAKLXN0YXRpYyBpbnQK LXRocmVhZF9kYl9kZWF0aF9ldmVudCAoQ09SRV9BRERSIHdoZXJlKQotewot ICBpZiAoZGVidWdfdGhyZWFkcykKLSAgICBmcHJpbnRmIChzdGRlcnIsICJU aHJlYWQgZGVhdGggZXZlbnQuXG4iKTsKLQotICByZXR1cm4gMDsKLX0KLSNl bmRpZgotCiBzdGF0aWMgaW50CiB0aHJlYWRfZGJfZW5hYmxlX3JlcG9ydGlu ZyAoKQogewogICB0ZF90aHJfZXZlbnRzX3QgZXZlbnRzOwogICB0ZF9ub3Rp ZnlfdCBub3RpZnk7CiAgIHRkX2Vycl9lIGVycjsKLSAgc3RydWN0IHByb2Nl c3NfaW5mb19wcml2YXRlICpwcm9jID0gY3VycmVudF9wcm9jZXNzKCktPnBy aXZhdGU7CisgIHN0cnVjdCB0aHJlYWRfZGIgKnRocmVhZF9kYiA9IGN1cnJl bnRfcHJvY2VzcyAoKS0+cHJpdmF0ZS0+dGhyZWFkX2RiOworCisgIGlmICh0 aHJlYWRfZGItPnRkX3RhX3NldF9ldmVudF9wID09IE5VTEwKKyAgICAgIHx8 IHRocmVhZF9kYi0+dGRfdGFfZXZlbnRfYWRkcl9wID09IE5VTEwKKyAgICAg IHx8IHRocmVhZF9kYi0+dGRfdGFfZXZlbnRfZ2V0bXNnX3AgPT0gTlVMTCkK KyAgICAvKiBUaGlzIGxpYnRocmVhZF9kYiBpcyBtaXNzaW5nIHJlcXVpcmVk IHN1cHBvcnQuICAqLworICAgIHJldHVybiBURF9FUlI7CiAKICAgLyogU2V0 IHRoZSBwcm9jZXNzIHdpZGUgbWFzayBzYXlpbmcgd2hpY2ggZXZlbnRzIHdl J3JlIGludGVyZXN0ZWQgaW4uICAqLwogICB0ZF9ldmVudF9lbXB0eXNldCAo JmV2ZW50cyk7CiAgIHRkX2V2ZW50X2FkZHNldCAoJmV2ZW50cywgVERfQ1JF QVRFKTsKIAotI2lmIDAKLSAgLyogVGhpcyBpcyByZXBvcnRlZCB0byBiZSBi cm9rZW4gaW4gZ2xpYmMgMi4xLjMuICBBIGRpZmZlcmVudCBhcHByb2FjaAot ICAgICB3aWxsIGJlIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHRoYXQuICAqLwot ICB0ZF9ldmVudF9hZGRzZXQgKCZldmVudHMsIFREX0RFQVRIKTsKLSNlbmRp ZgotCi0gIGVyciA9IHRkX3RhX3NldF9ldmVudCAocHJvYy0+dGhyZWFkX2Fn ZW50LCAmZXZlbnRzKTsKKyAgZXJyID0gdGhyZWFkX2RiLT50ZF90YV9zZXRf ZXZlbnRfcCAodGhyZWFkX2RiLT50aHJlYWRfYWdlbnQsICZldmVudHMpOwog ICBpZiAoZXJyICE9IFREX09LKQogICAgIHsKICAgICAgIHdhcm5pbmcgKCJV bmFibGUgdG8gc2V0IGdsb2JhbCB0aHJlYWQgZXZlbnQgbWFzazogJXMiLApA QCAtMTk2LDcgKzIyNyw4IEBAIHRocmVhZF9kYl9lbmFibGVfcmVwb3J0aW5n ICgpCiAgICAgfQogCiAgIC8qIEdldCBhZGRyZXNzIGZvciB0aHJlYWQgY3Jl YXRpb24gYnJlYWtwb2ludC4gICovCi0gIGVyciA9IHRkX3RhX2V2ZW50X2Fk ZHIgKHByb2MtPnRocmVhZF9hZ2VudCwgVERfQ1JFQVRFLCAmbm90aWZ5KTsK KyAgZXJyID0gdGhyZWFkX2RiLT50ZF90YV9ldmVudF9hZGRyX3AgKHRocmVh ZF9kYi0+dGhyZWFkX2FnZW50LCBURF9DUkVBVEUsCisJCQkJICAgICAgICZu b3RpZnkpOwogICBpZiAoZXJyICE9IFREX09LKQogICAgIHsKICAgICAgIHdh cm5pbmcgKCJVbmFibGUgdG8gZ2V0IGxvY2F0aW9uIGZvciB0aHJlYWQgY3Jl YXRpb24gYnJlYWtwb2ludDogJXMiLApAQCAtMjA2LDIyICsyMzgsNiBAQCB0 aHJlYWRfZGJfZW5hYmxlX3JlcG9ydGluZyAoKQogICBzZXRfYnJlYWtwb2lu dF9hdCAoKENPUkVfQUREUikgKHVuc2lnbmVkIGxvbmcpIG5vdGlmeS51LmJw dGFkZHIsCiAJCSAgICAgdGhyZWFkX2RiX2NyZWF0ZV9ldmVudCk7CiAKLSNp ZiAwCi0gIC8qIERvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggcmVwb3J0 ZWQgdGhyZWFkIGRlYXRocywgb25seQotICAgICB3aXRoIGFjdHVhbCB0aHJl YWQgZGVhdGhzICh2aWEgd2FpdCkuICAqLwotCi0gIC8qIEdldCBhZGRyZXNz IGZvciB0aHJlYWQgZGVhdGggYnJlYWtwb2ludC4gICovCi0gIGVyciA9IHRk X3RhX2V2ZW50X2FkZHIgKHByb2MtPnRocmVhZF9hZ2VudCwgVERfREVBVEgs ICZub3RpZnkpOwotICBpZiAoZXJyICE9IFREX09LKQotICAgIHsKLSAgICAg IHdhcm5pbmcgKCJVbmFibGUgdG8gZ2V0IGxvY2F0aW9uIGZvciB0aHJlYWQg ZGVhdGggYnJlYWtwb2ludDogJXMiLAotCSAgICAgICB0aHJlYWRfZGJfZXJy X3N0ciAoZXJyKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBzZXRfYnJl YWtwb2ludF9hdCAoKENPUkVfQUREUikgKHVuc2lnbmVkIGxvbmcpIG5vdGlm eS51LmJwdGFkZHIsCi0JCSAgICAgdGhyZWFkX2RiX2RlYXRoX2V2ZW50KTsK LSNlbmRpZgotCiAgIHJldHVybiAxOwogfQogCkBAIC0yMzMsNyArMjQ5LDcg QEAgZmluZF9vbmVfdGhyZWFkIChwdGlkX3QgcHRpZCkKICAgdGRfZXJyX2Ug ZXJyOwogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKmluZmVyaW9yOwogICBzdHJ1 Y3QgbHdwX2luZm8gKmx3cDsKLSAgc3RydWN0IHByb2Nlc3NfaW5mb19wcml2 YXRlICpwcm9jOworICBzdHJ1Y3QgdGhyZWFkX2RiICp0aHJlYWRfZGIgPSBj dXJyZW50X3Byb2Nlc3MgKCktPnByaXZhdGUtPnRocmVhZF9kYjsKICAgaW50 IGx3cGlkID0gcHRpZF9nZXRfbHdwIChwdGlkKTsKIAogICBpbmZlcmlvciA9 IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgZmluZF9pbmZlcmlvcl9pZCAoJmFs bF90aHJlYWRzLCBwdGlkKTsKQEAgLTI0MiwxMyArMjU4LDEyIEBAIGZpbmRf b25lX3RocmVhZCAocHRpZF90IHB0aWQpCiAgICAgcmV0dXJuIDE7CiAKICAg LyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdGhyZWFkLiAgKi8KLSAg cHJvYyA9IGdldF90aHJlYWRfcHJvY2VzcyAoaW5mZXJpb3IpLT5wcml2YXRl OwotICBlcnIgPSB0ZF90YV9tYXBfbHdwMnRociAocHJvYy0+dGhyZWFkX2Fn ZW50LCBsd3BpZCwgJnRoKTsKKyAgZXJyID0gdGhyZWFkX2RiLT50ZF90YV9t YXBfbHdwMnRocl9wICh0aHJlYWRfZGItPnRocmVhZF9hZ2VudCwgbHdwaWQs ICZ0aCk7CiAgIGlmIChlcnIgIT0gVERfT0spCiAgICAgZXJyb3IgKCJDYW5u b3QgZ2V0IHRocmVhZCBoYW5kbGUgZm9yIExXUCAlZDogJXMiLAogCSAgIGx3 cGlkLCB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CiAKLSAgZXJyID0gdGRf dGhyX2dldF9pbmZvICgmdGgsICZ0aSk7CisgIGVyciA9IHRocmVhZF9kYi0+ dGRfdGhyX2dldF9pbmZvX3AgKCZ0aCwgJnRpKTsKICAgaWYgKGVyciAhPSBU RF9PSykKICAgICBlcnJvciAoIkNhbm5vdCBnZXQgdGhyZWFkIGluZm8gZm9y IExXUCAlZDogJXMiLAogCSAgIGx3cGlkLCB0aHJlYWRfZGJfZXJyX3N0ciAo ZXJyKSk7CkBAIC0yNjYsNyArMjgxLDcgQEAgZmluZF9vbmVfdGhyZWFkIChw dGlkX3QgcHRpZCkKIAogICBpZiAodGhyZWFkX2RiX3VzZV9ldmVudHMpCiAg ICAgewotICAgICAgZXJyID0gdGRfdGhyX2V2ZW50X2VuYWJsZSAoJnRoLCAx KTsKKyAgICAgIGVyciA9IHRocmVhZF9kYi0+dGRfdGhyX2V2ZW50X2VuYWJs ZV9wICgmdGgsIDEpOwogICAgICAgaWYgKGVyciAhPSBURF9PSykKIAllcnJv ciAoIkNhbm5vdCBlbmFibGUgdGhyZWFkIGV2ZW50IHJlcG9ydGluZyBmb3Ig JWQ6ICVzIiwKIAkgICAgICAgdGkudGlfbGlkLCB0aHJlYWRfZGJfZXJyX3N0 ciAoZXJyKSk7CkBAIC0zMTAsNyArMzI1LDggQEAgbWF5YmVfYXR0YWNoX3Ro cmVhZCAoY29uc3QgdGRfdGhyaGFuZGxlXwogCiAgIGlmICh0aHJlYWRfZGJf dXNlX2V2ZW50cykKICAgICB7Ci0gICAgICBlcnIgPSB0ZF90aHJfZXZlbnRf ZW5hYmxlICh0aF9wLCAxKTsKKyAgICAgIHN0cnVjdCB0aHJlYWRfZGIgKnRo cmVhZF9kYiA9IGN1cnJlbnRfcHJvY2VzcyAoKS0+cHJpdmF0ZS0+dGhyZWFk X2RiOworICAgICAgZXJyID0gdGhyZWFkX2RiLT50ZF90aHJfZXZlbnRfZW5h YmxlX3AgKHRoX3AsIDEpOwogICAgICAgaWYgKGVyciAhPSBURF9PSykKIAll cnJvciAoIkNhbm5vdCBlbmFibGUgdGhyZWFkIGV2ZW50IHJlcG9ydGluZyBm b3IgJWQ6ICVzIiwKIAkgICAgICAgdGlfcC0+dGlfbGlkLCB0aHJlYWRfZGJf ZXJyX3N0ciAoZXJyKSk7CkBAIC0zMjIsOCArMzM4LDkgQEAgZmluZF9uZXdf dGhyZWFkc19jYWxsYmFjayAoY29uc3QgdGRfdGhyaAogewogICB0ZF90aHJp bmZvX3QgdGk7CiAgIHRkX2Vycl9lIGVycjsKKyAgc3RydWN0IHRocmVhZF9k YiAqdGhyZWFkX2RiID0gY3VycmVudF9wcm9jZXNzICgpLT5wcml2YXRlLT50 aHJlYWRfZGI7CiAKLSAgZXJyID0gdGRfdGhyX2dldF9pbmZvICh0aF9wLCAm dGkpOworICBlcnIgPSB0aHJlYWRfZGItPnRkX3Rocl9nZXRfaW5mb19wICh0 aF9wLCAmdGkpOwogICBpZiAoZXJyICE9IFREX09LKQogICAgIGVycm9yICgi Q2Fubm90IGdldCB0aHJlYWQgaW5mbzogJXMiLCB0aHJlYWRfZGJfZXJyX3N0 ciAoZXJyKSk7CiAKQEAgLTM0MSw3ICszNTgsNyBAQCB0aHJlYWRfZGJfZmlu ZF9uZXdfdGhyZWFkcyAodm9pZCkKIHsKICAgdGRfZXJyX2UgZXJyOwogICBw dGlkX3QgcHRpZCA9ICgoc3RydWN0IGluZmVyaW9yX2xpc3RfZW50cnkgKikg Y3VycmVudF9pbmZlcmlvciktPmlkOwotICBzdHJ1Y3QgcHJvY2Vzc19pbmZv X3ByaXZhdGUgKnByb2MgPSBjdXJyZW50X3Byb2Nlc3MoKS0+cHJpdmF0ZTsK KyAgc3RydWN0IHRocmVhZF9kYiAqdGhyZWFkX2RiID0gY3VycmVudF9wcm9j ZXNzICgpLT5wcml2YXRlLT50aHJlYWRfZGI7CiAKICAgLyogVGhpcyBmdW5j dGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHdlIGZpcnN0IGluaXRpYWxpemUg dGhyZWFkX2RiLgogICAgICBGaXJzdCBsb2NhdGUgdGhlIGluaXRpYWwgdGhy ZWFkLiAgSWYgaXQgaXMgbm90IHJlYWR5IGZvcgpAQCAtMzUwLDEwICszNjcs MTAgQEAgdGhyZWFkX2RiX2ZpbmRfbmV3X3RocmVhZHMgKHZvaWQpCiAgICAg cmV0dXJuOwogCiAgIC8qIEl0ZXJhdGUgb3ZlciBhbGwgdXNlci1zcGFjZSB0 aHJlYWRzIHRvIGRpc2NvdmVyIG5ldyB0aHJlYWRzLiAgKi8KLSAgZXJyID0g dGRfdGFfdGhyX2l0ZXIgKHByb2MtPnRocmVhZF9hZ2VudCwKLQkJCWZpbmRf bmV3X3RocmVhZHNfY2FsbGJhY2ssIE5VTEwsCi0JCQlURF9USFJfQU5ZX1NU QVRFLCBURF9USFJfTE9XRVNUX1BSSU9SSVRZLAotCQkJVERfU0lHTk9fTUFT SywgVERfVEhSX0FOWV9VU0VSX0ZMQUdTKTsKKyAgZXJyID0gdGhyZWFkX2Ri LT50ZF90YV90aHJfaXRlcl9wICh0aHJlYWRfZGItPnRocmVhZF9hZ2VudCwK KwkJCQkgICAgIGZpbmRfbmV3X3RocmVhZHNfY2FsbGJhY2ssIE5VTEwsCisJ CQkJICAgICBURF9USFJfQU5ZX1NUQVRFLCBURF9USFJfTE9XRVNUX1BSSU9S SVRZLAorCQkJCSAgICAgVERfU0lHTk9fTUFTSywgVERfVEhSX0FOWV9VU0VS X0ZMQUdTKTsKICAgaWYgKGVyciAhPSBURF9PSykKICAgICBlcnJvciAoIkNh bm5vdCBmaW5kIG5ldyB0aHJlYWRzOiAlcyIsIHRocmVhZF9kYl9lcnJfc3Ry IChlcnIpKTsKIH0KQEAgLTM2NiwxMCArMzgzLDExIEBAIHRocmVhZF9kYl9m aW5kX25ld190aHJlYWRzICh2b2lkKQogc3RhdGljIHZvaWQKIHRocmVhZF9k Yl9sb29rX3VwX3N5bWJvbHMgKHZvaWQpCiB7Ci0gIGNvbnN0IGNoYXIgKipz eW1fbGlzdCA9IHRkX3N5bWJvbF9saXN0ICgpOworICBzdHJ1Y3QgdGhyZWFk X2RiICp0aHJlYWRfZGIgPSBjdXJyZW50X3Byb2Nlc3MgKCktPnByaXZhdGUt PnRocmVhZF9kYjsKKyAgY29uc3QgY2hhciAqKnN5bV9saXN0OwogICBDT1JF X0FERFIgdW51c2VkOwogCi0gIGZvciAoc3ltX2xpc3QgPSB0ZF9zeW1ib2xf bGlzdCAoKTsgKnN5bV9saXN0OyBzeW1fbGlzdCsrKQorICBmb3IgKHN5bV9s aXN0ID0gdGhyZWFkX2RiLT50ZF9zeW1ib2xfbGlzdF9wICgpOyAqc3ltX2xp c3Q7IHN5bV9saXN0KyspCiAgICAgbG9va191cF9vbmVfc3ltYm9sICgqc3lt X2xpc3QsICZ1bnVzZWQpOwogfQogCkBAIC0zNzcsMTYgKzM5NSwyMyBAQCBp bnQKIHRocmVhZF9kYl9nZXRfdGxzX2FkZHJlc3MgKHN0cnVjdCB0aHJlYWRf aW5mbyAqdGhyZWFkLCBDT1JFX0FERFIgb2Zmc2V0LAogCQkJICAgQ09SRV9B RERSIGxvYWRfbW9kdWxlLCBDT1JFX0FERFIgKmFkZHJlc3MpCiB7Ci0jaWYg SEFWRV9URF9USFJfVExTX0dFVF9BRERSCiAgIHBzYWRkcl90IGFkZHI7CiAg IHRkX2Vycl9lIGVycjsKICAgc3RydWN0IGx3cF9pbmZvICpsd3A7CiAgIHN0 cnVjdCB0aHJlYWRfaW5mbyAqc2F2ZWRfaW5mZXJpb3I7CisgIHN0cnVjdCBw cm9jZXNzX2luZm8gKnByb2M7CisgIHN0cnVjdCB0aHJlYWRfZGIgKnRocmVh ZF9kYjsKKworICBwcm9jID0gZ2V0X3RocmVhZF9wcm9jZXNzICh0aHJlYWQp OworICB0aHJlYWRfZGIgPSBwcm9jLT5wcml2YXRlLT50aHJlYWRfZGI7CiAK ICAgLyogSWYgdGhlIHRocmVhZCBsYXllciBpcyBub3QgKHlldCkgaW5pdGlh bGl6ZWQsIGZhaWwuICAqLwotICBpZiAoIWdldF90aHJlYWRfcHJvY2VzcyAo dGhyZWFkKS0+YWxsX3N5bWJvbHNfbG9va2VkX3VwKQorICBpZiAoIXByb2Mt PmFsbF9zeW1ib2xzX2xvb2tlZF91cCkKICAgICByZXR1cm4gVERfRVJSOwog CisgIGlmICh0aHJlYWRfZGItPnRkX3Rocl90bHNfZ2V0X2FkZHJfcCA9PSBO VUxMKQorICAgIHJldHVybiAtMTsKKwogICBsd3AgPSBnZXRfdGhyZWFkX2x3 cCAodGhyZWFkKTsKICAgaWYgKCFsd3AtPnRocmVhZF9rbm93bikKICAgICBm aW5kX29uZV90aHJlYWQgKGx3cC0+aGVhZC5pZCk7CkBAIC0zOTgsOCArNDIz LDkgQEAgdGhyZWFkX2RiX2dldF90bHNfYWRkcmVzcyAoc3RydWN0IHRocmVh ZAogICAvKiBOb3RlIHRoZSBjYXN0IHRocm91Z2ggdWludHB0cl90OiB0aGlz IGludGVyZmFjZSBvbmx5IHdvcmtzIGlmCiAgICAgIGEgdGFyZ2V0IGFkZHJl c3MgZml0cyBpbiBhIHBzYWRkcl90LCB3aGljaCBpcyBhIGhvc3QgcG9pbnRl ci4KICAgICAgU28gYSAzMi1iaXQgZGVidWdnZXIgY2FuIG5vdCBhY2Nlc3Mg NjQtYml0IFRMUyB0aHJvdWdoIHRoaXMuICAqLwotICBlcnIgPSB0ZF90aHJf dGxzX2dldF9hZGRyICgmbHdwLT50aCwgKHBzYWRkcl90KSAodWludHB0cl90 KSBsb2FkX21vZHVsZSwKLQkJCSAgICAgb2Zmc2V0LCAmYWRkcik7CisgIGVy ciA9IHRocmVhZF9kYi0+dGRfdGhyX3Rsc19nZXRfYWRkcl9wICgmbHdwLT50 aCwKKwkJCQkJICAocHNhZGRyX3QpICh1aW50cHRyX3QpIGxvYWRfbW9kdWxl LAorCQkJCQkgIG9mZnNldCwgJmFkZHIpOwogICBjdXJyZW50X2luZmVyaW9y ID0gc2F2ZWRfaW5mZXJpb3I7CiAgIGlmIChlcnIgPT0gVERfT0spCiAgICAg ewpAQCAtNDA4LDE3ICs0MzQsMTk1IEBAIHRocmVhZF9kYl9nZXRfdGxzX2Fk ZHJlc3MgKHN0cnVjdCB0aHJlYWQKICAgICB9CiAgIGVsc2UKICAgICByZXR1 cm4gZXJyOwotI2Vsc2UKLSAgcmV0dXJuIC0xOwotI2VuZGlmCit9CisKK3N0 YXRpYyBpbnQKK3RyeV90aHJlYWRfZGJfbG9hZF8xICh2b2lkICpoYW5kbGUp Cit7CisgIHRkX2Vycl9lIGVycjsKKyAgc3RydWN0IHRocmVhZF9kYiB0ZGI7 CisgIHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBjdXJyZW50X3Byb2Nl c3MgKCk7CisKKyAgaWYgKHByb2MtPnByaXZhdGUtPnRocmVhZF9kYiAhPSBO VUxMKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkludGVybmFs IGVycm9yOiB0aHJlYWRfZGIgIT0gTlVMTCBpbiAlczolZFxuIiwKKwkgICAg ICAgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgIHJldHVybiAwOworICAg IH0KKworICB0ZGIuaGFuZGxlID0gaGFuZGxlOworCisgIC8qIEluaXRpYWxp emUgcG9pbnRlcnMgdG8gdGhlIGR5bmFtaWMgbGlicmFyeSBmdW5jdGlvbnMg d2Ugd2lsbCB1c2UuCisgICAgIEVzc2VudGlhbCBmdW5jdGlvbnMgZmlyc3Qu ICAqLworCisjZGVmaW5lIENISyhyZXF1aXJlZCwgYSkJCQkJCVwKKyAgZG8J CQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBpZiAoKGEpID09IE5V TEwpCQkJCQkJXAorCXsJCQkJCQkJXAorCSAgaWYgKGRlYnVnX3RocmVhZHMp CQkJCQlcCisJICAgIGZwcmludGYgKHN0ZGVyciwgImRsc3ltOiAlc1xuIiwg ZGxlcnJvciAoKSk7CVwKKwkgIGlmIChyZXF1aXJlZCkJCQkJCQlcCisJICAg IHJldHVybiAwOwkJCQkJCVwKKwl9CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlc CisgIHdoaWxlICgwKQorCisgIENISyAoMSwgdGRiLnRkX3RhX25ld19wID0g ZGxzeW0gKGhhbmRsZSwgInRkX3RhX25ldyIpKTsKKworICAvKiBBdHRlbXB0 IHRvIG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSB0aHJlYWQgbGlicmFyeS4g ICovCisgIGVyciA9IHRkYi50ZF90YV9uZXdfcCAoJnRkYi5wcm9jX2hhbmRs ZSwgJnRkYi50aHJlYWRfYWdlbnQpOworICBpZiAoZXJyICE9IFREX09LKQor ICAgIHsKKyAgICAgIGlmIChkZWJ1Z190aHJlYWRzKQorCWZwcmludGYgKHN0 ZGVyciwgInRkX3RhX25ldygpOiAlc1xuIiwgdGhyZWFkX2RiX2Vycl9zdHIg KGVycikpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIENISyAoMSwg dGRiLnRkX3RhX21hcF9sd3AydGhyX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRf dGFfbWFwX2x3cDJ0aHIiKSk7CisgIENISyAoMSwgdGRiLnRkX3Rocl9nZXRf aW5mb19wID0gZGxzeW0gKGhhbmRsZSwgInRkX3Rocl9nZXRfaW5mbyIpKTsK KyAgQ0hLICgxLCB0ZGIudGRfdGFfdGhyX2l0ZXJfcCA9IGRsc3ltIChoYW5k bGUsICJ0ZF90YV90aHJfaXRlciIpKTsKKyAgQ0hLICgxLCB0ZGIudGRfc3lt Ym9sX2xpc3RfcCA9IGRsc3ltIChoYW5kbGUsICJ0ZF9zeW1ib2xfbGlzdCIp KTsKKworICAvKiBUaGlzIGlzIHJlcXVpcmVkIG9ubHkgd2hlbiB0aHJlYWRf ZGJfdXNlX2V2ZW50cyBpcyBvbi4gICovCisgIENISyAodGhyZWFkX2RiX3Vz ZV9ldmVudHMsCisgICAgICAgdGRiLnRkX3Rocl9ldmVudF9lbmFibGVfcCA9 IGRsc3ltIChoYW5kbGUsICJ0ZF90aHJfZXZlbnRfZW5hYmxlIikpOworCisg IC8qIFRoZXNlIGFyZSBub3QgZXNzZW50aWFsLiAgKi8KKyAgQ0hLICgwLCB0 ZGIudGRfdGFfZXZlbnRfYWRkcl9wID0gZGxzeW0gKGhhbmRsZSwgInRkX3Rh X2V2ZW50X2FkZHIiKSk7CisgIENISyAoMCwgdGRiLnRkX3RhX3NldF9ldmVu dF9wID0gZGxzeW0gKGhhbmRsZSwgInRkX3RhX3NldF9ldmVudCIpKTsKKyAg Q0hLICgwLCB0ZGIudGRfdGFfZXZlbnRfZ2V0bXNnX3AgPSBkbHN5bSAoaGFu ZGxlLCAidGRfdGFfZXZlbnRfZ2V0bXNnIikpOworICBDSEsgKDAsIHRkYi50 ZF90aHJfdGxzX2dldF9hZGRyX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGhy X3Rsc19nZXRfYWRkciIpKTsKKworI3VuZGVmIENISworCisgIHByb2MtPnBy aXZhdGUtPnRocmVhZF9kYiA9IG1hbGxvYyAoc2l6ZW9mICh0ZGIpKTsKKyAg bWVtY3B5IChwcm9jLT5wcml2YXRlLT50aHJlYWRfZGIsICZ0ZGIsIHNpemVv ZiAodGRiKSk7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIExvb2t1cCBhIGxp YnJhcnkgaW4gd2hpY2ggZ2l2ZW4gc3ltYm9sIHJlc2lkZXMuCisgICBOb3Rl OiB0aGlzIGlzIGxvb2tpbmcgaW4gdGhlIEdEQlNFUlZFUiBwcm9jZXNzLCBu b3QgaW4gdGhlIGluZmVyaW9yLgorICAgUmV0dXJucyBsaWJyYXJ5IG5hbWUs IG9yIE5VTEwuICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitkbGFkZHJf dG9fc29uYW1lIChjb25zdCB2b2lkICphZGRyKQoreworICBEbF9pbmZvIGlu Zm87CisKKyAgaWYgKGRsYWRkciAoYWRkciwgJmluZm8pICE9IDApCisgICAg cmV0dXJuIGluZm8uZGxpX2ZuYW1lOworICByZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIGludAordHJ5X3RocmVhZF9kYl9sb2FkIChjb25zdCBjaGFyICps aWJyYXJ5KQoreworICB2b2lkICpoYW5kbGU7CisKKyAgaWYgKGRlYnVnX3Ro cmVhZHMpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiVHJ5aW5nIGhvc3QgbGli dGhyZWFkX2RiIGxpYnJhcnk6ICVzLlxuIiwKKwkgICAgIGxpYnJhcnkpOwor ICBoYW5kbGUgPSBkbG9wZW4gKGxpYnJhcnksIFJUTERfTk9XKTsKKyAgaWYg KGhhbmRsZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChkZWJ1Z190aHJl YWRzKQorCWZwcmludGYgKHN0ZGVyciwgImRsb3BlbiBmYWlsZWQ6ICVzLlxu IiwgZGxlcnJvciAoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg aWYgKGRlYnVnX3RocmVhZHMgJiYgc3RyY2hyIChsaWJyYXJ5LCAnLycpID09 IE5VTEwpCisgICAgeworICAgICAgdm9pZCAqdGRfaW5pdDsKKworICAgICAg dGRfaW5pdCA9IGRsc3ltIChoYW5kbGUsICJ0ZF9pbml0Iik7CisgICAgICBp ZiAodGRfaW5pdCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgY29u c3QgY2hhciAqY29uc3QgbGlicGF0aCA9IGRsYWRkcl90b19zb25hbWUgKHRk X2luaXQpOworCisgICAgICAgICAgaWYgKGxpYnBhdGggIT0gTlVMTCkKKyAg ICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkhvc3QgJXMgcmVzb2x2ZWQg dG86ICVzLlxuIiwKKwkJICAgICBsaWJyYXJ5LCBsaWJwYXRoKTsKKyAgICAg ICAgfQorICAgIH0KKworICBpZiAodHJ5X3RocmVhZF9kYl9sb2FkXzEgKGhh bmRsZSkpCisgICAgcmV0dXJuIDE7CisKKyAgLyogVGhpcyBsaWJyYXJ5ICJy ZWZ1c2VkIiB0byB3b3JrIG9uIGN1cnJlbnQgaW5mZXJpb3IuICAqLworICBk bGNsb3NlIChoYW5kbGUpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAordGhyZWFkX2RiX2xvYWRfc2VhcmNoICh2b2lkKQoreworICBjaGFyIHBh dGhbUEFUSF9NQVhdOworICBjb25zdCBjaGFyICpzZWFyY2hfcGF0aDsKKyAg aW50IHJjID0gMDsKKworCisgIGlmIChsaWJ0aHJlYWRfZGJfc2VhcmNoX3Bh dGggPT0gTlVMTCkKKyAgICBsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGggPSB4 c3RyZHVwIChMSUJUSFJFQURfREJfU0VBUkNIX1BBVEgpOworCisgIHNlYXJj aF9wYXRoID0gbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoOworICB3aGlsZSAo KnNlYXJjaF9wYXRoKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmVuZCA9 IHN0cmNociAoc2VhcmNoX3BhdGgsICc6Jyk7CisgICAgICBpZiAoZW5kKQor CXsKKwkgIHNpemVfdCBsZW4gPSBlbmQgLSBzZWFyY2hfcGF0aDsKKyAgICAg ICAgICBpZiAobGVuICsgMSArIHN0cmxlbiAoTElCVEhSRUFEX0RCX1NPKSAr IDEgPiBzaXplb2YgKHBhdGgpKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBjaGFyICpjcCA9IHhtYWxsb2MgKGxlbiArIDEpOworICAgICAgICAg ICAgICBtZW1jcHkgKGNwLCBzZWFyY2hfcGF0aCwgbGVuKTsKKyAgICAgICAg ICAgICAgY3BbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgIHdhcm5pbmcg KCJsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGggY29tcG9uZW50IHRvbyBsb25n LCAiCisJCSAgICAgICAiaWdub3JlZDogJXMuIiwgY3ApOworICAgICAgICAg ICAgICBmcmVlIChjcCk7CisgICAgICAgICAgICAgIHNlYXJjaF9wYXRoICs9 IGxlbiArIDE7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgfQorCSAgbWVtY3B5IChwYXRoLCBzZWFyY2hfcGF0aCwgbGVuKTsKKwkg IHBhdGhbbGVuXSA9ICdcMCc7CisJICBzZWFyY2hfcGF0aCArPSBsZW4gKyAx OworCX0KKyAgICAgIGVsc2UKKwl7CisgICAgICAgICAgc2l6ZV90IGxlbiA9 IHN0cmxlbiAoc2VhcmNoX3BhdGgpOworCisgICAgICAgICAgaWYgKGxlbiAr IDEgKyBzdHJsZW4gKExJQlRIUkVBRF9EQl9TTykgKyAxID4gc2l6ZW9mIChw YXRoKSkKKyAgICAgICAgICAgIHsKKwkgICAgICB3YXJuaW5nICgibGlidGhy ZWFkX2RiX3NlYXJjaF9wYXRoIGNvbXBvbmVudCB0b28gbG9uZywiCisJCSAg ICAgICAiIGlnbm9yZWQ6ICVzLiIsIHNlYXJjaF9wYXRoKTsKKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJICBtZW1jcHkgKHBhdGgs IHNlYXJjaF9wYXRoLCBsZW4gKyAxKTsKKwkgIHNlYXJjaF9wYXRoICs9IGxl bjsKKwl9CisgICAgICBzdHJjYXQgKHBhdGgsICIvIik7CisgICAgICBzdHJj YXQgKHBhdGgsIExJQlRIUkVBRF9EQl9TTyk7CisgICAgICBpZiAoZGVidWdf dGhyZWFkcykKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAidGhyZWFkX2Ri X2xvYWRfc2VhcmNoIHRyeWluZyAlc1xuIiwgcGF0aCk7CisgICAgICBpZiAo dHJ5X3RocmVhZF9kYl9sb2FkIChwYXRoKSkKKwl7CisJICByYyA9IDE7CisJ ICBicmVhazsKKwl9CisgICAgfQorICBpZiAocmMgPT0gMCkKKyAgICByYyA9 IHRyeV90aHJlYWRfZGJfbG9hZCAoTElCVEhSRUFEX0RCX1NPKTsKKworICBp ZiAoZGVidWdfdGhyZWFkcykKKyAgICBmcHJpbnRmIChzdGRlcnIsICJ0aHJl YWRfZGJfbG9hZF9zZWFyY2ggcmV0dXJuaW5nICVkXG4iLCByYyk7CisgIHJl dHVybiByYzsKIH0KIAogaW50CiB0aHJlYWRfZGJfaW5pdCAoaW50IHVzZV9l dmVudHMpCiB7Ci0gIGludCBlcnI7CiAgIHN0cnVjdCBwcm9jZXNzX2luZm8g KnByb2MgPSBjdXJyZW50X3Byb2Nlc3MgKCk7Ci0gIHN0cnVjdCBwcm9jZXNz X2luZm9fcHJpdmF0ZSAqcHJpdiA9IHByb2MtPnByaXZhdGU7CiAKICAgLyog RklYTUUgZHJvdy8yMDA0LTEwLTE2OiBUaGlzIGlzIHRoZSAib3ZlcmFsbCBw cm9jZXNzIElEIiwgd2hpY2gKICAgICAgR05VL0xpbnV4IGNhbGxzIHRnaWQs ICJ0aHJlYWQgZ3JvdXAgSUQiLiAgV2hlbiB3ZSBzdXBwb3J0CkBAIC00MzMs MjcgKzYzNyw2MiBAQCB0aHJlYWRfZGJfaW5pdCAoaW50IHVzZV9ldmVudHMp CiAKICAgdGhyZWFkX2RiX3VzZV9ldmVudHMgPSB1c2VfZXZlbnRzOwogCi0g IGVyciA9IHRkX3RhX25ldyAoJnByaXYtPnByb2NfaGFuZGxlLCAmcHJpdi0+ dGhyZWFkX2FnZW50KTsKLSAgc3dpdGNoIChlcnIpCisgIGlmICh0aHJlYWRf ZGJfbG9hZF9zZWFyY2ggKCkpCiAgICAgewotICAgIGNhc2UgVERfTk9MSUJU SFJFQUQ6Ci0gICAgICAvKiBObyB0aHJlYWQgbGlicmFyeSB3YXMgZGV0ZWN0 ZWQuICAqLwotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIFREX09LOgot ICAgICAgLyogVGhlIHRocmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3RlZC4gICov Ci0KICAgICAgIGlmICh1c2VfZXZlbnRzICYmIHRocmVhZF9kYl9lbmFibGVf cmVwb3J0aW5nICgpID09IDApCiAJcmV0dXJuIDA7CiAgICAgICB0aHJlYWRf ZGJfZmluZF9uZXdfdGhyZWFkcyAoKTsKICAgICAgIHRocmVhZF9kYl9sb29r X3VwX3N5bWJvbHMgKCk7CiAgICAgICBwcm9jLT5hbGxfc3ltYm9sc19sb29r ZWRfdXAgPSAxOwogICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkZWZhdWx0Ogot ICAgICAgd2FybmluZyAoImVycm9yIGluaXRpYWxpemluZyB0aHJlYWRfZGIg bGlicmFyeTogJXMiLAotCSAgICAgICB0aHJlYWRfZGJfZXJyX3N0ciAoZXJy KSk7CiAgICAgfQogCiAgIHJldHVybiAwOwogfQorCisvKiBEaXNjb25uZWN0 IGZyb20gbGlidGhyZWFkX2RiIGFuZCBmcmVlIHJlc291cmNlcy4gICovCisK K3ZvaWQKK3RocmVhZF9kYl9mcmVlIChzdHJ1Y3QgcHJvY2Vzc19pbmZvICpw cm9jKQoreworICBzdHJ1Y3QgdGhyZWFkX2RiICp0aHJlYWRfZGIgPSBwcm9j LT5wcml2YXRlLT50aHJlYWRfZGI7CisgIGlmICh0aHJlYWRfZGIpCisgICAg eworICAgICAgdGRfZXJyX2UgKCp0ZF90YV9kZWxldGVfcCkgKHRkX3RocmFn ZW50X3QgKik7CisKKyAgICAgIHRkX3RhX2RlbGV0ZV9wID0gZGxzeW0gKHRo cmVhZF9kYi0+aGFuZGxlLCAidGRfdGFfZGVsZXRlIik7CisgICAgICBpZiAo dGRfdGFfZGVsZXRlX3AgIT0gTlVMTCkKKwkoKnRkX3RhX2RlbGV0ZV9wKSAo dGhyZWFkX2RiLT50aHJlYWRfYWdlbnQpOworCisgICAgICBkbGNsb3NlICh0 aHJlYWRfZGItPmhhbmRsZSk7CisgICAgICBmcmVlICh0aHJlYWRfZGIpOwor ICAgICAgcHJvYy0+cHJpdmF0ZS0+dGhyZWFkX2RiID0gTlVMTDsKKyAgICB9 Cit9CisKKy8qIEhhbmRsZSAic2V0IGxpYnRocmVhZC1kYi1zZWFyY2gtcGF0 aCIgbW9uaXRvciBjb21tYW5kLgorICAgUGFzcyBhbnkgb3RoZXIgbW9uaXRv ciBjb21tYW5kIGJhY2sgdG8gZGVmYXVsdCBoYW5kbGVyLiAgKi8KKwordm9p ZAordGhyZWFkX2RiX2hhbmRsZV9tb25pdG9yX2NvbW1hbmQgKGNoYXIgKm1v bikKK3sKKyAgaWYgKHN0cm5jbXAgKG1vbiwgInNldCBsaWJ0aHJlYWQtZGIt c2VhcmNoLXBhdGgiLCAyOCkgPT0gMCkKKyAgICB7CisgICAgICBjb25zdCBj aGFyICpjcCA9IG1vbiArIDI4OworCisgICAgICBpZiAobGlidGhyZWFkX2Ri X3NlYXJjaF9wYXRoICE9IE5VTEwpCisJZnJlZSAobGlidGhyZWFkX2RiX3Nl YXJjaF9wYXRoKTsKKworICAgICAgLyogU2tpcCBsZWFkaW5nIHNwYWNlIChp ZiBhbnkpLiAgKi8KKyAgICAgIHdoaWxlIChpc3NwYWNlICgqY3ApKQorCSsr Y3A7CisKKyAgICAgIGxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCA9IHhzdHJk dXAgKGNwKTsKKworICAgICAgbW9uaXRvcl9vdXRwdXQgKCJsaWJ0aHJlYWQt ZGItc2VhcmNoLXBhdGggc2V0IHRvIGAiKTsKKyAgICAgIG1vbml0b3Jfb3V0 cHV0IChsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGgpOworICAgICAgbW9uaXRv cl9vdXRwdXQgKCInXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICBoYW5kbGVf bW9uaXRvcl9jb21tYW5kIChtb24pOworfQo= --0016e645f8c261428204754c4f98--