From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25341 invoked by alias); 9 Aug 2011 16:57:06 -0000 Received: (qmail 25331 invoked by uid 22791); 9 Aug 2011 16:57:04 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_CP,TW_XS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 09 Aug 2011 16:56:47 +0000 Received: from wpaz37.hot.corp.google.com (wpaz37.hot.corp.google.com [172.24.198.101]) by smtp-out.google.com with ESMTP id p79Guknv006754 for ; Tue, 9 Aug 2011 09:56:46 -0700 Received: from yxi13 (yxi13.prod.google.com [10.190.3.13]) by wpaz37.hot.corp.google.com with ESMTP id p79GsLGf012026 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Tue, 9 Aug 2011 09:56:45 -0700 Received: by yxi13 with SMTP id 13so152101yxi.26 for ; Tue, 09 Aug 2011 09:56:45 -0700 (PDT) Received: by 10.150.254.18 with SMTP id b18mr7272267ybi.373.1312909005301; Tue, 09 Aug 2011 09:56:45 -0700 (PDT) Received: by 10.150.254.18 with SMTP id b18mr7272259ybi.373.1312909005114; Tue, 09 Aug 2011 09:56:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.151.48.15 with HTTP; Tue, 9 Aug 2011 09:56:15 -0700 (PDT) In-Reply-To: <20110809090647.GA21388@host1.jankratochvil.net> References: <20110808210938.GA19337@host1.jankratochvil.net> <20110808213800.GA21915@host1.jankratochvil.net> <20110809090647.GA21388@host1.jankratochvil.net> From: Paul Pluzhnikov Date: Tue, 09 Aug 2011 16:57:00 -0000 Message-ID: Subject: Re: [patch] Implement qXfer:libraries for Linux/gdbserver To: Jan Kratochvil Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd35910df4ff404aa157234 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: 2011-08/txt/msg00204.txt.bz2 --000e0cd35910df4ff404aa157234 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 4209 On Tue, Aug 9, 2011 at 2:06 AM, Jan Kratochvil wrote: > On Tue, 09 Aug 2011 01:49:49 +0200, Paul Pluzhnikov wrote: >> --- gdbserver/linux-low.c =A0 =A0 21 Jul 2011 23:46:12 -0000 =A0 =A0 =A0= 1.173 >> +++ gdbserver/linux-low.c =A0 =A0 8 Aug 2011 23:34:10 -0000 >> @@ -4755,6 +4755,289 @@ linux_emit_ops (void) > [...] >> +static CORE_ADDR >> +get_dynamic (const int pid, const int is_elf64) >> +{ >> + =A0CORE_ADDR phdr_memaddr; >> + =A0int num_phdr, i; >> + =A0unsigned char *phdr_buf; >> + =A0const int phdr_size =3D is_elf64 ? sizeof (Elf64_Phdr) : sizeof (El= f32_Phdr); >> + >> + > > Two empty lines, should be one. Fixed here and elsewhere ... >> + =A0if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &n= um_phdr)) >> + =A0 =A0return 0; >> + >> + =A0gdb_assert (num_phdr < 100); =A0/* Basic sanity check. =A0*/ >> + =A0phdr_buf =3D alloca (num_phdr * phdr_size); >> + >> + =A0if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size= )) >> + =A0 =A0return 0; >> + >> + =A0for (i =3D 0; i < num_phdr; i++) >> + =A0 =A0{ >> + =A0 =A0 =A0if (is_elf64) >> + =A0 =A0 { >> + =A0 =A0 =A0 Elf64_Phdr *const p =3D (Elf64_Phdr *) (phdr_buf + i * phd= r_size); >> + >> + =A0 =A0 =A0 if (p->p_type =3D=3D PT_DYNAMIC) >> + =A0 =A0 =A0 =A0 return p->p_vaddr; > > This does not work for -fPIE -pie executables such as those on Chromebook. > One needs to relocate A_VAL as it is the in-file (0-based) address while > in-memory address is shifted by X. =A0X is calculated by solib-svr4.c > svr4_exec_displacement. > > One can find here X probably most easily by subtracting PT_PHDR->P_VADDR = from > PHDR_MEMADDR. Done. > > There is also a bug in it in solib-svr4.c scan_dyntag_auxv > =A0 =A0 =A0 =A0[rfc] Use auxillary vector to retrieve .dynamic/.interp se= ctions > =A0 =A0 =A0 =A0http://sourceware.org/ml/gdb-patches/2008-08/msg00360.html > but one would need to patch the code around to get the fix applicable fir= st. > > >> + =A0 =A0 } >> + =A0 =A0 =A0else >> + =A0 =A0 { >> + =A0 =A0 =A0 Elf32_Phdr *const p =3D (Elf32_Phdr *) (phdr_buf + i * phd= r_size); >> + >> + =A0 =A0 =A0 if (p->p_type =3D=3D PT_DYNAMIC) >> + =A0 =A0 =A0 =A0 return p->p_vaddr; > > Here too. Ditto. >> + =A0 =A0 =A0/* Not checking for error because reading may stop before >> + =A0 =A0 =A0we've got PATH_MAX worth of characters. =A0*/ >> + =A0 =A0 =A0libname[0] =3D '\0'; >> + =A0 =A0 =A0linux_read_memory (l_name, libname, sizeof (libname)); >> + =A0 =A0 =A0if (libname[0] !=3D '\0') >> + =A0 =A0 loaded_dll ((const char *) libname, l_addr); > > Unprotected against inferior string longer than PATH_MAX, this is a regre= ssion > against solib-svr4.c. Fixed. Side note: SO_NAME_MAX_PATH_SIZE =3D=3D 512 in solist.h is wrong for Linux; I am surprised this hasn't bitten anyone yet. Why doesn't it use PATH_MAX ? Thanks, --=20 Paul Pluzhnikov 2011-08-09 Paul Pluzhnikov * solib-svr4.c (library_list_start_segment): New function. (library_list_start_library, library_list_end_library): Likewise. (library_list_start_list): Likewise. (segment_attributes, library_children): New variables. (library_attributes, library_list_children): Likewise. (library_list_attributes, library_list_elements): Likewise. (svr4_free_so): Moved to here. (svr4_free_library_list, svr4_parse_libraries): New functions. (svr4_current_sos_via_xfer_libraries): Likewise. (svr4_current_sos): Adjust. gdbserver/ChangeLog: 2011-08-09 Paul Pluzhnikov Jan Kratochvil * inferiors.c (clear_all_dlls): New function. (clear_inferiors): Move there the code from here, call it here. * linux-low.c (linux_add_process): Adjust. (get_phdr_phnum_from_proc_auxv, get_dynamic): New functions. (get_r_debug, read_one_ptr): Likewise. (struct link_map_offsets): New struct decl. (linux_refresh_libraries): New function. (struct linux_target_ops): Adjust. (struct process_info_private): New member. (handle_qxfer_libraries): Adjust. (struct target_ops): New member. * server.c (handle_qxfer_libraries): Adjust. * server.h (clear_all_dlls): New prototype. * target.h (struct target_ops): New member. --000e0cd35910df4ff404aa157234 Content-Type: text/plain; charset=US-ASCII; name="gdb-solib-list-20110809.txt" Content-Disposition: attachment; filename="gdb-solib-list-20110809.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gr53y33c0 Content-length: 25047 SW5kZXg6IHNvbGliLXN2cjQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3NvbGliLXN2cjQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xNTMKZGlmZiAtdSAtcCAtcjEuMTUzIHNvbGli LXN2cjQuYwotLS0gc29saWItc3ZyNC5jCTkgQXVnIDIwMTEgMTI6NTE6NDcg LTAwMDAJMS4xNTMKKysrIHNvbGliLXN2cjQuYwk5IEF1ZyAyMDExIDE2OjUx OjM3IC0wMDAwCkBAIC0xMDYsNiArMTA2LDIwMSBAQCBzdGF0aWMgY29uc3Qg IGNoYXIgKiBjb25zdCBtYWluX25hbWVfbGlzCiAgIE5VTEwKIH07CiAKKwor I2lmIGRlZmluZWQoSEFWRV9MSUJFWFBBVCkKKworI2luY2x1ZGUgInhtbC1z dXBwb3J0LmgiCisKKy8qIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSA8c2VnbWVu dD4gZWxlbWVudC4gICovCisKK3N0YXRpYyB2b2lkCitsaWJyYXJ5X2xpc3Rf c3RhcnRfc2VnbWVudCAoc3RydWN0IGdkYl94bWxfcGFyc2VyICpwYXJzZXIs CisJCQkgICAgY29uc3Qgc3RydWN0IGdkYl94bWxfZWxlbWVudCAqZWxlbWVu dCwKKwkJCSAgICB2b2lkICp1c2VyX2RhdGEsIFZFQyhnZGJfeG1sX3ZhbHVl X3MpICphdHRyaWJ1dGVzKQoreworICBVTE9OR0VTVCAqYWRkcmVzc19wID0g eG1sX2ZpbmRfYXR0cmlidXRlIChhdHRyaWJ1dGVzLCAiYWRkcmVzcyIpLT52 YWx1ZTsKKyAgQ09SRV9BRERSIGFkZHJlc3MgPSAoQ09SRV9BRERSKSAqYWRk cmVzc19wOworICBzdHJ1Y3Qgc29fbGlzdCAqKnNvX2xpc3QgPSB1c2VyX2Rh dGE7CisKKyAgKCpzb19saXN0KS0+bG1faW5mby0+bF9hZGRyID0gYWRkcmVz czsKK30KKworLyogSGFuZGxlIHRoZSBzdGFydCBvZiBhIDxsaWJyYXJ5PiBl bGVtZW50LiAgTm90ZTogbmV3IGVsZW1lbnRzIGFyZSBhZGRlZAorICAgYXQg dGhlIGhlYWQgb2YgdGhlIGxpc3QgKGkuZS4gdGhlIGxpc3QgaXMgYnVpbHQg aW4gcmV2ZXJzZSBvcmRlcikuICAqLworCitzdGF0aWMgdm9pZAorbGlicmFy eV9saXN0X3N0YXJ0X2xpYnJhcnkgKHN0cnVjdCBnZGJfeG1sX3BhcnNlciAq cGFyc2VyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQg KmVsZW1lbnQsCisJCQkgICAgdm9pZCAqdXNlcl9kYXRhLCBWRUMoZ2RiX3ht bF92YWx1ZV9zKSAqYXR0cmlidXRlcykKK3sKKyAgY29uc3QgY2hhciAqbmFt ZSA9IHhtbF9maW5kX2F0dHJpYnV0ZSAoYXR0cmlidXRlcywgIm5hbWUiKS0+ dmFsdWU7CisgIHN0cnVjdCBzb19saXN0ICpuZXdfZWxlbSwgKipzb19saXN0 ID0gdXNlcl9kYXRhOworCisgIG5ld19lbGVtID0gWFpBTExPQyAoc3RydWN0 IHNvX2xpc3QpOworICBuZXdfZWxlbS0+bmV4dCA9ICpzb19saXN0OworICBu ZXdfZWxlbS0+bG1faW5mbyA9IFhaQUxMT0MgKHN0cnVjdCBsbV9pbmZvKTsK KyAgc3RyY3B5IChuZXdfZWxlbS0+c29fb3JpZ2luYWxfbmFtZSwgbmFtZSk7 CisgIHN0cmNweSAobmV3X2VsZW0tPnNvX25hbWUsIG5hbWUpOworCisgICpz b19saXN0ID0gbmV3X2VsZW07Cit9CisKK3N0YXRpYyB2b2lkCitsaWJyYXJ5 X2xpc3RfZW5kX2xpYnJhcnkgKHN0cnVjdCBnZGJfeG1sX3BhcnNlciAqcGFy c2VyLAorCQkJICBjb25zdCBzdHJ1Y3QgZ2RiX3htbF9lbGVtZW50ICplbGVt ZW50LAorCQkJICB2b2lkICp1c2VyX2RhdGEsIGNvbnN0IGNoYXIgKmJvZHlf dGV4dCkKK3sKKyAgc3RydWN0IHNvX2xpc3QgKipzb19saXN0ID0gdXNlcl9k YXRhOworCisgIGlmICgoKnNvX2xpc3QpLT5sbV9pbmZvLT5sX2FkZHIgPT0g MCkKKyAgICBnZGJfeG1sX2Vycm9yIChwYXJzZXIsIF8oIk5vIHNlZ21lbnQg ZGVmaW5lZCBmb3IgJXMiKSwKKwkJICAgKCpzb19saXN0KS0+c29fbmFtZSk7 Cit9CisKKworLyogSGFuZGxlIHRoZSBzdGFydCBvZiBhIDxsaWJyYXJ5LWxp c3Q+IGVsZW1lbnQuICAqLworCitzdGF0aWMgdm9pZAorbGlicmFyeV9saXN0 X3N0YXJ0X2xpc3QgKHN0cnVjdCBnZGJfeG1sX3BhcnNlciAqcGFyc2VyLAor CQkJIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgKmVsZW1lbnQsCisJ CQkgdm9pZCAqdXNlcl9kYXRhLCBWRUMoZ2RiX3htbF92YWx1ZV9zKSAqYXR0 cmlidXRlcykKK3sKKyAgY2hhciAqdmVyc2lvbiA9IHhtbF9maW5kX2F0dHJp YnV0ZSAoYXR0cmlidXRlcywgInZlcnNpb24iKS0+dmFsdWU7CisKKyAgaWYg KHN0cmNtcCAodmVyc2lvbiwgIjEuMCIpICE9IDApCisgICAgZ2RiX3htbF9l cnJvciAocGFyc2VyLAorCQkgICBfKCJMaWJyYXJ5IGxpc3QgaGFzIHVuc3Vw cG9ydGVkIHZlcnNpb24gXCIlc1wiIiksCisJCSAgIHZlcnNpb24pOworfQor CisKKy8qIFRoZSBhbGxvd2VkIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGZv ciBhbiBYTUwgbGlicmFyeSBsaXN0LgorICAgVGhlIHJvb3QgZWxlbWVudCBp cyBhIDxsaWJyYXJ5LWxpc3Q+LiAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVj dCBnZGJfeG1sX2F0dHJpYnV0ZSBzZWdtZW50X2F0dHJpYnV0ZXNbXSA9IHsK KyAgeyAiYWRkcmVzcyIsIEdEQl9YTUxfQUZfTk9ORSwgZ2RiX3htbF9wYXJz ZV9hdHRyX3Vsb25nZXN0LCBOVUxMIH0sCisgIHsgTlVMTCwgR0RCX1hNTF9B Rl9OT05FLCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZ2RiX3htbF9lbGVtZW50IGxpYnJhcnlfY2hpbGRyZW5bXSA9IHsKKyAg eyAic2VnbWVudCIsIHNlZ21lbnRfYXR0cmlidXRlcywgTlVMTCwKKyAgICBH REJfWE1MX0VGX05PTkUsIGxpYnJhcnlfbGlzdF9zdGFydF9zZWdtZW50LCBO VUxMIH0sCisgIHsgTlVMTCwgTlVMTCwgTlVMTCwgR0RCX1hNTF9FRl9OT05F LCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2Ri X3htbF9hdHRyaWJ1dGUgbGlicmFyeV9hdHRyaWJ1dGVzW10gPSB7CisgIHsg Im5hbWUiLCBHREJfWE1MX0FGX05PTkUsIE5VTEwsIE5VTEwgfSwKKyAgeyBO VUxMLCBHREJfWE1MX0FGX05PTkUsIE5VTEwsIE5VTEwgfQorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBnZGJfeG1sX2VsZW1lbnQgbGlicmFyeV9saXN0 X2NoaWxkcmVuW10gPSB7CisgIHsgImxpYnJhcnkiLCBsaWJyYXJ5X2F0dHJp YnV0ZXMsIGxpYnJhcnlfY2hpbGRyZW4sCisgICAgR0RCX1hNTF9FRl9SRVBF QVRBQkxFIHwgR0RCX1hNTF9FRl9PUFRJT05BTCwKKyAgICBsaWJyYXJ5X2xp c3Rfc3RhcnRfbGlicmFyeSwgbGlicmFyeV9saXN0X2VuZF9saWJyYXJ5IH0s CisgIHsgTlVMTCwgTlVMTCwgTlVMTCwgR0RCX1hNTF9FRl9OT05FLCBOVUxM LCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2RiX3htbF9h dHRyaWJ1dGUgbGlicmFyeV9saXN0X2F0dHJpYnV0ZXNbXSA9IHsKKyAgeyAi dmVyc2lvbiIsIEdEQl9YTUxfQUZfTk9ORSwgTlVMTCwgTlVMTCB9LAorICB7 IE5VTEwsIEdEQl9YTUxfQUZfTk9ORSwgTlVMTCwgTlVMTCB9Cit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGdkYl94bWxfZWxlbWVudCBsaWJyYXJ5X2xp c3RfZWxlbWVudHNbXSA9IHsKKyAgeyAibGlicmFyeS1saXN0IiwgbGlicmFy eV9saXN0X2F0dHJpYnV0ZXMsIGxpYnJhcnlfbGlzdF9jaGlsZHJlbiwKKyAg ICBHREJfWE1MX0VGX05PTkUsIGxpYnJhcnlfbGlzdF9zdGFydF9saXN0LCBO VUxMIH0sCisgIHsgTlVMTCwgTlVMTCwgTlVMTCwgR0RCX1hNTF9FRl9OT05F LCBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkCitzdnI0X2ZyZWVf c28gKHN0cnVjdCBzb19saXN0ICpzbykKK3sKKyAgeGZyZWUgKHNvLT5sbV9p bmZvLT5sbSk7CisgIHhmcmVlIChzby0+bG1faW5mbyk7Cit9CisKKy8qIEZy ZWUgc29fbGlzdCBidWlsdCBzbyBmYXIgKGNhbGxlZCB2aWEgY2xlYW51cCku ICAqLworCitzdGF0aWMgdm9pZAorc3ZyNF9mcmVlX2xpYnJhcnlfbGlzdCAo dm9pZCAqcF9saXN0KQoreworICBzdHJ1Y3Qgc29fbGlzdCAqbGlzdCA9ICoo c3RydWN0IHNvX2xpc3QgKiopIHBfbGlzdDsKKyAgd2hpbGUgKGxpc3QgIT0g TlVMTCkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc29fbGlzdCAqbmV4dCA9IGxp c3QtPm5leHQ7CisKKyAgICAgIHN2cjRfZnJlZV9zbyAobGlzdCk7CisgICAg ICBsaXN0ID0gbmV4dDsKKyAgICB9Cit9CisKKy8qIFBhcnNlIHFYZmVyOmxp YnJhcmllczpyZWFkIHBhY2tldCBpbnRvIHNvX2xpc3QuICAqLworCitzdGF0 aWMgc3RydWN0IHNvX2xpc3QgKgorc3ZyNF9wYXJzZV9saWJyYXJpZXMgKGNv bnN0IGNoYXIgKmRvY3VtZW50KQoreworICBzdHJ1Y3Qgc29fbGlzdCAqcmVz dWx0ID0gTlVMTDsKKyAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG8gPSBtYWtl X2NsZWFudXAgKHN2cjRfZnJlZV9saWJyYXJ5X2xpc3QsCisJCQkJCSAgJnJl c3VsdCk7CisKKyAgaWYgKGdkYl94bWxfcGFyc2VfcXVpY2sgKF8oInRhcmdl dCBsaWJyYXJ5IGxpc3QiKSwgImxpYnJhcnktbGlzdC5kdGQiLAorCQkJICAg bGlicmFyeV9saXN0X2VsZW1lbnRzLCBkb2N1bWVudCwgJnJlc3VsdCkgPT0g MCkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc29fbGlzdCAqcHJldjsKKworICAg ICAgLyogUGFyc2VkIHN1Y2Nlc3NmdWxseSwga2VlcCB0aGUgcmVzdWx0LiAg Ki8KKyAgICAgIGRpc2NhcmRfY2xlYW51cHMgKGJhY2tfdG8pOworCisgICAg ICAvKiBSZXZlcnNlIHRoZSBsaXN0IC0tIGl0IHdhcyBidWlsdCBpbiByZXZl cnNlIG9yZGVyLiAgKi8KKyAgICAgIHByZXYgPSBOVUxMOworICAgICAgd2hp bGUgKHJlc3VsdCkKKwl7CisJICBzdHJ1Y3Qgc29fbGlzdCAqbmV4dCA9IHJl c3VsdC0+bmV4dDsKKworCSAgcmVzdWx0LT5uZXh0ID0gcHJldjsKKwkgIHBy ZXYgPSByZXN1bHQ7CisJICByZXN1bHQgPSBuZXh0OworCX0KKyAgICAgIHJl dHVybiBwcmV2OworICAgIH0KKworICBkb19jbGVhbnVwcyAoYmFja190byk7 CisgIHJldHVybiBOVUxMOworfQorCisvKiBBdHRlbXB0IHRvIGdldCBzb19s aXN0IGZyb20gdGFyZ2V0IHZpYSBxWGZlcjpsaWJyYXJpZXM6cmVhZCBwYWNr ZXQuCisgICBSZXR1cm4gTlVMTCBpZiBwYWNrZXQgbm90IHN1cHBvcnRlZCwg b3IgY29udGFpbnMgbm8gbGlicmFyaWVzLiAgKi8KKworc3RhdGljIHN0cnVj dCBzb19saXN0ICoKK3N2cjRfY3VycmVudF9zb3NfdmlhX3hmZXJfbGlicmFy aWVzICgpCit7CisgIGNoYXIgKmxpYnJhcnlfZG9jdW1lbnQ7CisgIHN0cnVj dCBzb19saXN0ICpyZXN1bHQ7CisgIHN0cnVjdCBjbGVhbnVwICpiYWNrX3Rv OworCisgIC8qIEZldGNoIHRoZSBsaXN0IG9mIHNoYXJlZCBsaWJyYXJpZXMu ICAqLworICBsaWJyYXJ5X2RvY3VtZW50ID0gdGFyZ2V0X3JlYWRfc3RyYWxs b2MgKCZjdXJyZW50X3RhcmdldCwKKwkJCQkJICAgVEFSR0VUX09CSkVDVF9M SUJSQVJJRVMsCisJCQkJCSAgIE5VTEwpOworICBpZiAobGlicmFyeV9kb2N1 bWVudCA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGJhY2tfdG8g PSBtYWtlX2NsZWFudXAgKHhmcmVlLCBsaWJyYXJ5X2RvY3VtZW50KTsKKyAg cmVzdWx0ID0gc3ZyNF9wYXJzZV9saWJyYXJpZXMgKGxpYnJhcnlfZG9jdW1l bnQpOworICBkb19jbGVhbnVwcyAoYmFja190byk7CisKKyAgcmV0dXJuIHJl c3VsdDsKK30KKworI2Vsc2UKKworc3RhdGljIHN0cnVjdCBzb19saXN0ICoK K3N2cjRfY3VycmVudF9zb3NfdmlhX3hmZXJfbGlicmFyaWVzICgpCit7Cisg IHJldHVybiBOVUxMOworfQorCisjZW5kaWYKKwogLyogUmV0dXJuIG5vbi16 ZXJvIGlmIEdEQl9TT19OQU1FIGFuZCBJTkZFUklPUl9TT19OQU1FIHJlcHJl c2VudAogICAgdGhlIHNhbWUgc2hhcmVkIGxpYnJhcnkuICAqLwogCkBAIC0x MDY4LDYgKzEyNjMsMTAgQEAgc3ZyNF9jdXJyZW50X3NvcyAodm9pZCkKICAg Q09SRV9BRERSIGxkc29tYXAgPSAwOwogICBzdHJ1Y3Qgc3ZyNF9pbmZvICpp bmZvOwogCisgIGhlYWQgPSBzdnI0X2N1cnJlbnRfc29zX3ZpYV94ZmVyX2xp YnJhcmllcyAoKTsKKyAgaWYgKGhlYWQgIT0gTlVMTCkKKyAgICByZXR1cm4g aGVhZDsKKwogICBpbmZvID0gZ2V0X3N2cjRfaW5mbyAoKTsKIAogICAvKiBB bHdheXMgbG9jYXRlIHRoZSBkZWJ1ZyBzdHJ1Y3QsIGluIGNhc2UgaXQgaGFz IG1vdmVkLiAgKi8KQEAgLTIxMjUsMTMgKzIzMjQsNiBAQCBzdnI0X2NsZWFy X3NvbGliICh2b2lkKQogICBpbmZvLT5kZWJ1Z19sb2FkZXJfbmFtZSA9IE5V TEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1zdnI0X2ZyZWVfc28gKHN0cnVjdCBz b19saXN0ICpzbykKLXsKLSAgeGZyZWUgKHNvLT5sbV9pbmZvLT5sbSk7Ci0g IHhmcmVlIChzby0+bG1faW5mbyk7Ci19Ci0KIAogLyogQ2xlYXIgYW55IGJp dHMgb2YgQUREUiB0aGF0IHdvdWxkbid0IGZpdCBpbiBhIHRhcmdldC1mb3Jt YXQKICAgIGRhdGEgcG9pbnRlci4gICJEYXRhIHBvaW50ZXIiIGhlcmUgcmVm ZXJzIHRvIHdoYXRldmVyIHNvcnQgb2YKSW5kZXg6IGdkYnNlcnZlci9pbmZl cmlvcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9pbmZlcmlvcnMuYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBpbmZlcmlvcnMu YwotLS0gZ2Ric2VydmVyL2luZmVyaW9ycy5jCTIxIEp1bCAyMDExIDIzOjQ2 OjEyIC0wMDAwCTEuMzAKKysrIGdkYnNlcnZlci9pbmZlcmlvcnMuYwk5IEF1 ZyAyMDExIDE2OjUxOjM3IC0wMDAwCkBAIC0zMTIsMTQgKzMxMiwyMiBAQCB1 bmxvYWRlZF9kbGwgKGNvbnN0IGNoYXIgKm5hbWUsIENPUkVfQURECiAjZGVm aW5lIGNsZWFyX2xpc3QoTElTVCkgXAogICBkbyB7IChMSVNUKS0+aGVhZCA9 IChMSVNUKS0+dGFpbCA9IE5VTEw7IH0gd2hpbGUgKDApCiAKKy8qIENsZWFy IEFMTF9ETExTLiAgKi8KKwogdm9pZAotY2xlYXJfaW5mZXJpb3JzICh2b2lk KQorY2xlYXJfYWxsX2RsbHMgKHZvaWQpCiB7Ci0gIGZvcl9lYWNoX2luZmVy aW9yICgmYWxsX3RocmVhZHMsIGZyZWVfb25lX3RocmVhZCk7CiAgIGZvcl9l YWNoX2luZmVyaW9yICgmYWxsX2RsbHMsIGZyZWVfb25lX2RsbCk7CisgIGNs ZWFyX2xpc3QgKCZhbGxfZGxscyk7Cit9CiAKK3ZvaWQKK2NsZWFyX2luZmVy aW9ycyAodm9pZCkKK3sKKyAgZm9yX2VhY2hfaW5mZXJpb3IgKCZhbGxfdGhy ZWFkcywgZnJlZV9vbmVfdGhyZWFkKTsKICAgY2xlYXJfbGlzdCAoJmFsbF90 aHJlYWRzKTsKLSAgY2xlYXJfbGlzdCAoJmFsbF9kbGxzKTsKKworICBjbGVh cl9hbGxfZGxscyAoKTsKIAogICBjdXJyZW50X2luZmVyaW9yID0gTlVMTDsK IH0KSW5kZXg6IGdkYnNlcnZlci9saW51eC1sb3cuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZl ci9saW51eC1sb3cuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzMKZGlm ZiAtdSAtcCAtcjEuMTczIGxpbnV4LWxvdy5jCi0tLSBnZGJzZXJ2ZXIvbGlu dXgtbG93LmMJMjEgSnVsIDIwMTEgMjM6NDY6MTIgLTAwMDAJMS4xNzMKKysr IGdkYnNlcnZlci9saW51eC1sb3cuYwk5IEF1ZyAyMDExIDE2OjUxOjM3IC0w MDAwCkBAIC00NzU1LDYgKzQ3NTUsMzEyIEBAIGxpbnV4X2VtaXRfb3BzICh2 b2lkKQogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBFeHRyYWN0ICZwaGRy IGFuZCBudW1fcGhkciBpbiB0aGUgaW5mZXJpb3IuICBSZXR1cm4gMCBvbiBz dWNjZXNzLiAgKi8KKworc3RhdGljIGludAorZ2V0X3BoZHJfcGhudW1fZnJv bV9wcm9jX2F1eHYgKGNvbnN0IGludCBwaWQsIGNvbnN0IGludCBpc19lbGY2 NCwKKwkJCSAgICAgICBDT1JFX0FERFIgKnBoZHJfbWVtYWRkciwgaW50ICpu dW1fcGhkcikKK3sKKyAgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisgIGlu dCBmZDsKKyAgY29uc3QgaW50IGF1eHZfc2l6ZSA9IGlzX2VsZjY0CisgICAg PyBzaXplb2YgKEVsZjY0X2F1eHZfdCkgOiBzaXplb2YgKEVsZjMyX2F1eHZf dCk7CisgIGNoYXIgYnVmW3NpemVvZiAoRWxmNjRfYXV4dl90KV07ICAvKiBU aGUgbGFyZ2VyIG9mIHRoZSB0d28uICAqLworCisgIHhzbnByaW50ZiAoZmls ZW5hbWUsIHNpemVvZiBmaWxlbmFtZSwgIi9wcm9jLyVkL2F1eHYiLCBwaWQp OworCisgIGZkID0gb3BlbiAoZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyAgaWYg KGZkIDwgMCkKKyAgICByZXR1cm4gMTsKKworICAqcGhkcl9tZW1hZGRyID0g MDsKKyAgKm51bV9waGRyID0gMDsKKyAgd2hpbGUgKHJlYWQgKGZkLCBidWYs IGF1eHZfc2l6ZSkgPT0gYXV4dl9zaXplCisJICYmICgqcGhkcl9tZW1hZGRy ID09IDAgfHwgKm51bV9waGRyID09IDApKQorICAgIHsKKyAgICAgIGlmIChp c19lbGY2NCkKKwl7CisJICBFbGY2NF9hdXh2X3QgKmNvbnN0IGF1eCA9IChF bGY2NF9hdXh2X3QgKikgYnVmOworCisJICBzd2l0Y2ggKGF1eC0+YV90eXBl KQorCSAgICB7CisJICAgIGNhc2UgQVRfUEhEUjoKKwkgICAgICAqcGhkcl9t ZW1hZGRyID0gYXV4LT5hX3VuLmFfdmFsOworCSAgICAgIGJyZWFrOworCSAg ICBjYXNlIEFUX1BITlVNOgorCSAgICAgICpudW1fcGhkciA9IGF1eC0+YV91 bi5hX3ZhbDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGVs c2UKKwl7CisJICBFbGYzMl9hdXh2X3QgKmNvbnN0IGF1eCA9IChFbGYzMl9h dXh2X3QgKikgYnVmOworCisJICBzd2l0Y2ggKGF1eC0+YV90eXBlKQorCSAg ICB7CisJICAgIGNhc2UgQVRfUEhEUjoKKwkgICAgICAqcGhkcl9tZW1hZGRy ID0gYXV4LT5hX3VuLmFfdmFsOworCSAgICAgIGJyZWFrOworCSAgICBjYXNl IEFUX1BITlVNOgorCSAgICAgICpudW1fcGhkciA9IGF1eC0+YV91bi5hX3Zh bDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgY2xv c2UgKGZkKTsKKworICBpZiAoKnBoZHJfbWVtYWRkciA9PSAwIHx8ICpudW1f cGhkciA9PSAwKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKCJVbmV4cGVjdGVk IG1pc3NpbmcgQVRfUEhEUiBhbmQvb3IgQVRfUEhOVU06ICIKKwkgICAgICAg InBoZHJfbWVtYWRkciA9ICVsZCwgcGhkcl9udW0gPSAlZCIsCisJICAgICAg IChsb25nKSAqcGhkcl9tZW1hZGRyLCAqbnVtX3BoZHIpOworICAgICAgcmV0 dXJuIDI7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBSZXR1cm4g Jl9EWU5BTUlDICh2aWEgUFRfRFlOQU1JQykgaW4gdGhlIGluZmVyaW9yLCBv ciAwIGlmIG5vdCBwcmVzZW50LiAgKi8KKworc3RhdGljIENPUkVfQUREUgor Z2V0X2R5bmFtaWMgKGNvbnN0IGludCBwaWQsIGNvbnN0IGludCBpc19lbGY2 NCkKK3sKKyAgQ09SRV9BRERSIHBoZHJfbWVtYWRkciwgcmVsb2NhdGlvbjsK KyAgaW50IG51bV9waGRyLCBpOworICB1bnNpZ25lZCBjaGFyICpwaGRyX2J1 ZjsKKyAgY29uc3QgaW50IHBoZHJfc2l6ZSA9IGlzX2VsZjY0ID8gc2l6ZW9m IChFbGY2NF9QaGRyKSA6IHNpemVvZiAoRWxmMzJfUGhkcik7CisKKyAgaWYg KGdldF9waGRyX3BobnVtX2Zyb21fcHJvY19hdXh2IChwaWQsIGlzX2VsZjY0 LCAmcGhkcl9tZW1hZGRyLCAmbnVtX3BoZHIpKQorICAgIHJldHVybiAwOwor CisgIGdkYl9hc3NlcnQgKG51bV9waGRyIDwgMTAwKTsgIC8qIEJhc2ljIHNh bml0eSBjaGVjay4gICovCisgIHBoZHJfYnVmID0gYWxsb2NhIChudW1fcGhk ciAqIHBoZHJfc2l6ZSk7CisKKyAgaWYgKGxpbnV4X3JlYWRfbWVtb3J5IChw aGRyX21lbWFkZHIsIHBoZHJfYnVmLCBudW1fcGhkciAqIHBoZHJfc2l6ZSkp CisgICAgcmV0dXJuIDA7CisKKyAgLyogQ29tcHV0ZSByZWxvY2F0aW9uOiBp dCBpcyBleHBlY3RlZCB0byBiZSAwIGZvciAicmVndWxhciIgZXhlY3V0YWJs ZXMsCisgICAgIG5vbi16ZXJvIGZvciBQSUUgb25lcy4gICovCisgIHJlbG9j YXRpb24gPSAtMTsKKyAgZm9yIChpID0gMDsgcmVsb2NhdGlvbiA9PSAtMSAm JiBpIDwgbnVtX3BoZHI7IGkrKykKKyAgICBpZiAoaXNfZWxmNjQpCisgICAg ICB7CisJRWxmNjRfUGhkciAqY29uc3QgcCA9IChFbGY2NF9QaGRyICopIChw aGRyX2J1ZiArIGkgKiBwaGRyX3NpemUpOworCisJaWYgKHAtPnBfdHlwZSA9 PSBQVF9QSERSKQorCSAgcmVsb2NhdGlvbiA9IHBoZHJfbWVtYWRkciAtIHAt PnBfdmFkZHI7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCUVsZjMy X1BoZHIgKmNvbnN0IHAgPSAoRWxmMzJfUGhkciAqKSAocGhkcl9idWYgKyBp ICogcGhkcl9zaXplKTsKKworCWlmIChwLT5wX3R5cGUgPT0gUFRfUEhEUikK KwkgIHJlbG9jYXRpb24gPSBwaGRyX21lbWFkZHIgLSBwLT5wX3ZhZGRyOwor ICAgICAgfQorCisgIGlmIChyZWxvY2F0aW9uID09IC0xKQorICAgIHsKKyAg ICAgIHdhcm5pbmcgKCJVbmV4cGVjdGVkIG1pc3NpbmcgUFRfUEhEUiIpOwor ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBu dW1fcGhkcjsgaSsrKQorICAgIHsKKyAgICAgIGlmIChpc19lbGY2NCkKKwl7 CisJICBFbGY2NF9QaGRyICpjb25zdCBwID0gKEVsZjY0X1BoZHIgKikgKHBo ZHJfYnVmICsgaSAqIHBoZHJfc2l6ZSk7CisKKwkgIGlmIChwLT5wX3R5cGUg PT0gUFRfRFlOQU1JQykKKwkgICAgcmV0dXJuIHAtPnBfdmFkZHIgKyByZWxv Y2F0aW9uOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBFbGYzMl9QaGRyICpj b25zdCBwID0gKEVsZjMyX1BoZHIgKikgKHBoZHJfYnVmICsgaSAqIHBoZHJf c2l6ZSk7CisKKwkgIGlmIChwLT5wX3R5cGUgPT0gUFRfRFlOQU1JQykKKwkg ICAgcmV0dXJuIHAtPnBfdmFkZHIgKyByZWxvY2F0aW9uOworCX0KKyAgICB9 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiAmX3JfZGVidWcgaW4g dGhlIGluZmVyaW9yLCBvciAtMSBpZiBub3QgcHJlc2VudC4gIFJldHVybiB2 YWx1ZQorICAgY2FuIGJlIDAgaWYgdGhlIGluZmVyaW9yIGRvZXMgbm90IHll dCBoYXZlIHRoZSBsaWJyYXJ5IGxpc3QgaW5pdGlhbGl6ZWQuICAqLworCitz dGF0aWMgQ09SRV9BRERSCitnZXRfcl9kZWJ1ZyAoY29uc3QgaW50IHBpZCwg Y29uc3QgaW50IGlzX2VsZjY0KQoreworICBDT1JFX0FERFIgZHluYW1pY19t ZW1hZGRyOworICBjb25zdCBpbnQgZHluX3NpemUgPSBpc19lbGY2NCA/IHNp emVvZiAoRWxmNjRfRHluKSA6IHNpemVvZiAoRWxmMzJfRHluKTsKKyAgdW5z aWduZWQgY2hhciBidWZbc2l6ZW9mIChFbGY2NF9EeW4pXTsgIC8qIFRoZSBs YXJnZXIgb2YgdGhlIHR3by4gICovCisKKyAgZHluYW1pY19tZW1hZGRyID0g Z2V0X2R5bmFtaWMgKHBpZCwgaXNfZWxmNjQpOworICBpZiAoZHluYW1pY19t ZW1hZGRyID09IDApCisgICAgcmV0dXJuIChDT1JFX0FERFIpIC0xOworCisg IHdoaWxlIChsaW51eF9yZWFkX21lbW9yeSAoZHluYW1pY19tZW1hZGRyLCBi dWYsIGR5bl9zaXplKSA9PSAwKQorICAgIHsKKyAgICAgIGlmIChpc19lbGY2 NCkKKwl7CisJICBFbGY2NF9EeW4gKmNvbnN0IGR5biA9IChFbGY2NF9EeW4g KikgYnVmOworCisJICBpZiAoZHluLT5kX3RhZyA9PSBEVF9ERUJVRykKKwkg ICAgcmV0dXJuIGR5bi0+ZF91bi5kX3ZhbDsKKworCSAgaWYgKGR5bi0+ZF90 YWcgPT0gRFRfTlVMTCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQor CXsKKwkgIEVsZjMyX0R5biAqY29uc3QgZHluID0gKEVsZjMyX0R5biAqKSBi dWY7CisKKwkgIGlmIChkeW4tPmRfdGFnID09IERUX0RFQlVHKQorCSAgICBy ZXR1cm4gZHluLT5kX3VuLmRfdmFsOworCisJICBpZiAoZHluLT5kX3RhZyA9 PSBEVF9OVUxMKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGR5bmFtaWNf bWVtYWRkciArPSBkeW5fc2l6ZTsKKyAgICB9CisKKyAgcmV0dXJuIChDT1JF X0FERFIpIC0xOworfQorCisvKiBSZWFkIG9uZSBwb2ludGVyIGZyb20gTUVN QUREUiBpbiB0aGUgaW5mZXJpb3IuICAqLworCitzdGF0aWMgaW50CityZWFk X29uZV9wdHIgKENPUkVfQUREUiBtZW1hZGRyLCBDT1JFX0FERFIgKnB0ciwg aW50IHB0cl9zaXplKQoreworICAqcHRyID0gMDsKKyAgcmV0dXJuIGxpbnV4 X3JlYWRfbWVtb3J5IChtZW1hZGRyLCAodW5zaWduZWQgY2hhciAqKSBwdHIs IHB0cl9zaXplKTsKK30KKworc3RydWN0IGxpbmtfbWFwX29mZnNldHMKKyAg eworICAgIC8qIE9mZnNldCBhbmQgc2l6ZSBvZiByX2RlYnVnLnJfdmVyc2lv bi4gICovCisgICAgaW50IHJfdmVyc2lvbl9vZmZzZXQ7CisKKyAgICAvKiBP ZmZzZXQgYW5kIHNpemUgb2Ygcl9kZWJ1Zy5yX21hcC4gICovCisgICAgaW50 IHJfbWFwX29mZnNldDsKKworICAgIC8qIE9mZnNldCB0byBsX2FkZHIgZmll bGQgaW4gc3RydWN0IGxpbmtfbWFwLiAgKi8KKyAgICBpbnQgbF9hZGRyX29m ZnNldDsKKworICAgIC8qIE9mZnNldCB0byBsX25hbWUgZmllbGQgaW4gc3Ry dWN0IGxpbmtfbWFwLiAgKi8KKyAgICBpbnQgbF9uYW1lX29mZnNldDsKKwor ICAgIC8qIE9mZnNldCB0byBsX25leHQgZmllbGQgaW4gc3RydWN0IGxpbmtf bWFwLiAgKi8KKyAgICBpbnQgbF9uZXh0X29mZnNldDsKKworICAgIC8qIE9m ZnNldCB0byBsX3ByZXYgZmllbGQgaW4gc3RydWN0IGxpbmtfbWFwLiAgKi8K KyAgICBpbnQgbF9wcmV2X29mZnNldDsKKyAgfTsKKworLyogQ2xlYXIgYW5k IHJlZnJlc2ggQUxMX0RMTFMgbGlzdC4gICovCisKK3N0YXRpYyB2b2lkCits aW51eF9yZWZyZXNoX2xpYnJhcmllcyAodm9pZCkKK3sKKyAgc3RydWN0IHBy b2Nlc3NfaW5mb19wcml2YXRlICpjb25zdCBwcml2ID0gY3VycmVudF9wcm9j ZXNzICgpLT5wcml2YXRlOworICBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsK KyAgaW50IHBpZCwgaXNfZWxmNjQsIHB0cl9zaXplLCByX3ZlcnNpb247Cisg IENPUkVfQUREUiBsbV9hZGRyLCBsbV9wcmV2LCBsX25hbWUsIGxfYWRkciwg bF9uZXh0LCBsX3ByZXY7CisKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCBsaW5r X21hcF9vZmZzZXRzIGxtb18zMmJpdF9vZmZzZXRzID0KKyAgICB7CisgICAg ICAwLCAgICAgLyogcl92ZXJzaW9uIG9mZnNldC4gKi8KKyAgICAgIDQsICAg ICAvKiByX2RlYnVnLnJfbWFwIG9mZnNldC4gICovCisgICAgICAwLCAgICAg LyogbF9hZGRyIG9mZnNldCBpbiBsaW5rX21hcC4gICovCisgICAgICA0LCAg ICAgLyogbF9uYW1lIG9mZnNldCBpbiBsaW5rX21hcC4gICovCisgICAgICAx MiwgICAgLyogbF9uZXh0IG9mZnNldCBpbiBsaW5rX21hcC4gICovCisgICAg ICAxNiAgICAgLyogbF9wcmV2IG9mZnNldCBpbiBsaW5rX21hcC4gICovCisg ICAgfTsKKworICBzdGF0aWMgY29uc3Qgc3RydWN0IGxpbmtfbWFwX29mZnNl dHMgbG1vXzY0Yml0X29mZnNldHMgPQorICAgIHsKKyAgICAgIDAsICAgICAv KiByX3ZlcnNpb24gb2Zmc2V0LiAqLworICAgICAgOCwgICAgIC8qIHJfZGVi dWcucl9tYXAgb2Zmc2V0LiAgKi8KKyAgICAgIDAsICAgICAvKiBsX2FkZHIg b2Zmc2V0IGluIGxpbmtfbWFwLiAgKi8KKyAgICAgIDgsICAgICAvKiBsX25h bWUgb2Zmc2V0IGluIGxpbmtfbWFwLiAgKi8KKyAgICAgIDI0LCAgICAvKiBs X25leHQgb2Zmc2V0IGluIGxpbmtfbWFwLiAgKi8KKyAgICAgIDMyICAgICAv KiBsX3ByZXYgb2Zmc2V0IGluIGxpbmtfbWFwLiAgKi8KKyAgICB9OworICBj b25zdCBzdHJ1Y3QgbGlua19tYXBfb2Zmc2V0cyAqbG1vOworCisgIHBpZCA9 IGx3cGlkX29mIChnZXRfdGhyZWFkX2x3cCAoY3VycmVudF9pbmZlcmlvcikp OworICB4c25wcmludGYgKGZpbGVuYW1lLCBzaXplb2YgZmlsZW5hbWUsICIv cHJvYy8lZC9leGUiLCBwaWQpOworICBpc19lbGY2NCA9IGVsZl82NF9maWxl X3AgKGZpbGVuYW1lKTsKKyAgbG1vID0gaXNfZWxmNjQgPyAmbG1vXzY0Yml0 X29mZnNldHMgOiAmbG1vXzMyYml0X29mZnNldHM7CisgIHB0cl9zaXplID0g aXNfZWxmNjQgPyA4IDogNDsKKworICBpZiAocHJpdi0+cl9kZWJ1ZyA9PSAw KQorICAgIHByaXYtPnJfZGVidWcgPSBnZXRfcl9kZWJ1ZyAocGlkLCBpc19l bGY2NCk7CisKKyAgaWYgKHByaXYtPnJfZGVidWcgPT0gKENPUkVfQUREUikg LTEgfHwgcHJpdi0+cl9kZWJ1ZyA9PSAwKQorICAgIHJldHVybjsKKworICBy X3ZlcnNpb24gPSAwOworICBpZiAobGludXhfcmVhZF9tZW1vcnkgKHByaXYt PnJfZGVidWcgKyBsbW8tPnJfdmVyc2lvbl9vZmZzZXQsCisJCQkgKHVuc2ln bmVkIGNoYXIgKikgJnJfdmVyc2lvbiwKKwkJCSBzaXplb2YgKHJfdmVyc2lv bikpICE9IDAKKyAgICAgIHx8IHJfdmVyc2lvbiAhPSAxKQorICAgIHsKKyAg ICAgIHdhcm5pbmcgKCJ1bmV4cGVjdGVkIHJfZGVidWcgdmVyc2lvbiAlZCIs IHJfdmVyc2lvbik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChy ZWFkX29uZV9wdHIgKHByaXYtPnJfZGVidWcgKyBsbW8tPnJfbWFwX29mZnNl dCwKKwkJICAgICZsbV9hZGRyLCBwdHJfc2l6ZSkgIT0gMCkKKyAgICB7Cisg ICAgICB3YXJuaW5nICgidW5hYmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAweCVs eCIsCisJICAgICAgIChsb25nKSBwcml2LT5yX2RlYnVnICsgbG1vLT5yX21h cF9vZmZzZXQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBjbGVhcl9h bGxfZGxscyAoKTsKKworICBsbV9wcmV2ID0gMDsKKyAgd2hpbGUgKHJlYWRf b25lX3B0ciAobG1fYWRkciArIGxtby0+bF9uYW1lX29mZnNldCwKKwkJICAg ICAgICZsX25hbWUsIHB0cl9zaXplKSA9PSAwCisJICYmIHJlYWRfb25lX3B0 ciAobG1fYWRkciArIGxtby0+bF9hZGRyX29mZnNldCwKKwkJCSAgJmxfYWRk ciwgcHRyX3NpemUpID09IDAKKwkgJiYgcmVhZF9vbmVfcHRyIChsbV9hZGRy ICsgbG1vLT5sX3ByZXZfb2Zmc2V0LAorCQkJICAmbF9wcmV2LCBwdHJfc2l6 ZSkgPT0gMAorCSAmJiByZWFkX29uZV9wdHIgKGxtX2FkZHIgKyBsbW8tPmxf bmV4dF9vZmZzZXQsCisJCQkgICZsX25leHQsIHB0cl9zaXplKSA9PSAwKQor ICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgbGlibmFtZVtQQVRIX01BWF07 CisKKyAgICAgIGlmIChsbV9wcmV2ICE9IGxfcHJldikKKwl7CisJICB3YXJu aW5nICgiY29ycnVwdCBzb2xpYiBjaGFpbjogMHglbHggIT0gMHglbHgiLAor CQkgICAobG9uZykgbG1fcHJldiwgKGxvbmcpIGxfcHJldik7CisJICBicmVh azsKKwl9CisKKyAgICAgIC8qIE5vdCBjaGVja2luZyBmb3IgZXJyb3IgYmVj YXVzZSByZWFkaW5nIG1heSBzdG9wIGJlZm9yZQorCSB3ZSd2ZSBnb3QgUEFU SF9NQVggd29ydGggb2YgY2hhcmFjdGVycy4gICovCisgICAgICBsaWJuYW1l WzBdID0gJ1wwJzsKKyAgICAgIGxpbnV4X3JlYWRfbWVtb3J5IChsX25hbWUs IGxpYm5hbWUsIHNpemVvZiAobGlibmFtZSkpOworICAgICAgbGlibmFtZVtz aXplb2YgKGxpYm5hbWUpIC0gMV0gPSAnXDAnOworICAgICAgaWYgKGxpYm5h bWVbMF0gIT0gJ1wwJykKKwlsb2FkZWRfZGxsICgoY29uc3QgY2hhciAqKSBs aWJuYW1lLCBsX2FkZHIpOworCisgICAgICBpZiAobF9uZXh0ID09IDApCisJ YnJlYWs7CisKKyAgICAgIGxtX3ByZXYgPSBsbV9hZGRyOworICAgICAgbG1f YWRkciA9IGxfbmV4dDsKKyAgICB9CisKKyAgLyogVGhlIGxpYnJhcnkgbm90 aWZpY2F0aW9uIHJlc3BvbnNlIGlzIG5vdCBleHBlY3RlZCBmb3IgR05VL0xp bnV4LiAgKi8KKyAgZGxsc19jaGFuZ2VkID0gMDsKK30KKworCiBzdGF0aWMg c3RydWN0IHRhcmdldF9vcHMgbGludXhfdGFyZ2V0X29wcyA9IHsKICAgbGlu dXhfY3JlYXRlX2luZmVyaW9yLAogICBsaW51eF9hdHRhY2gsCkBAIC00ODEz LDcgKzUxMTksOCBAQCBzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgbGludXhf dGFyZ2V0X29wCiAgIGxpbnV4X2NhbmNlbF9icmVha3BvaW50cywKICAgbGlu dXhfc3RhYmlsaXplX3RocmVhZHMsCiAgIGxpbnV4X2luc3RhbGxfZmFzdF90 cmFjZXBvaW50X2p1bXBfcGFkLAotICBsaW51eF9lbWl0X29wcworICBsaW51 eF9lbWl0X29wcywKKyAgbGludXhfcmVmcmVzaF9saWJyYXJpZXMKIH07CiAK IHN0YXRpYyB2b2lkCkluZGV4OiBnZGJzZXJ2ZXIvbGludXgtbG93LmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9nZGJzZXJ2ZXIvbGludXgtbG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuNDcKZGlmZiAtdSAtcCAtcjEuNDcgbGludXgtbG93LmgKLS0tIGdkYnNl cnZlci9saW51eC1sb3cuaAkxIEphbiAyMDExIDE1OjMzOjI0IC0wMDAwCTEu NDcKKysrIGdkYnNlcnZlci9saW51eC1sb3cuaAk5IEF1ZyAyMDExIDE2OjUx OjM3IC0wMDAwCkBAIC01Niw2ICs1Niw5IEBAIHN0cnVjdCBwcm9jZXNzX2lu Zm9fcHJpdmF0ZQogICAvKiBsaWJ0aHJlYWRfZGItc3BlY2lmaWMgYWRkaXRp b25zLiAgTm90IE5VTEwgaWYgdGhpcyBwcm9jZXNzIGhhcyBsb2FkZWQKICAg ICAgdGhyZWFkX2RiLCBhbmQgaXQgaXMgYWN0aXZlLiAgKi8KICAgc3RydWN0 IHRocmVhZF9kYiAqdGhyZWFkX2RiOworCisgIC8qICZfcl9kZWJ1Zy4gIDAg aWYgbm90IHlldCBkZXRlcm1pbmVkLiAgLTEgaWYgbm8gUFRfRFlOQU1JQyBp biBQaGRycy4gICovCisgIENPUkVfQUREUiByX2RlYnVnOwogfTsKIAogc3Ry dWN0IGx3cF9pbmZvOwpJbmRleDogZ2Ric2VydmVyL3NlcnZlci5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIv Z2Ric2VydmVyL3NlcnZlci5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0 NgpkaWZmIC11IC1wIC1yMS4xNDYgc2VydmVyLmMKLS0tIGdkYnNlcnZlci9z ZXJ2ZXIuYwkyMSBKdWwgMjAxMSAyMzo0NjoxMiAtMDAwMAkxLjE0NgorKysg Z2Ric2VydmVyL3NlcnZlci5jCTkgQXVnIDIwMTEgMTY6NTE6MzcgLTAwMDAK QEAgLTkxOCw2ICs5MTgsOSBAQCBoYW5kbGVfcXhmZXJfbGlicmFyaWVzIChj b25zdCBjaGFyICphbm5lCiAgIGlmIChhbm5leFswXSAhPSAnXDAnIHx8ICF0 YXJnZXRfcnVubmluZyAoKSkKICAgICByZXR1cm4gLTE7CiAKKyAgaWYgKHRo ZV90YXJnZXQtPnJlZnJlc2hfbGlicmFyaWVzICE9IE5VTEwpCisgICAgdGhl X3RhcmdldC0+cmVmcmVzaF9saWJyYXJpZXMgKCk7CisKICAgLyogT3Zlci1l c3RpbWF0ZSB0aGUgbmVjZXNzYXJ5IG1lbW9yeS4gIEFzc3VtZSB0aGF0IGV2 ZXJ5IGNoYXJhY3RlcgogICAgICBpbiB0aGUgbGlicmFyeSBuYW1lIG11c3Qg YmUgZXNjYXBlZC4gICovCiAgIHRvdGFsX2xlbiA9IDY0OwpJbmRleDogZ2Ri c2VydmVyL3NlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5oLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjg0CmRpZmYgLXUgLXAgLXIxLjg0IHNlcnZl ci5oCi0tLSBnZGJzZXJ2ZXIvc2VydmVyLmgJMjEgSnVsIDIwMTEgMjM6NDY6 MTIgLTAwMDAJMS44NAorKysgZ2Ric2VydmVyL3NlcnZlci5oCTkgQXVnIDIw MTEgMTY6NTE6MzcgLTAwMDAKQEAgLTI2MCw2ICsyNjAsNyBAQCBwdGlkX3Qg dGhyZWFkX2lkX3RvX2dkYl9pZCAocHRpZF90KTsKIHB0aWRfdCB0aHJlYWRf dG9fZ2RiX2lkIChzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiBwdGlkX3QgZ2Ri X2lkX3RvX3RocmVhZF9pZCAocHRpZF90KTsKIHN0cnVjdCB0aHJlYWRfaW5m byAqZ2RiX2lkX3RvX3RocmVhZCAodW5zaWduZWQgaW50KTsKK3ZvaWQgY2xl YXJfYWxsX2RsbHMgKHZvaWQpOwogdm9pZCBjbGVhcl9pbmZlcmlvcnMgKHZv aWQpOwogc3RydWN0IGluZmVyaW9yX2xpc3RfZW50cnkgKmZpbmRfaW5mZXJp b3IKICAgICAgKHN0cnVjdCBpbmZlcmlvcl9saXN0ICosCkluZGV4OiBnZGJz ZXJ2ZXIvdGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtdSAtcCAtcjEuNTQgdGFyZ2V0 LmgKLS0tIGdkYnNlcnZlci90YXJnZXQuaAkxIEphbiAyMDExIDE1OjMzOjI0 IC0wMDAwCTEuNTQKKysrIGdkYnNlcnZlci90YXJnZXQuaAk5IEF1ZyAyMDEx IDE2OjUxOjM3IC0wMDAwCkBAIC0zNzMsNiArMzczLDkgQEAgc3RydWN0IHRh cmdldF9vcHMKICAgLyogUmV0dXJuIHRoZSBieXRlY29kZSBvcGVyYXRpb25z IHZlY3RvciBmb3IgdGhlIGN1cnJlbnQgaW5mZXJpb3IuCiAgICAgIFJldHVy bnMgTlVMTCBpZiBieXRlY29kZSBjb21waWxhdGlvbiBpcyBub3Qgc3VwcG9y dGVkLiAgKi8KICAgc3RydWN0IGVtaXRfb3BzICooKmVtaXRfb3BzKSAodm9p ZCk7CisKKyAgLyogUmVmcmVzaCBBTExfRExMUy4gICovCisgIHZvaWQgKCpy ZWZyZXNoX2xpYnJhcmllcykgKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVj dCB0YXJnZXRfb3BzICp0aGVfdGFyZ2V0Owo= --000e0cd35910df4ff404aa157234--