From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15738 invoked by alias); 10 Apr 2009 19:06:22 -0000 Received: (qmail 14898 invoked by uid 22791); 10 Apr 2009 19:06:11 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_102,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Apr 2009 19:06:03 +0000 Received: from zps35.corp.google.com (zps35.corp.google.com [172.25.146.35]) by smtp-out.google.com with ESMTP id n3AJ60tj009945 for ; Fri, 10 Apr 2009 12:06:00 -0700 Received: from rv-out-0708.google.com (rvbf25.prod.google.com [10.140.82.25]) by zps35.corp.google.com with ESMTP id n3AJ5w07011420 for ; Fri, 10 Apr 2009 12:05:58 -0700 Received: by rv-out-0708.google.com with SMTP id f25so995181rvb.10 for ; Fri, 10 Apr 2009 12:05:58 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.12.14 with SMTP id 14mr1406068wfl.51.1239390358342; Fri, 10 Apr 2009 12:05:58 -0700 (PDT) In-Reply-To: <1239225742.8871.145.camel@localhost.localdomain> References: <20090406203920.CCD6F19C4EC@localhost> <1239225742.8871.145.camel@localhost.localdomain> Date: Fri, 10 Apr 2009 19:06:00 -0000 Message-ID: <8ac60eac0904101205h76d8377cv843db8177e74f8af@mail.gmail.com> Subject: Re: [patch][rfc] Allow GDB to search for the right libthread_db.so.1 From: Paul Pluzhnikov To: Thiago Jung Bauermann Cc: gdb-patches ml Content-Type: multipart/mixed; boundary=000e0cd2e2d20c0cc90467380ea7 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-04/txt/msg00197.txt.bz2 --000e0cd2e2d20c0cc90467380ea7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 8260 On Wed, Apr 8, 2009 at 2:22 PM, Thiago Jung Bauermann wrote: Thank you for comments and interest in this patch :-) Attached is a revised version, which I believe addresses all the issues you have raised. >> =A0/* Non-zero if we're using this module's target vector. =A0*/ >> -static int using_thread_db; >> +static void *using_thread_db; > > The comment for this variable needs to be updated. It's not a binary > flag anymore, so it should mention what the void * value is. The > variable should have a different name too, to reflect its new meaning. Done. >> =A0static int >> -thread_db_load (void) >> +try_thread_db_load_1(void *handle) >> =A0{ > > I know that this function was undocumented already, but would you mind > adding a brief comment describing what it does, and what its return > value means? > > Since you are changing a bit its behaviour and purpose, it seems fair > that you get to (briefly) document it. :-) Done. >> + =A0/* Now attempt to open a connection to the thread library. =A0*/ >> + =A0err =3D td_ta_new_p (&proc_handle, &thread_agent); >> + =A0if (err !=3D TD_OK) >> + =A0 =A0{ >> + =A0 =A0 =A0td_ta_new_p =3D NULL; >> + =A0 =A0 =A0if (info_verbose) >> + =A0 =A0 printf_unfiltered (_("td_ta_new(): %s.\n"), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0thread_db_err_str (err)= ); >> + =A0 =A0 =A0return 0; >> + =A0 =A0} > > If err !=3D TD_OK && err !=3D TD_NOLIBTHREAD, a warning should be emitted, > like in the current version of the code: > > =A0 =A0 =A0warning (_("Cannot initialize thread debugging library: %s"), > =A0 =A0 =A0 =A0 =A0 =A0 =A0 thread_db_err_str (err)); That's not quite right: you could also see TD_VERSION here (if you try the "wrong" libthread_db first). I've changed the code to emit a warning for other cases. >> @@ -447,9 +450,141 @@ thread_db_load (void) >> =A0 =A0td_thr_event_enable_p =3D dlsym (handle, "td_thr_event_enable"); >> =A0 =A0td_thr_tls_get_addr_p =3D dlsym (handle, "td_thr_tls_get_addr"); >> >> + =A0printf_unfiltered (_("[Thread debugging using libthread_db enabled]= \n")); >> + >> + =A0init_thread_db_ops (); >> + =A0add_target (&thread_db_ops); > > Why can't you keep these calls in _initialize_thread_db? Isn't it wrong > to call add_target whenever a libthread_db is loaded (I admit I don't > know much about the target infrastructure in GDB)? I believe you are quite correct. Fixed. >> + =A0handle =3D dlopen (library, RTLD_NOW); >> + =A0if (handle =3D=3D NULL) >> + =A0 =A0{ >> + =A0 =A0 =A0if (info_verbose) >> + =A0 =A0 printf_unfiltered (_("dlopen(): %s.\n"), dlerror ()); > > The parenthesis shouldn't be in the message. Also, suggest being a bit > more descriptive: "dlopen failed: %s.\n" Fixed. > The other error and information messages which currently have > parenthesis in them should also be fixed. Fixed. >> +static int >> +thread_db_load_search () >> +{ >> + =A0char path[PATH_MAX]; > > This function can overflow path. Serious problem, IMHO. Fixed. >> + =A0 =A0 =A0Dl_info info; >> + =A0 =A0 =A0const char *library =3D NULL; >> + =A0 =A0 =A0if (dladdr ((*td_ta_new_p), &info) !=3D 0) >> + =A0 =A0 library =3D info.dli_fname; >> + =A0 =A0 =A0if (library =3D=3D NULL) >> + =A0 =A0 library =3D LIBTHREAD_DB_SO; >> + =A0 =A0 =A0printf_unfiltered (_("Warning: guessed host libthread_db " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"library \"%s\".\n"), l= ibrary); > > Not sure this should be a warning. It's possible that the guessed > libthread_db is correct. Or is it more likely that it's not? With our Google-specific setting of LIBTHREAD_DB_SEARCH_PATH, we expect correct libthread_db to always be found on that path; hence the warning. But with empty search path (as in this patch) it definitely should not be. Fixed accordingly. > Also, I think it's clearer to rephrase it as: > > "Searched libthread_db library to use, selected %s" > > That is, avoid the (IMHO confusing) term "guessed library". Done. >> + =A0 =A0} >> + =A0else >> + =A0 =A0 =A0printf_unfiltered (_("Warning: unable to guess libthread_db= , " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"thread debugging will = not be available.\n")); > > Again, printf_unfiltered vs warning. I'd appreciate other opinions on > this topic. Also, suggest rewording to avoid "guess": > > "Unable to find libthread_db matching inferior's thread library, thread > debugging will not be available.\n". Done. >> +static int >> +thread_db_load (void) >> +{ > > Please add a comment describing the function and its return value. > Please also do this to the other functions which you introduced. Done. >> + =A0msym =3D lookup_minimal_symbol ("nptl_version", NULL, NULL); >> + =A0if (!msym) >> + =A0 =A0msym =3D lookup_minimal_symbol ("__linuxthreads_version", NULL,= NULL); >> + >> + =A0if (!msym) >> + =A0 =A0/* No threads yet */ >> + =A0 =A0return 0; > > Clever way to detect if a thread library is present. I can't comment on > its correctness and reliability though. I added one more symbol: __pthread_threads_events; really old versions of LinuxThreads libpthread lacked the __linuxthreads_version. > Perhaps others will have more > insight. My only comment is that an alternative would be to search > through the inferior's link map. Don't know if it would be better or > worse. Looking through link_map fails for statically-linked executables. It is desireable to have a single GDB that "just works", regardless of whether the executable was built statically or dynamically. > Also, I assume you tested your patch in both NPTL systems and > LinuxThread systems, right? Yes: we have a mixture and I tested both. >> + =A0soname =3D solib_name_from_address (SYMBOL_VALUE_ADDRESS (msym)); >> + =A0if (soname) >> + =A0 =A0{ >> + =A0 =A0 =A0/* Attempt to load libthread_db from the same directory. */ >> + =A0 =A0 =A0char path[PATH_MAX], *cp; >> + =A0 =A0 =A0strcpy (path, soname); >> + =A0 =A0 =A0cp =3D strrchr (path, '/'); >> + =A0 =A0 =A0if (cp =3D=3D NULL) >> + =A0 =A0 { >> + =A0 =A0 =A0 /* Expected to get fully resolved pathname, but got >> + =A0 =A0 =A0 =A0 =A0something else. Hope for the best. =A0*/ >> + =A0 =A0 =A0 printf_unfiltered (_("warning: (Internal error: " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"solib_name_fro= m_address() returned \"%s\".\n"), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0soname); >> + =A0 =A0 =A0 return thread_db_load_search (); >> + =A0 =A0 } > > "Internal error" has a specific meaning in GDB already, and it's not > what you use it for here. I suggest rewording to: > > warning (_("Cannot obtain absolute path of thread library: %s")); Fixed. > Note that I changed from calling printf_unfiltered to warning. I'm not > sure, but I gather the latter is preferred, right? (/me looks nervously > at other GDB developers, seeking a nod.) > > Also, please clarify what "hope for the best" means here. Done. >> + =A0 =A0 =A0printf_unfiltered (_("Using host libthread_db library \"%s\= ".\n"), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 library); >> + =A0 =A0 =A0last_loaded =3D td_ta_new_p; > > This message is currently only printed when verbose is on, but you > changed it to be always printed. Please provide a rationale for the > change. It's an "internal support" issue: we want to know at a glance which libthread_db got loaded. I changed this back to "verbose on" only. >> @@ -896,7 +993,10 @@ thread_db_wait (struct target_ops *ops, >> =A0 =A0 =A0{ >> =A0 =A0 =A0 =A0remove_thread_event_breakpoints (); >> =A0 =A0 =A0 =A0unpush_target (&thread_db_ops); >> + =A0 =A0 =A0if (using_thread_db) >> + =A0 =A0 dlclose (using_thread_db); >> =A0 =A0 =A0 =A0using_thread_db =3D 0; >> + =A0 =A0 =A0no_shared_libraries (NULL, 0); > > I don't know much about GDB's mourning process, so this is a genuine > question: is this the appropriate place to call no_shared_libraries? > Doesn't feel right to me. This was a workaround for earlier bug, which (AFAICT) is fixed in current source. I removed the call. I've tried to add documentation changes for this patch, but can't seem to find appropriate place for it :-( I think "Debugging Programs with Multiple Threads" section is the most appropriate place, but I am not sure. Thanks, --=20 Paul Pluzhnikov --000e0cd2e2d20c0cc90467380ea7 Content-Type: text/plain; charset=US-ASCII; name="gdb-thread-db.20090409.txt" Content-Disposition: attachment; filename="gdb-thread-db.20090409.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ftd77a9s0 Content-length: 21501 SW5kZXg6IGdkYl90aHJlYWRfZGIuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYl90aHJlYWRfZGIuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC11IC1yMS4x MiBnZGJfdGhyZWFkX2RiLmgKLS0tIGdkYl90aHJlYWRfZGIuaAkxOCBNYXIg MjAwOSAwODo1MToxMSAtMDAwMAkxLjEyCisrKyBnZGJfdGhyZWFkX2RiLmgJ MTAgQXByIDIwMDkgMDA6Mjg6MjcgLTAwMDAKQEAgLTEsNSArMSwxNCBAQAog I2lmZGVmIEhBVkVfVEhSRUFEX0RCX0gKICNpbmNsdWRlIDx0aHJlYWRfZGIu aD4KKworI2lmbmRlZiBMSUJUSFJFQURfREJfU08KKyNkZWZpbmUgTElCVEhS RUFEX0RCX1NPICJsaWJ0aHJlYWRfZGIuc28uMSIKKyNlbmRpZgorCisjaWZu ZGVmIExJQlRIUkVBRF9EQl9TRUFSQ0hfUEFUSAorI2RlZmluZSBMSUJUSFJF QURfREJfU0VBUkNIX1BBVEggIiIKKyNlbmRpZgorCiAjZWxzZQogCiAvKiBD b3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDcsIDIwMDgsIDIwMDkgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkluZGV4OiBsaW51eC10aHJl YWQtZGIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL2xpbnV4LXRocmVhZC1kYi5jLHYKcmV0cmlldmluZyBy ZXZpc2lvbiAxLjU0CmRpZmYgLXUgLXAgLXUgLXIxLjU0IGxpbnV4LXRocmVh ZC1kYi5jCi0tLSBsaW51eC10aHJlYWQtZGIuYwkyNyBGZWIgMjAwOSAyMDoz NDo0MSAtMDAwMAkxLjU0CisrKyBsaW51eC10aHJlYWQtZGIuYwkxMCBBcHIg MjAwOSAwMDoyODoyOCAtMDAwMApAQCAtMjYsMTMgKzI2LDE2IEBACiAjaW5j bHVkZSAiZ2RiX3RocmVhZF9kYi5oIgogCiAjaW5jbHVkZSAiYmZkLmgiCisj aW5jbHVkZSAiY29tbWFuZC5oIgogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIK KyNpbmNsdWRlICJnZGJjbWQuaCIKICNpbmNsdWRlICJnZGJ0aHJlYWQuaCIK ICNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgInN5bWZpbGUuaCIK ICNpbmNsdWRlICJvYmpmaWxlcy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgog I2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAic29saWIuaCIKICNp bmNsdWRlICJzb2xpYi1zdnI0LmgiCiAjaW5jbHVkZSAiZ2RiY29yZS5oIgog I2luY2x1ZGUgIm9ic2VydmVyLmgiCkBAIC00NCwxMCArNDcsNiBAQAogI2lu Y2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KICNlbmRpZgogCi0jaWZuZGVm IExJQlRIUkVBRF9EQl9TTwotI2RlZmluZSBMSUJUSFJFQURfREJfU08gImxp YnRocmVhZF9kYi5zby4xIgotI2VuZGlmCi0KIC8qIEdOVS9MaW51eCBsaWJ0 aHJlYWRfZGIgc3VwcG9ydC4KIAogICAgbGlidGhyZWFkX2RiIGlzIGEgbGli cmFyeSwgcHJvdmlkZWQgYWxvbmcgd2l0aCBsaWJwdGhyZWFkLnNvLCB3aGlj aApAQCAtNzQsMTQgKzczLDE3IEBACiAgICBvZiB0aGUgcHRpZF90IHByZXZl bnRzIHRocmVhZCBJRHMgY2hhbmdpbmcgd2hlbiBsaWJwdGhyZWFkIGlzCiAg ICBsb2FkZWQgb3IgdW5sb2FkZWQuICAqLwogCitzdGF0aWMgY2hhciAqbGli dGhyZWFkX2RiX3NlYXJjaF9wYXRoOworCiAvKiBJZiB3ZSdyZSBydW5uaW5n IG9uIEdOVS9MaW51eCwgd2UgbXVzdCBleHBsaWNpdGx5IGF0dGFjaCB0byBh bnkgbmV3CiAgICB0aHJlYWRzLiAgKi8KIAogLyogVGhpcyBtb2R1bGUncyB0 YXJnZXQgdmVjdG9yLiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyB0 aHJlYWRfZGJfb3BzOwogCi0vKiBOb24temVybyBpZiB3ZSdyZSB1c2luZyB0 aGlzIG1vZHVsZSdzIHRhcmdldCB2ZWN0b3IuICAqLwotc3RhdGljIGludCB1 c2luZ190aHJlYWRfZGI7CisvKiBIYW5kbGUgZnJvbSBkbG9wZW4gZm9yIGxp YnRocmVhZF9kYi5zby4gIE5vdCBOVUxMIGlmIHdlJ3JlIHVzaW5nIHRoaXMK KyAgIG1vZHVsZSdzIHRhcmdldCB2ZWN0b3IuICAqLworc3RhdGljIHZvaWQg KnRocmVhZF9kYl9oYW5kbGU7CiAKIC8qIE5vbi16ZXJvIGlmIHdlIGhhdmUg ZGV0ZXJtaW5lZCB0aGUgc2lnbmFscyB1c2VkIGJ5IHRoZSB0aHJlYWRzCiAg ICBsaWJyYXJ5LiAgKi8KQEAgLTE0Myw2ICsxNDUsOSBAQCBzdGF0aWMgdm9p ZCB0aHJlYWRfZGJfZmluZF9uZXdfdGhyZWFkc18xCiBzdGF0aWMgdm9pZCBh dHRhY2hfdGhyZWFkIChwdGlkX3QgcHRpZCwgY29uc3QgdGRfdGhyaGFuZGxl X3QgKnRoX3AsCiAJCQkgICBjb25zdCB0ZF90aHJpbmZvX3QgKnRpX3ApOwog c3RhdGljIHZvaWQgZGV0YWNoX3RocmVhZCAocHRpZF90IHB0aWQpOworc3Rh dGljIHRkX2Vycl9lIGVuYWJsZV90aHJlYWRfZXZlbnQgKHRkX3RocmFnZW50 X3QgKnRocmVhZF9hZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZXZlbnQsIENPUkVfQUREUiAqYnApOworc3RhdGlj IHZvaWQgZW5hYmxlX3RocmVhZF9ldmVudF9yZXBvcnRpbmcgKHZvaWQpOwog DAogCiAvKiBVc2UgInN0cnVjdCBwcml2YXRlX3RocmVhZF9pbmZvIiB0byBj YWNoZSB0aHJlYWQgc3RhdGUuICBUaGlzIGlzCkBAIC0zNDQsNyArMzQ5LDcg QEAgdGhyZWFkX2RiX2F0dGFjaF9sd3AgKHB0aWRfdCBwdGlkKQogICB0ZF90 aHJpbmZvX3QgdGk7CiAgIHRkX2Vycl9lIGVycjsKIAotICBpZiAoIXVzaW5n X3RocmVhZF9kYikKKyAgaWYgKHRocmVhZF9kYl9oYW5kbGUgPT0gTlVMTCkK ICAgICByZXR1cm4gMDsKIAogICAvKiBUaGlzIHB0aWQgY29tZXMgZnJvbSBs aW51eC1uYXQuYywgd2hpY2ggc2hvdWxkIGFsd2F5cyBmaWxsIGluIHRoZQpA QCAtMzg1LDIyICszOTAsMTcgQEAgdmVyYm9zZV9kbHN5bSAodm9pZCAqaGFu ZGxlLCBjb25zdCBjaGFyIAogICByZXR1cm4gc3ltOwogfQogCisvKiBBdHRl bXB0IHRvIGluaXRpYWxpemUgZGxvcGVuKCllZCBsaWJ0aHJlYWRfZGIsIGRl c2NyaWJlZCBieSBIQU5ETEUuCisgICBSZXR1cm4gMSBvbiBzdWNjZXNzLgor ICAgRmFpbHVyZSBjb3VsZCBoYXBwZW4gaWYgbGlidGhyZWFkX2RiIGRvZXMg bm90IGhhdmUgc3ltYm9scyB3ZSBleHBlY3QsCisgICBvciB3aGVuIGl0IHJl ZnVzZXMgdG8gd29yayB3aXRoIHRoZSBjdXJyZW50IGluZmVyaW9yIChlLmcu IGR1ZSB0bworICAgdmVyc2lvbiBtaXNtYXRjaCBiZXR3ZWVuIGxpYnRocmVh ZF9kYiBhbmQgbGlicHRocmVhZCkuICAqLworCiBzdGF0aWMgaW50Ci10aHJl YWRfZGJfbG9hZCAodm9pZCkKK3RyeV90aHJlYWRfZGJfbG9hZF8xKHZvaWQg KmhhbmRsZSkKIHsKLSAgdm9pZCAqaGFuZGxlOwogICB0ZF9lcnJfZSBlcnI7 CiAKLSAgaGFuZGxlID0gZGxvcGVuIChMSUJUSFJFQURfREJfU08sIFJUTERf Tk9XKTsKLSAgaWYgKGhhbmRsZSA9PSBOVUxMKQotICAgIHsKLSAgICAgIGZw cmludGZfZmlsdGVyZWQgKGdkYl9zdGRlcnIsICJcblxuZGxvcGVuIGZhaWxl ZCBvbiAnJXMnIC0gJXNcbiIsCi0JCQlMSUJUSFJFQURfREJfU08sIGRsZXJy b3IgKCkpOwotICAgICAgZnByaW50Zl9maWx0ZXJlZCAoZ2RiX3N0ZGVyciwK LQkJCSJHREIgd2lsbCBub3QgYmUgYWJsZSB0byBkZWJ1ZyBwdGhyZWFkcy5c blxuIik7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgLyogSW5pdGlh bGl6ZSBwb2ludGVycyB0byB0aGUgZHluYW1pYyBsaWJyYXJ5IGZ1bmN0aW9u cyB3ZSB3aWxsIHVzZS4KICAgICAgRXNzZW50aWFsIGZ1bmN0aW9ucyBmaXJz dC4gICovCiAKQEAgLTQwOCwxMCArNDA4LDQ1IEBAIHRocmVhZF9kYl9sb2Fk ICh2b2lkKQogICBpZiAodGRfaW5pdF9wID09IE5VTEwpCiAgICAgcmV0dXJu IDA7CiAKKyAgZXJyID0gdGRfaW5pdF9wICgpOworICBpZiAoZXJyICE9IFRE X09LKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKF8oIkNhbm5vdCBpbml0aWFs aXplIGxpYnRocmVhZF9kYjogJXMiKSwgdGhyZWFkX2RiX2Vycl9zdHIgKGVy cikpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgIHRkX3RhX25ld19w ID0gdmVyYm9zZV9kbHN5bSAoaGFuZGxlLCAidGRfdGFfbmV3Iik7CiAgIGlm ICh0ZF90YV9uZXdfcCA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisgIC8q IEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhl IGNoaWxkIHByb2Nlc3MuICAqLworICBwcm9jX2hhbmRsZS5wdGlkID0gaW5m ZXJpb3JfcHRpZDsKKworICAvKiBOb3cgYXR0ZW1wdCB0byBvcGVuIGEgY29u bmVjdGlvbiB0byB0aGUgdGhyZWFkIGxpYnJhcnkuICAqLworICBlcnIgPSB0 ZF90YV9uZXdfcCAoJnByb2NfaGFuZGxlLCAmdGhyZWFkX2FnZW50KTsKKyAg aWYgKGVyciAhPSBURF9PSykKKyAgICB7CisgICAgICB0ZF90YV9uZXdfcCA9 IE5VTEw7CisgICAgICBpZiAoaW5mb192ZXJib3NlKQorCXByaW50Zl91bmZp bHRlcmVkIChfKCJ0ZF90YV9uZXcgZmFpbGVkOiAlc1xuIiksCisJCQkgICB0 aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgICAgICBlbHNlCisgICAgICAg IHN3aXRjaCAoZXJyKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Ug VERfTk9MSUJUSFJFQUQ6CisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9WRVJT SU9OCisgICAgICAgICAgICBjYXNlIFREX1ZFUlNJT046CisjZW5kaWYKKyAg ICAgICAgICAgICAgLyogVGhlIGVycm9ycyBhYm92ZSBhcmUgbm90IHVuZXhw ZWN0ZWQgYW5kIHNpbGVudGx5IGlnbm9yZWQ6CisgICAgICAgICAgICAgICAg IHRoZXkganVzdCBtZWFuIHdlIGhhdmVuJ3QgZm91bmQgY29ycmVjdCB2ZXJz aW9uIG9mCisgICAgICAgICAgICAgICAgIGxpYnRocmVhZF9kYiB5ZXQuICAq LworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICAgIHdhcm5pbmcgKF8oInRkX3RhX25ldyBmYWlsZWQ6 ICVzIiksIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKKyAgICAgICAgICB9 CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgdGRfdGFfbWFwX2lkMnRo cl9wID0gdmVyYm9zZV9kbHN5bSAoaGFuZGxlLCAidGRfdGFfbWFwX2lkMnRo ciIpOwogICBpZiAodGRfdGFfbWFwX2lkMnRocl9wID09IE5VTEwpCiAgICAg cmV0dXJuIDA7CkBAIC00MzIsMTQgKzQ2Nyw2IEBAIHRocmVhZF9kYl9sb2Fk ICh2b2lkKQogICBpZiAodGRfdGhyX2dldF9pbmZvX3AgPT0gTlVMTCkKICAg ICByZXR1cm4gMDsKIAotICAvKiBJbml0aWFsaXplIHRoZSBsaWJyYXJ5LiAg Ki8KLSAgZXJyID0gdGRfaW5pdF9wICgpOwotICBpZiAoZXJyICE9IFREX09L KQotICAgIHsKLSAgICAgIHdhcm5pbmcgKF8oIkNhbm5vdCBpbml0aWFsaXpl IGxpYnRocmVhZF9kYjogJXMiKSwgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikp OwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgIC8qIFRoZXNlIGFyZSBu b3QgZXNzZW50aWFsLiAgKi8KICAgdGRfdGFfZXZlbnRfYWRkcl9wID0gZGxz eW0gKGhhbmRsZSwgInRkX3RhX2V2ZW50X2FkZHIiKTsKICAgdGRfdGFfc2V0 X2V2ZW50X3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGFfc2V0X2V2ZW50Iik7 CkBAIC00NDcsOSArNDc0LDE5MSBAQCB0aHJlYWRfZGJfbG9hZCAodm9pZCkK ICAgdGRfdGhyX2V2ZW50X2VuYWJsZV9wID0gZGxzeW0gKGhhbmRsZSwgInRk X3Rocl9ldmVudF9lbmFibGUiKTsKICAgdGRfdGhyX3Rsc19nZXRfYWRkcl9w ID0gZGxzeW0gKGhhbmRsZSwgInRkX3Rocl90bHNfZ2V0X2FkZHIiKTsKIAor ICBwcmludGZfdW5maWx0ZXJlZCAoXygiW1RocmVhZCBkZWJ1Z2dpbmcgdXNp bmcgbGlidGhyZWFkX2RiIGVuYWJsZWRdXG4iKSk7CisKKyAgLyogVGhlIHRo cmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3RlZC4gIEFjdGl2YXRlIHRoZSB0aHJl YWRfZGIgdGFyZ2V0LiAgKi8KKyAgcHVzaF90YXJnZXQgKCZ0aHJlYWRfZGJf b3BzKTsKKyAgdGhyZWFkX2RiX2hhbmRsZSA9IGhhbmRsZTsKKworICBlbmFi bGVfdGhyZWFkX2V2ZW50X3JlcG9ydGluZyAoKTsKKyAgdGhyZWFkX2RiX2Zp bmRfbmV3X3RocmVhZHNfMSAoKTsKICAgcmV0dXJuIDE7CiB9CiAKKy8qIExv b2t1cCBhIGxpYnJhcnkgaW4gd2hpY2ggZ2l2ZW4gc3ltYm9sIHJlc2lkZXMu CisgICBOb3RlOiB0aGlzIGlzIGxvb2tpbmcgaW4gR0RCIHByb2Nlc3MsIG5v dCBpbiB0aGUgaW5mZXJpb3IuCisgICBSZXR1cm5zIGxpYnJhcnkgbmFtZSwg b3IgTlVMTC4gICovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RsYWRkcl90 b19zb25hbWUgKGNvbnN0IHZvaWQgKmFkZHIpCit7CisgIERsX2luZm8gaW5m bzsKKworICBpZiAoZGxhZGRyIChhZGRyLCAmaW5mbykgIT0gMCkKKyAgICBy ZXR1cm4gaW5mby5kbGlfZm5hbWU7CisgIHJldHVybiBOVUxMOworfQorCisv KiBBdHRlbXB0IHRvIHVzZSBMSUJSQVJZIGFzIGxpYnRocmVhZF9kYi4gIExJ QlJBUlkgY291bGQgYmUgYWJzb2x1dGUsCisgICByZWxhdGl2ZSwgb3IganVz dCBMSUJUSFJFQURfREIuICAqLworCitzdGF0aWMgaW50Cit0cnlfdGhyZWFk X2RiX2xvYWQgKGNvbnN0IGNoYXIgKmxpYnJhcnkpCit7CisgIHZvaWQgKmhh bmRsZTsKKworICBpZiAoaW5mb192ZXJib3NlKQorICAgIHByaW50Zl91bmZp bHRlcmVkIChfKCJUcnlpbmcgaG9zdCBsaWJ0aHJlYWRfZGIgbGlicmFyeTog JXMuXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeSk7Cisg IGhhbmRsZSA9IGRsb3BlbiAobGlicmFyeSwgUlRMRF9OT1cpOworICBpZiAo aGFuZGxlID09IE5VTEwpCisgICAgeworICAgICAgaWYgKGluZm9fdmVyYm9z ZSkKKwlwcmludGZfdW5maWx0ZXJlZCAoXygiZGxvcGVuIGZhaWxlZDogJXMu XG4iKSwgZGxlcnJvciAoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisK KyAgaWYgKGluZm9fdmVyYm9zZSAmJiBzdHJjaHIobGlicmFyeSwgJy8nKSA9 PSBOVUxMKQorICAgIHsKKyAgICAgIHZvaWQgKnRkX2luaXQ7CisKKyAgICAg IHRkX2luaXQgPSBkbHN5bSAoaGFuZGxlLCAidGRfaW5pdCIpOworICAgICAg aWYgKHRkX2luaXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGNv bnN0IGNoYXIgKmNvbnN0IGxpYnBhdGggPSBkbGFkZHJfdG9fc29uYW1lICh0 ZF9pbml0KTsKKworICAgICAgICAgIGlmIChsaWJwYXRoICE9IE5VTEwpCisg ICAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiSG9zdCAlcyByZXNv bHZlZCB0bzogJXMuXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJyYXJ5LCBsaWJwYXRoKTsKKyAgICAgICAgfQorICAgIH0KKwor ICBpZiAodHJ5X3RocmVhZF9kYl9sb2FkXzEgKGhhbmRsZSkpCisgICAgcmV0 dXJuIDE7CisKKyAgLyogVGhpcyBsaWJyYXJ5ICJyZWZ1c2VkIiB0byB3b3Jr IG9uIGN1cnJlbnQgaW5mZXJpb3IuICAqLworICBkbGNsb3NlIChoYW5kbGUp OworICByZXR1cm4gMDsKK30KKworCisvKiBTZWFyY2ggbGlidGhyZWFkX2Ri X3NlYXJjaF9wYXRoIGZvciBsaWJ0aHJlYWRfZGIgd2hpY2ggImFncmVlcyIK KyAgIHRvIHdvcmsgb24gY3VycmVudCBpbmZlcmlvci4gICovCisKK3N0YXRp YyBpbnQKK3RocmVhZF9kYl9sb2FkX3NlYXJjaCAoKQoreworICBjaGFyIHBh dGhbUEFUSF9NQVhdOworICBjb25zdCBjaGFyICpzZWFyY2hfcGF0aCA9IGxp YnRocmVhZF9kYl9zZWFyY2hfcGF0aDsKKyAgaW50IHJjID0gMDsKKworICB3 aGlsZSAoKnNlYXJjaF9wYXRoKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIg KmVuZCA9IHN0cmNociAoc2VhcmNoX3BhdGgsICc6Jyk7CisgICAgICBpZiAo ZW5kKQorCXsKKwkgIHNpemVfdCBsZW4gPSBlbmQgLSBzZWFyY2hfcGF0aDsK KyAgICAgICAgICBpZiAobGVuICsgMSArIHN0cmxlbiAoTElCVEhSRUFEX0RC X1NPKSArIDEgPiBzaXplb2YgKHBhdGgpKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBjaGFyICpjcCA9IHhtYWxsb2MgKGxlbiArIDEpOworICAg ICAgICAgICAgICBtZW1jcHkgKGNwLCBzZWFyY2hfcGF0aCwgbGVuKTsKKyAg ICAgICAgICAgICAgY3BbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgIHdh cm5pbmcgKF8oImxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCBjb21wb25lbnQg dG9vIGxvbmcsIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgaWdub3Jl ZDogJXMuIiksIGNwKTsKKyAgICAgICAgICAgICAgeGZyZWUgKGNwKTsKKyAg ICAgICAgICAgICAgc2VhcmNoX3BhdGggKz0gbGVuICsgMTsKKyAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisJICBtZW1jcHkgKHBh dGgsIHNlYXJjaF9wYXRoLCBsZW4pOworCSAgcGF0aFtsZW5dID0gJ1wwJzsK KwkgIHNlYXJjaF9wYXRoICs9IGxlbiArIDE7CisJfQorICAgICAgZWxzZQor CXsKKyAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChzZWFyY2hfcGF0 aCk7CisKKyAgICAgICAgICBpZiAobGVuICsgMSArIHN0cmxlbiAoTElCVEhS RUFEX0RCX1NPKSArIDEgPiBzaXplb2YgKHBhdGgpKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICB3YXJuaW5nIChfKCJsaWJ0aHJlYWRfZGJfc2Vh cmNoX3BhdGggY29tcG9uZW50IHRvbyBsb25nLCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiIGlnbm9yZWQ6ICVzLiIpLCBzZWFyY2hfcGF0aCk7Cisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCSAgbWVtY3B5 IChwYXRoLCBzZWFyY2hfcGF0aCwgbGVuICsgMSk7CisJICBzZWFyY2hfcGF0 aCArPSBsZW47CisJfQorICAgICAgc3RyY2F0IChwYXRoLCAiLyIpOworICAg ICAgc3RyY2F0IChwYXRoLCBMSUJUSFJFQURfREJfU08pOworICAgICAgaWYg KHRyeV90aHJlYWRfZGJfbG9hZCAocGF0aCkpCisJeworCSAgcmMgPSAxOwor CSAgYnJlYWs7CisJfQorICAgIH0KKyAgaWYgKHJjID09IDApCisgICAgcmMg PSB0cnlfdGhyZWFkX2RiX2xvYWQgKExJQlRIUkVBRF9EQl9TTyk7CisgIGlm IChyYyA9PSAwKQorICAgIHdhcm5pbmcgKF8oIlVuYWJsZSB0byBmaW5kIGxp YnRocmVhZF9kYiBtYXRjaGluZyBpbmZlcmlvcidzIHRocmVhZCIKKyAgICAg ICAgICAgICAgICIgbGlicmFyeSwgdGhyZWFkIGRlYnVnZ2luZyB3aWxsIG5v dCBiZSBhdmFpbGFibGUuIikpOworICByZXR1cm4gcmM7Cit9CisKKy8qIEF0 dGVtcHQgdG8gbG9hZCBhbmQgaW5pdGlhbGl6ZSBsaWJ0aHJlYWRfZGIuCisg ICBSZXR1cm4gMSBvbiBzdWNjZXNzLgorICovCisKK3N0YXRpYyBpbnQKK3Ro cmVhZF9kYl9sb2FkICh2b2lkKQoreworICBjb25zdCBjaGFyICpzb25hbWU7 CisgIHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAqbXN5bTsKKworICBpZiAodGhy ZWFkX2RiX2hhbmRsZSAhPSBOVUxMKQorICAgIHJldHVybiAxOworCisgIC8q IERvbid0IGF0dGVtcHQgdG8gdXNlIHRocmVhZF9kYiBvbiB0YXJnZXRzIHdo aWNoIGNhbiBub3QgcnVuCisgICAgIChleGVjdXRhYmxlcyBub3QgcnVubmlu ZyB5ZXQsIGNvcmUgZmlsZXMpIGZvciBub3cuICAqLworICBpZiAoIXRhcmdl dF9oYXNfZXhlY3V0aW9uKQorICAgIHJldHVybiAwOworCisgIC8qIERvbid0 IGF0dGVtcHQgdG8gdXNlIHRocmVhZF9kYiBmb3IgcmVtb3RlIHRhcmdldHMu ICAqLworICBpZiAoIXRhcmdldF9jYW5fcnVuICgmY3VycmVudF90YXJnZXQp KQorICAgIHJldHVybiAwOworCisgIG1zeW0gPSBsb29rdXBfbWluaW1hbF9z eW1ib2wgKCJucHRsX3ZlcnNpb24iLCBOVUxMLCBOVUxMKTsKKyAgaWYgKCFt c3ltKQorICAgIG1zeW0gPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKCJfX2xp bnV4dGhyZWFkc192ZXJzaW9uIiwgTlVMTCwgTlVMTCk7CisKKyAgLyogU29t ZSByZWFsbHkgb2xkIGxpYnB0aHJlYWQgdmVyc2lvbnMgZG8gbm90IGhhdmUg ZWl0aGVyIG9mIHRoZSBhYm92ZS4gICovCisgIGlmICghbXN5bSkKKyAgICBt c3ltID0gbG9va3VwX21pbmltYWxfc3ltYm9sICgiX19wdGhyZWFkX3RocmVh ZHNfZXZlbnRzIiwgTlVMTCwgTlVMTCk7CisKKyAgaWYgKCFtc3ltKQorICAg IC8qIE5vIHRocmVhZHMgeWV0ICovCisgICAgcmV0dXJuIDA7CisKKyAgc29u YW1lID0gc29saWJfbmFtZV9mcm9tX2FkZHJlc3MgKFNZTUJPTF9WQUxVRV9B RERSRVNTIChtc3ltKSk7CisgIGlmIChzb25hbWUpCisgICAgeworICAgICAg LyogQXR0ZW1wdCB0byBsb2FkIGxpYnRocmVhZF9kYiBmcm9tIHRoZSBzYW1l IGRpcmVjdG9yeS4gKi8KKyAgICAgIGNoYXIgcGF0aFtQQVRIX01BWF0sICpj cDsKKyAgICAgIHN0cmNweSAocGF0aCwgc29uYW1lKTsKKyAgICAgIGNwID0g c3RycmNociAocGF0aCwgJy8nKTsKKyAgICAgIGlmIChjcCA9PSBOVUxMKQor CXsKKwkgIC8qIEV4cGVjdGVkIHRvIGdldCBmdWxseSByZXNvbHZlZCBwYXRo bmFtZSBmb3IgbGlicHRocmVhZCwKKyAgICAgICAgICAgICBidXQgZ290IHNv bWV0aGluZyBlbHNlLiAgU2VhcmNoIGZvciBtYXRjaGluZyBsaWJ0aHJlYWRf ZGIgYW5kCisgICAgICAgICAgICAgaG9wZSB0aGVyZSBpcyBvbmUgdGhhdCBt YXRjaGVzIGN1cnJlbnQgbGlicHRocmVhZC4gICovCisJICB3YXJuaW5nIChf KCJDYW5ub3Qgb2J0YWluIGFic29sdXRlIHBhdGggb2YgdGhyZWFkIGxpYnJh cnk6ICVzLiIpLAorICAgICAgICAgICAgICAgICAgIHNvbmFtZSk7CisJICBy ZXR1cm4gdGhyZWFkX2RiX2xvYWRfc2VhcmNoICgpOworCX0KKyAgICAgIHN0 cmNweSAoY3AgKyAxLCBMSUJUSFJFQURfREJfU08pOworICAgICAgaWYgKHRy eV90aHJlYWRfZGJfbG9hZCAocGF0aCkpCisJcmV0dXJuIDE7CisgICAgfQor ICByZXR1cm4gdGhyZWFkX2RiX2xvYWRfc2VhcmNoICgpOworfQorCiBzdGF0 aWMgdGRfZXJyX2UKIGVuYWJsZV90aHJlYWRfZXZlbnQgKHRkX3RocmFnZW50 X3QgKnRocmVhZF9hZ2VudCwgaW50IGV2ZW50LCBDT1JFX0FERFIgKmJwKQog ewpAQCAtNTkzLDc1ICs4MDIsMzQgQEAgdm9pZAogY2hlY2tfZm9yX3RocmVh ZF9kYiAodm9pZCkKIHsKICAgdGRfZXJyX2UgZXJyOwotICBzdGF0aWMgaW50 IGFscmVhZHlfbG9hZGVkOworICBzdGF0aWMgdm9pZCAqbGFzdF9sb2FkZWQ7 CiAKICAgLyogRG8gbm90aGluZyBpZiB3ZSBjb3VsZG4ndCBsb2FkIGxpYnRo cmVhZF9kYi5zby4xLiAgKi8KLSAgaWYgKHRkX3RhX25ld19wID09IE5VTEwp CisgIGlmICghdGhyZWFkX2RiX2xvYWQgKCkpCiAgICAgcmV0dXJuOwogCiAg IC8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgcmVwb3J0IHRoYXQgbGlidGhyZWFk X2RiIHdhcyBzdWNjZXNzZnVseQogICAgICBsb2FkZWQuICBDYW4ndCBwcmlu dCB0aGlzIGluIGluIHRocmVhZF9kYl9sb2FkIGFzLCBhdCB0aGF0IHN0YWdl LAotICAgICB0aGUgaW50ZXJwcmV0ZXIgYW5kIGl0J3MgY29uc29sZSBoYXZl bid0IHN0YXJ0ZWQuICAqLworICAgICB0aGUgaW50ZXJwcmV0ZXIgYW5kIGl0 J3MgY29uc29sZSBoYXZlbid0IHN0YXJ0ZWQuCisgICAgIFdlIHRyYWNrIHRk X3RhX25ld19wIGJlY2F1c2UgdGhlIHVzZXIgbWF5IHN3aXRjaCBleGVjdXRh YmxlcywKKyAgICAgYW5kIGFzIGEgcmVzdWx0IHdlIG1heSBkZWNpZGUgdG8g dXNlIGEgZGlmZmVyZW50IHZlcnNpb24gb2YKKyAgICAgbGlidGhyZWFkX2Ri LiAqLwogCi0gIGlmICghYWxyZWFkeV9sb2FkZWQpCisgIGlmIChsYXN0X2xv YWRlZCAhPSB0ZF90YV9uZXdfcCkKICAgICB7Ci0gICAgICBEbF9pbmZvIGlu Zm87Ci0gICAgICBjb25zdCBjaGFyICpsaWJyYXJ5ID0gTlVMTDsKLSAgICAg IGlmIChkbGFkZHIgKCgqdGRfdGFfbmV3X3ApLCAmaW5mbykgIT0gMCkKLQls aWJyYXJ5ID0gaW5mby5kbGlfZm5hbWU7Ci0KLSAgICAgIC8qIFRyeSBkbGlu Zm8/ICAqLwotCi0gICAgICBpZiAobGlicmFyeSA9PSBOVUxMKQotCS8qIFBh cmFub2lkIC0gZG9uJ3QgbGV0IGEgTlVMTCBwYXRoIHNsaXAgdGhyb3VnaC4g ICovCi0JbGlicmFyeSA9IExJQlRIUkVBRF9EQl9TTzsKKyAgICAgIGxhc3Rf bG9hZGVkID0gdGRfdGFfbmV3X3A7CiAKICAgICAgIGlmIChpbmZvX3ZlcmJv c2UpCi0JcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlVzaW5nIGhvc3QgbGlidGhy ZWFkX2RiIGxpYnJhcnkgXCIlc1wiLlxuIiksCi0JCQkgICBsaWJyYXJ5KTsK LSAgICAgIGFscmVhZHlfbG9hZGVkID0gMTsKLSAgICB9Ci0KLSAgaWYgKHVz aW5nX3RocmVhZF9kYikKLSAgICAvKiBOb3RoaW5nIHRvIGRvLiAgVGhlIHRo cmVhZCBsaWJyYXJ5IHdhcyBhbHJlYWR5IGRldGVjdGVkIGFuZCB0aGUKLSAg ICAgICB0YXJnZXQgdmVjdG9yIHdhcyBhbHJlYWR5IGFjdGl2YXRlZC4gICov Ci0gICAgcmV0dXJuOwotCi0gIC8qIERvbid0IGF0dGVtcHQgdG8gdXNlIHRo cmVhZF9kYiBvbiB0YXJnZXRzIHdoaWNoIGNhbiBub3QgcnVuCi0gICAgIChl eGVjdXRhYmxlcyBub3QgcnVubmluZyB5ZXQsIGNvcmUgZmlsZXMpIGZvciBu b3cuICAqLwotICBpZiAoIXRhcmdldF9oYXNfZXhlY3V0aW9uKQotICAgIHJl dHVybjsKLQotICAvKiBEb24ndCBhdHRlbXB0IHRvIHVzZSB0aHJlYWRfZGIg Zm9yIHJlbW90ZSB0YXJnZXRzLiAgKi8KLSAgaWYgKCF0YXJnZXRfY2FuX3J1 biAoJmN1cnJlbnRfdGFyZ2V0KSkKLSAgICByZXR1cm47Ci0KLSAgLyogSW5p dGlhbGl6ZSB0aGUgc3RydWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUgY2hp bGQgcHJvY2Vzcy4gICovCi0gIHByb2NfaGFuZGxlLnB0aWQgPSBpbmZlcmlv cl9wdGlkOwotCi0gIC8qIE5vdyBhdHRlbXB0IHRvIG9wZW4gYSBjb25uZWN0 aW9uIHRvIHRoZSB0aHJlYWQgbGlicmFyeS4gICovCi0gIGVyciA9IHRkX3Rh X25ld19wICgmcHJvY19oYW5kbGUsICZ0aHJlYWRfYWdlbnQpOwotICBzd2l0 Y2ggKGVycikKLSAgICB7Ci0gICAgY2FzZSBURF9OT0xJQlRIUkVBRDoKLSAg ICAgIC8qIE5vIHRocmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3RlZC4gICovCi0g ICAgICBicmVhazsKLQotICAgIGNhc2UgVERfT0s6Ci0gICAgICBwcmludGZf dW5maWx0ZXJlZCAoXygiW1RocmVhZCBkZWJ1Z2dpbmcgdXNpbmcgbGlidGhy ZWFkX2RiIGVuYWJsZWRdXG4iKSk7Ci0KLSAgICAgIC8qIFRoZSB0aHJlYWQg bGlicmFyeSB3YXMgZGV0ZWN0ZWQuICBBY3RpdmF0ZSB0aGUgdGhyZWFkX2Ri IHRhcmdldC4gICovCi0gICAgICBwdXNoX3RhcmdldCAoJnRocmVhZF9kYl9v cHMpOwotICAgICAgdXNpbmdfdGhyZWFkX2RiID0gMTsKKyAgICAgICAgewor ICAgICAgICAgIGNvbnN0IGNoYXIgKmxpYnJhcnk7CiAKLSAgICAgIGVuYWJs ZV90aHJlYWRfZXZlbnRfcmVwb3J0aW5nICgpOwotICAgICAgdGhyZWFkX2Ri X2ZpbmRfbmV3X3RocmVhZHNfMSAoKTsKLSAgICAgIGJyZWFrOwotCi0gICAg ZGVmYXVsdDoKLSAgICAgIHdhcm5pbmcgKF8oIkNhbm5vdCBpbml0aWFsaXpl IHRocmVhZCBkZWJ1Z2dpbmcgbGlicmFyeTogJXMiKSwKLQkgICAgICAgdGhy ZWFkX2RiX2Vycl9zdHIgKGVycikpOwotICAgICAgYnJlYWs7CisgICAgICAg ICAgbGlicmFyeSA9IGRsYWRkcl90b19zb25hbWUgKCp0ZF90YV9uZXdfcCk7 CisgICAgICAgICAgaWYgKGxpYnJhcnkgPT0gTlVMTCkKKyAgICAgICAgICAg IGxpYnJhcnkgPSBMSUJUSFJFQURfREJfU087CisKKyAgICAgICAgICBwcmlu dGZfdW5maWx0ZXJlZCAoXygiVXNpbmcgaG9zdCBsaWJ0aHJlYWRfZGIgbGli cmFyeSBcIiVzXCIuXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlicmFyeSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTc4Myw3 ICs5NTEsOSBAQCB0aHJlYWRfZGJfZGV0YWNoIChzdHJ1Y3QgdGFyZ2V0X29w cyAqb3BzCiAKICAgLyogRGV0YWNoIHRocmVhZF9kYiB0YXJnZXQgb3BzLiAg Ki8KICAgdW5wdXNoX3RhcmdldCAoJnRocmVhZF9kYl9vcHMpOwotICB1c2lu Z190aHJlYWRfZGIgPSAwOworICBpZiAodGhyZWFkX2RiX2hhbmRsZSkKKyAg ICBkbGNsb3NlICh0aHJlYWRfZGJfaGFuZGxlKTsKKyAgdGhyZWFkX2RiX2hh bmRsZSA9IE5VTEw7CiAKICAgdGFyZ2V0X2JlbmVhdGgtPnRvX2RldGFjaCAo dGFyZ2V0X2JlbmVhdGgsIGFyZ3MsIGZyb21fdHR5KTsKIH0KQEAgLTg5Niw3 ICsxMDY2LDkgQEAgdGhyZWFkX2RiX3dhaXQgKHN0cnVjdCB0YXJnZXRfb3Bz ICpvcHMsCiAgICAgewogICAgICAgcmVtb3ZlX3RocmVhZF9ldmVudF9icmVh a3BvaW50cyAoKTsKICAgICAgIHVucHVzaF90YXJnZXQgKCZ0aHJlYWRfZGJf b3BzKTsKLSAgICAgIHVzaW5nX3RocmVhZF9kYiA9IDA7CisgICAgICBpZiAo dGhyZWFkX2RiX2hhbmRsZSkKKwlkbGNsb3NlICh0aHJlYWRfZGJfaGFuZGxl KTsKKyAgICAgIHRocmVhZF9kYl9oYW5kbGUgPSBOVUxMOwogCiAgICAgICBy ZXR1cm4gcHRpZDsKICAgICB9CkBAIC05NDQsNyArMTExNiw5IEBAIHRocmVh ZF9kYl9tb3Vybl9pbmZlcmlvciAoc3RydWN0IHRhcmdldF8KIAogICAvKiBE ZXRhY2ggdGhyZWFkX2RiIHRhcmdldCBvcHMuICAqLwogICB1bnB1c2hfdGFy Z2V0IChvcHMpOwotICB1c2luZ190aHJlYWRfZGIgPSAwOworICBpZiAodGhy ZWFkX2RiX2hhbmRsZSkKKyAgICBkbGNsb3NlICh0aHJlYWRfZGJfaGFuZGxl KTsKKyAgdGhyZWFkX2RiX2hhbmRsZSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBp bnQKQEAgLTExODcsMTMgKzEzNjEsMjcgQEAgZXh0ZXJuIGluaXRpYWxpemVf ZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZQogdm9pZAogX2luaXRpYWxpemVfdGhy ZWFkX2RiICh2b2lkKQogewotICAvKiBPbmx5IGluaXRpYWxpemUgdGhlIG1v ZHVsZSBpZiB3ZSBjYW4gbG9hZCBsaWJ0aHJlYWRfZGIuICAqLwotICBpZiAo dGhyZWFkX2RiX2xvYWQgKCkpCi0gICAgewotICAgICAgaW5pdF90aHJlYWRf ZGJfb3BzICgpOwotICAgICAgYWRkX3RhcmdldCAoJnRocmVhZF9kYl9vcHMp OworICBpbml0X3RocmVhZF9kYl9vcHMgKCk7CisgIGFkZF90YXJnZXQgKCZ0 aHJlYWRfZGJfb3BzKTsKIAotICAgICAgLyogQWRkIG91cnNlbHZlcyB0byBv YmpmaWxlIGV2ZW50IGNoYWluLiAgKi8KLSAgICAgIG9ic2VydmVyX2F0dGFj aF9uZXdfb2JqZmlsZSAodGhyZWFkX2RiX25ld19vYmpmaWxlKTsKLSAgICB9 CisgIC8qIERlZmVyIGxvYWRpbmcgb2YgbGlidGhyZWFkX2RiLnNvIHVudGls IGluZmVyaW9yIGlzIHJ1bm5pbmcuCisgICAgIFRoaXMgYWxsb3dzIGdkYiB0 byBsb2FkIGNvcnJlY3QgbGlidGhyZWFkX2RiIGZvciBhIGdpdmVuCisgICAg IGV4ZWN1dGFibGUgLS0gdGhlcmUgY291bGQgYmUgbXV0aXBsZSB2ZXJzaW9u cyBvZiBnbGliYywKKyAgICAgY29tcGlsZWQgd2l0aCBMaW51eFRocmVhZHMg b3IgTlBUTCwgYW5kIHVudGlsIHRoZXJlIGlzCisgICAgIGEgcnVubmluZyBp bmZlcmlvciwgd2UgY2FuJ3QgdGVsbCB3aGljaCBsaWJ0aHJlYWRfZGIgaXMK KyAgICAgdGhlIGNvcnJlY3Qgb25lIHRvIGxvYWQuICovCisKKyAgbGlidGhy ZWFkX2RiX3NlYXJjaF9wYXRoID0geHN0cmR1cChMSUJUSFJFQURfREJfU0VB UkNIX1BBVEgpOworCisgIGFkZF9zZXRzaG93X2ZpbGVuYW1lX2NtZCAoImxp YnRocmVhZC1kYi1zZWFyY2gtcGF0aCIsIGNsYXNzX3N1cHBvcnQsCisJCQkg ICAgJmxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCwgXygiXAorU2V0IHNlYXJj aCBwYXRoIGZvciBsaWJ0aHJlYWRfZGIuIiksIF8oIlwKK1Nob3cgdGhlIGN1 cnJlbnQgc2VhcmNoIHBhdGggb3IgbGlidGhyZWFkX2RiLiIpLCBfKCJcCitU aGlzIHBhdGggaXMgdXNlZCB0byBzZWFyY2ggZm9yIGxpYnRocmVhZF9kYiB0 byBiZSBsb2FkZWQgaW50byBcCitnZGIgaXRzZWxmLiIpLAorCQkJICAgIE5V TEwsCisJCQkgICAgTlVMTCwKKwkJCSAgICAmc2V0bGlzdCwgJnNob3dsaXN0 KTsKKyAgLyogQWRkIG91cnNlbHZlcyB0byBvYmpmaWxlIGV2ZW50IGNoYWlu LiAgKi8KKyAgb2JzZXJ2ZXJfYXR0YWNoX25ld19vYmpmaWxlICh0aHJlYWRf ZGJfbmV3X29iamZpbGUpOwogfQo= --000e0cd2e2d20c0cc90467380ea7--