From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55507 invoked by alias); 1 Oct 2019 00:37:02 -0000 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 Received: (qmail 55494 invoked by uid 89); 1 Oct 2019 00:37:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_STOCKGEN,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: userp2130.oracle.com Received: from userp2130.oracle.com (HELO userp2130.oracle.com) (156.151.31.86) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 01 Oct 2019 00:36:55 +0000 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x910TTF7027364; Tue, 1 Oct 2019 00:36:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : references : from : message-id : date : mime-version : in-reply-to : content-type; s=corp-2019-08-05; bh=5sZmry50zHk5UhOtZMT9lXNj2ABcA7mBBEHL9ON9ENw=; b=O1GLBNgKgScSZ/1132QnfLkEWPp3g8ArBDTmKJYyRAnSnh1B7WHUAQiR8L0nZ6T/7nY5 VLfxrduz28WhOQZivt8qFLULzMXrVuGQSB5KukBMjYzeb2Xu5zg1Dvf90FIdX8ne4ziD DV/d+tXAeIDtU787rGl0djBj+MOjSNYtCaXVeTS5VGNOUp6amQQ/86oqKNHMVm1/ndls GxgOxOQ3QsEtDnt1+DOcmMuF4ELPf8re6l2fg//ji3VCseOz6R0sjOF7hdiwuw0rtki+ 5DKPooPKSvCO6ueLax6dGG5b37LDg1C2DKib1SKP1N5S6HUCo9R+2P2noEsQMQkn8Qjy dQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 2v9xxujj4s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Oct 2019 00:36:51 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x910TFYw186203; Tue, 1 Oct 2019 00:36:51 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userp3020.oracle.com with ESMTP id 2vbnqbqam3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Oct 2019 00:36:51 +0000 Received: from abhmp0020.oracle.com (abhmp0020.oracle.com [141.146.116.26]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id x910amgY005031; Tue, 1 Oct 2019 00:36:48 GMT Received: from [10.132.97.0] (/10.132.97.0) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 30 Sep 2019 17:36:48 -0700 Subject: Re: [PATCH v2] gdb: CTF support To: Simon Marchi , gdb-patches@sourceware.org References: <1564530195-27659-1-git-send-email-weimin.pan@oracle.com> <5377c457-52b0-583d-15b5-47024eae1f48@simark.ca> From: Weimin Pan Message-ID: <895f47d4-3e01-4d5a-474b-43dd2dd037b4@oracle.com> Date: Tue, 01 Oct 2019 00:37:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <5377c457-52b0-583d-15b5-47024eae1f48@simark.ca> Content-Type: multipart/mixed; boundary="------------C9A9D709BBE697D9E568BCE5" X-SW-Source: 2019-10/txt/msg00000.txt.bz2 This is a multi-part message in MIME format. --------------C9A9D709BBE697D9E568BCE5 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-length: 9210 On 9/29/2019 8:06 PM, Simon Marchi wrote: > Hi Weimin, > > I am done reading ctfread.c, I noted a few comments below. > > There are a few issues with styling as well, most importantly: > > - The indentation > - Use "= NULL" / "!= NULL" when testing a pointer > > Instead of pointing them out individually, I've fixed what I saw as I read > the patch, see the attached patch.  If you use it, please read through it > carefully and don't assume I haven't made mistakes :). Hi Simon, Thank you very much for the thorough review. I have read through the modified patch which looks good and will be adopted. In addition, I have made more changes to address the issues you raised. Please see below and the updated patch (attached). >> +struct field_info >> +  { >> +    /* List of data member fields.  */ >> +    std::vector fields; >> + >> +    /* Number of fields.  */ >> +    int nfields = 0; > > This field seems unnecessary, as it represents the size of the vector above (which you can get with fields.size()). You're right, the field is not needed and is removed. > >> +/* Callback to add member NAME to a struct/union type. TID is the type >> +   of struct/union member, OFFSET is the offset of member in bits >> +   (gdbarch_bits_big_endian(), and ARG contains the field_info.  */ > > This comment (the gdbarch_bits_big_endian part) seems incomplete). Updated. > >> +/* Callback to add member NAME of EVAL to an enumeration type. >> +   ARG contains the field_info.  */ >> + >> +static int >> +ctf_add_enum_member_cb (const char *name, int eval, void *arg) > > I had to search why that variable was called EVAL.  It means "enum value", but I > automatically associate "eval" to "evaluate".  I'd suggest renaming it to "enum_value" > or "value" for clarity. OK, using "enum_value". > >> +/* Add a new symbol entry, with its name from TP, its access index and >> +   domain from TP's kind, and its type from TPYE.  */ > > This comment refers to TP, which doesn't exist, so it seems outdated.  Also, > watch the typo "TPYE". Fixed. > >> + >> +static struct symbol * >> +new_symbol (ctf_context_t *ccp, struct type *type, ctf_id_t tid) >> +{ >> +  struct objfile *objfile = ccp->of; >> +  ctf_file_t *fp = ccp->fp; >> +  struct symbol *sym = NULL; >> + >> +  const char *name = ctf_type_aname_raw (fp, tid); >> +  if (name) >> +    { >> +      sym = allocate_symbol (objfile); >> +      OBJSTAT (objfile, n_syms++); >> + >> +      SYMBOL_SET_LANGUAGE (sym, language_c, &objfile->objfile_obstack); >> +      SYMBOL_SET_NAMES (sym, xstrdup (name), strlen (name), 0, objfile); > > Looking at the code of ctf_type_aname_raw, it seems to return an allocated copy, > which needs to be freed eventually. Yes, I've made the change in several places where the allocated copy is freed after it's being dup'ed via obstack_strdup. > Also, instead of calling xstrdup, you can just pass true to the COPY_NAME parameter. Good point, done. >> +/* Given a TID of kind CTF_K_INTEGER or CTF_K_FLOAT, find a representation >> +   and create the symbol for it.  */ >> + >> +static struct type * >> +read_base_type (ctf_context_t *ccp, ctf_id_t tid) >> +{ >> +  struct objfile *of = ccp->of; >> +  ctf_file_t *fp = ccp->fp; >> +  ctf_encoding_t cet; >> +  struct type *type = NULL; >> +  const char *name; >> +  uint32_t kind; >> + >> +  if (ctf_type_encoding (fp, tid, &cet)) >> +    { >> +      complaint (_("ctf_type_encoding read_base_type failed - %s"), >> +                 ctf_errmsg (ctf_errno (fp))); >> +      return NULL; >> +    } >> + >> +  name = ctf_type_aname_raw (fp, tid); >> +  if (!name || (name && !strlen (name))) > > I think that can be written more simply (and in GNU style) as > >   if (name == NULL || strlen (name) == 0) OK, updated in several places. > >> +/* Start a structure or union scope (definition) with TID and TP to create >> +   a type for the structure or union. > > TP seems to refer to something that doesn't exist (anymore?).  This occurs a few times > in the file. All the references to TP have been cleaned up. > >> + >> +   Fill in the type's name and general properties. The members will not be >> +   processed, nor a symbol table entry be done until process_structure_type >> +   (assuming the type has a name).  */ >> + >> +static struct type * >> +read_structure_type (ctf_context_t *ccp, ctf_id_t tid) >> +{ >> +  struct objfile *of = ccp->of; >> +  ctf_file_t *fp = ccp->fp; >> +  struct type *type; >> +  const char *name; >> +  uint32_t kind; > > I'd suggest adding a gdb_assert to make sure that tid represents a struct or union > (and actually I'd suggest doing the same for all read_foo functions, make sure the > kind of the TID is what we expect). Actually callers of these read_foo functions will call the appropriate function, based on the tid's kind. For example, either ctf_add_type_cb or process_structure_type calls read_structure_type only if tid's kind is CTF_K_STRUCT or CTF_K_STRUCT. > >> +  type = alloc_type (of); >> +  name = ctf_type_aname_raw (fp, tid); > > ctf_type_aname_raw returns an allocated string.  Is it ever free'd? > > This applies to other uses of ctf_type_aname_raw. Done, please see above. > >> +.... >> +/* Given a tid of CTF_K_STRUCT or CTF_K_UNION, process all its members >> +   and create the symbol for it.  */ >> + >> +static void >> +process_struct_members (ctf_context_t *ccp, >> +                        ctf_id_t tid, >> +                        struct type *type) >> +{ >> +  ctf_file_t *fp = ccp->fp; >> +  struct field_info fi;> + >> +  fi.cur_context.fp = fp; >> +  fi.cur_context.of = ccp->of; >> +  fi.cur_context.builder = ccp->builder; > > I might be missing something, but I find it odd to copy the whole ctf_context_t structure, > couldn't you just make field_info::cur_context a pointer, and just assign CCP to it? Yes, it is better and is done. > >> +/* Read TID of kind CTF_K_VOLATILE with base type BTID. */ >> + >> +static struct type * >> +read_volatile_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid) >> +{ >> +  struct objfile *objfile = ccp->of; >> +  ctf_file_t *fp = ccp->fp; >> +  struct type *base_type, *cv_type; >> + >> +  base_type = get_tid_type (objfile, btid); >> +  if (!base_type) >> +    { > > In read_const_type and read_restrict_type, you call read_type_record to read > in the type if it hasn't been read yet.  Is there a reason you don't do it here? No, I need to do the same, i.e. calling read_type_record, in read_volatile_type. > >> +/* Get text segment base for OBJFILE, TSIZE contains the segment size.  */ >> + >> +static CORE_ADDR >> +get_of_text_range (struct objfile *of, int *tsize) > > I'd suggest renaming this to get_objfile_text_range.  A few characters more, > but a lot clearer IMO. OK. > >> +/* Read in full symbols for PST, and anything it depends on.  */ >> + >> +static void >> +psymtab_to_symtab (struct partial_symtab *pst) >> +{ >> +  struct symbol *sym; >> +  ctf_context_t *ccp; >> + >> +  if (pst->readin == 1) >> +    return; > > This should never happen (it's checked in ctf_read_symtab), so I would use: > >   gdb_assert (!pst->readin); It makes sense, done. > >> +static struct partial_symtab * >> +create_partial_symtab (const char *name, >> +                       ctf_file_t *cfp, >> +                       struct objfile *objfile) >> +{ >> +  struct partial_symtab *pst; >> +  static ctf_context_t ccx; >> + >> +  pst = start_psymtab_common (objfile, name, 0); >> + >> +  ccx.fp = cfp; >> +  ccx.of = objfile; >> +  pst->read_symtab_private = (void *)&ccx; > > Hmm that looks fishy.  It looks like this is taking the address of a > local variable for something that will be used after the current function > will have returned. Sorry, but it's a "static" local variable. > >> +... >> +  /* Scan CTF object and function sections which correspond to each >> +     STT_FUNC or STT_OBJECT entry in the symbol table, >> +     pick up what init_symtab has done.  */ >> +  for (unsigned long idx = 0; ; idx++) >> +    { >> +      ctf_id_t tid; >> +      if ((tid = ctf_lookup_by_symbol (cfp, idx)) == CTF_ERR) >> +        { >> +    if (ctf_errno (cfp) == EINVAL >> +           || ctf_errno (cfp) == ECTF_NOSYMTAB) >> +        // case ECTF_SYMRANGE: >> +      break; > > Is this comment (the "case ECTF_SYMRANGE:" comment) a leftover? Yes, it is and is taken out. > > Also, if these cases happen, it means the debug information is not valid/corrupted? > Should there be an error printed to the user, should we maybe call error()? We use either EINVAL or ECTF_NOSYMTAB to signal end of the section has been reached. I have added such a comment in the code. Weimin --------------C9A9D709BBE697D9E568BCE5 Content-Type: text/plain; charset=UTF-8; name="0001-updated.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-updated.patch" Content-length: 59126 ZGlmZiAtLWdpdCBhL2dkYi9jdGZyZWFkLmMgYi9nZGIvY3RmcmVhZC5jCmlu ZGV4IDliNmM3MGUuLjEzN2QxNmIgMTAwNjQ0Ci0tLSBhL2dkYi9jdGZyZWFk LmMKKysrIGIvZ2RiL2N0ZnJlYWQuYwpAQCAtMTA2LDI5ICsxMDYsMjYgQEAg c3RydWN0IG5leHRmaWVsZAogfTsKIAogc3RydWN0IGZpZWxkX2luZm8KLSAg ewotICAgIC8qIExpc3Qgb2YgZGF0YSBtZW1iZXIgZmllbGRzLiAgKi8KLSAg ICBzdGQ6OnZlY3RvcjxzdHJ1Y3QgbmV4dGZpZWxkPiBmaWVsZHM7Cit7Cisg IC8qIExpc3Qgb2YgZGF0YSBtZW1iZXIgZmllbGRzLiAgKi8KKyAgc3RkOjp2 ZWN0b3I8c3RydWN0IG5leHRmaWVsZD4gZmllbGRzOwogCi0gICAgLyogTnVt YmVyIG9mIGZpZWxkcy4gICovCi0gICAgaW50IG5maWVsZHMgPSAwOworICAv KiBDb250ZXh0LiAgKi8KKyAgY3RmX2NvbnRleHRfdCAqY3VyX2NvbnRleHQ7 CiAKLSAgICAvKiBDb250ZXh0LiAgKi8KLSAgICBjdGZfY29udGV4dF90IGN1 cl9jb250ZXh0OworICAvKiBQYXJlbnQgdHlwZS4gICovCisgIHN0cnVjdCB0 eXBlICpwdHlwZTsKIAotICAgIC8qIFBhcmVudCB0eXBlLiAgKi8KLSAgICBz dHJ1Y3QgdHlwZSAqcHR5cGU7CisgIC8qIHR5cGVkZWZzIGRlZmluZWQgaW5z aWRlIHRoaXMgY2xhc3MuICBUWVBFREVGX0ZJRUxEX0xJU1QgY29udGFpbnMg aGVhZAorICAgICBvZiBhIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIFRZUEVE RUZfRklFTERfTElTVF9DT1VOVCBlbGVtZW50cy4gICovCisgIHN0ZDo6dmVj dG9yPHN0cnVjdCBkZWNsX2ZpZWxkPiB0eXBlZGVmX2ZpZWxkX2xpc3Q7CiAK LSAgICAvKiB0eXBlZGVmcyBkZWZpbmVkIGluc2lkZSB0aGlzIGNsYXNzLiAg VFlQRURFRl9GSUVMRF9MSVNUIGNvbnRhaW5zIGhlYWQKLSAgICAgICBvZiBh IE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIFRZUEVERUZfRklFTERfTElTVF9D T1VOVCBlbGVtZW50cy4gICovCi0gICAgc3RkOjp2ZWN0b3I8c3RydWN0IGRl Y2xfZmllbGQ+IHR5cGVkZWZfZmllbGRfbGlzdDsKKyAgLyogTmVzdGVkIHR5 cGVzIGRlZmluZWQgYnkgdGhpcyBzdHJ1Y3QgYW5kIHRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgaW4KKyAgICAgdGhpcyBsaXN0LiAgKi8KKyAgc3RkOjp2ZWN0 b3I8c3RydWN0IGRlY2xfZmllbGQ+IG5lc3RlZF90eXBlc19saXN0OworfTsK IAotICAgIC8qIE5lc3RlZCB0eXBlcyBkZWZpbmVkIGJ5IHRoaXMgc3RydWN0 IGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluCi0gICAgICAgdGhpcyBs aXN0LiAgKi8KLSAgICBzdGQ6OnZlY3RvcjxzdHJ1Y3QgZGVjbF9maWVsZD4g bmVzdGVkX3R5cGVzX2xpc3Q7Ci0gIH07CiAKLQwKIC8qIExvY2FsIGZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8KIAogc3RhdGljIHZvaWQgcHN5bXRhYl90b19z eW10YWIgKHN0cnVjdCBwYXJ0aWFsX3N5bXRhYiAqKTsKQEAgLTEzOCwyNCAr MTM1LDI0IEBAIHN0YXRpYyBpbnQgY3RmX2FkZF90eXBlX2NiIChjdGZfaWRf dCB0aWQsIHZvaWQgKmFyZyk7CiBzdGF0aWMgc3RydWN0IHR5cGUgKnJlYWRf YXJyYXlfdHlwZSAoY3RmX2NvbnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQp OwogCiBzdGF0aWMgc3RydWN0IHR5cGUgKnJlYWRfcG9pbnRlcl90eXBlIChj dGZfY29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zl9pZF90IGJ0aWQpOwor CQkJCSAgICAgICBjdGZfaWRfdCBidGlkKTsKIAogc3RhdGljIHN0cnVjdCB0 eXBlICpyZWFkX3N0cnVjdHVyZV90eXBlIChjdGZfY29udGV4dF90ICpjY3As IGN0Zl9pZF90IHRpZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAqcmVhZF9l bnVtX3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwgY3RmX2lkX3QgdGlkKTsK IAogc3RhdGljIHN0cnVjdCB0eXBlICpyZWFkX3R5cGVkZWZfdHlwZSAoY3Rm X2NvbnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjdGZfaWRfdCBidGlkLCBjb25z dCBjaGFyICpuYW1lKTsKKwkJCQkgICAgICAgY3RmX2lkX3QgYnRpZCwgY29u c3QgY2hhciAqbmFtZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAqcmVhZF90 eXBlX3JlY29yZCAoY3RmX2NvbnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQp OwogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3N0cnVjdHVyZV90eXBlIChjdGZf Y29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCk7CiAKIHN0YXRpYyB2b2lk IHByb2Nlc3Nfc3RydWN0X21lbWJlcnMgKGN0Zl9jb250ZXh0X3QgKmNjcCwg Y3RmX2lkX3QgdGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHR5cGUgKnR5cGUpOworCQkJCSAgICBzdHJ1Y3QgdHlwZSAqdHlwZSk7CiAK LXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICogbmV3X3N5bWJvbCAoY3RmX2NvbnRl eHRfdCAqY2NwLCBzdHJ1Y3QgdHlwZSAqdHlwZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3RmX2lkX3QgdGlkKTsKK3N0YXRpYyBz dHJ1Y3Qgc3ltYm9sICpuZXdfc3ltYm9sIChjdGZfY29udGV4dF90ICpjY3As IHN0cnVjdCB0eXBlICp0eXBlLAorCQkJCSAgY3RmX2lkX3QgdGlkKTsKIAog c3RydWN0IGN0Zl90aWRfYW5kX3R5cGUKIHsKQEAgLTE5OCw4ICsxOTUsOCBA QCBzZXRfdGlkX3R5cGUgKHN0cnVjdCBvYmpmaWxlICpvZiwgY3RmX2lkX3Qg dGlkLCBzdHJ1Y3QgdHlwZSAqdHlwKQogICBpZiAoaHRhYiA9PSBOVUxMKQog ICAgIHsKICAgICAgIGh0YWIgPSBodGFiX2NyZWF0ZV9hbGxvYyAoMSwgdGlk X2FuZF90eXBlX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpZF9hbmRfdHlwZV9lcSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgeGNhbGxvYywgeGZyZWUpOworCQkJCXRpZF9hbmRf dHlwZV9lcSwKKwkJCQlOVUxMLCB4Y2FsbG9jLCB4ZnJlZSk7CiAgICAgICBj dGZfdGlkX2tleS5zZXQgKG9mLCBodGFiKTsKICAgICB9CiAKQEAgLTIwOSw3 ICsyMDYsNyBAQCBzZXRfdGlkX3R5cGUgKHN0cnVjdCBvYmpmaWxlICpvZiwg Y3RmX2lkX3QgdGlkLCBzdHJ1Y3QgdHlwZSAqdHlwKQogICBzbG90ID0gKHN0 cnVjdCBjdGZfdGlkX2FuZF90eXBlICoqKSBodGFiX2ZpbmRfc2xvdCAoaHRh YiwgJmlkcywgSU5TRVJUKTsKICAgaWYgKCpzbG90KQogICAgIGNvbXBsYWlu dCAoXygiQW4gaW50ZXJuYWwgR0RCIHByb2JsZW06IGN0Zl8gaWRfdCAlbGQg dHlwZSBhbHJlYWR5IHNldCIpLAotICAgICAgICAgICAgICAgKHRpZCkpOwor CSAgICAgICAodGlkKSk7CiAgICpzbG90ID0gWE9CTkVXICgmb2YtPm9iamZp bGVfb2JzdGFjaywgc3RydWN0IGN0Zl90aWRfYW5kX3R5cGUpOwogICAqKnNs b3QgPSBpZHM7CiAgIHJldHVybiB0eXA7CkBAIC0yNDgsOSArMjQ1LDcgQEAg Z2V0X2JpdHNpemUgKGN0Zl9maWxlX3QgKmZwLCBjdGZfaWRfdCB0aWQsIHVp bnQzMl90IGtpbmQpCiAgICAgICB8fCBraW5kID09IENURl9LX0ZMT0FUKQog ICAgICAgJiYgY3RmX3R5cGVfcmVmZXJlbmNlIChmcCwgdGlkKSAhPSBDVEZf RVJSCiAgICAgICAmJiBjdGZfdHlwZV9lbmNvZGluZyAoZnAsIHRpZCwgJmNl dCkgIT0gQ1RGX0VSUikKLSAgICB7Ci0gICAgICByZXR1cm4gY2V0LmN0ZV9i aXRzOwotICAgIH0KKyAgICByZXR1cm4gY2V0LmN0ZV9iaXRzOwogCiAgIHJl dHVybiAwOwogfQpAQCAtMjc2LDE1ICsyNzEsMTUgQEAgc2V0X3N5bWJvbF9h ZGRyZXNzIChzdHJ1Y3Qgb2JqZmlsZSAqb2YsIHN0cnVjdCBzeW1ib2wgKnN5 bSwgY29uc3QgY2hhciAqbmFtZSkKIHN0YXRpYyB2b2lkCiBhdHRhY2hfZmll bGRzX3RvX3R5cGUgKHN0cnVjdCBmaWVsZF9pbmZvICpmaXAsIHN0cnVjdCB0 eXBlICp0eXBlKQogewotICBpbnQgbmZpZWxkcyA9IGZpcC0+bmZpZWxkczsK KyAgaW50IG5maWVsZHMgPSBmaXAtPmZpZWxkcy5zaXplICgpOwogCi0gIGlm ICghbmZpZWxkcykKKyAgaWYgKG5maWVsZHMgPT0gMCkKICAgICByZXR1cm47 CiAKICAgLyogUmVjb3JkIHRoZSBmaWVsZCBjb3VudCwgYWxsb2NhdGUgc3Bh Y2UgZm9yIHRoZSBhcnJheSBvZiBmaWVsZHMuICAqLwogICBUWVBFX05GSUVM RFMgKHR5cGUpID0gbmZpZWxkczsKLSAgVFlQRV9GSUVMRFMgKHR5cGUpID0g KHN0cnVjdCBmaWVsZCAqKQotICAgIFRZUEVfWkFMTE9DICh0eXBlLCBzaXpl b2YgKHN0cnVjdCBmaWVsZCkgKiBuZmllbGRzKTsKKyAgVFlQRV9GSUVMRFMg KHR5cGUpCisgICAgPSAoc3RydWN0IGZpZWxkICopIFRZUEVfWkFMTE9DICh0 eXBlLCBzaXplb2YgKHN0cnVjdCBmaWVsZCkgKiBuZmllbGRzKTsKIAogICAv KiBDb3B5IHRoZSBzYXZlZC11cCBmaWVsZHMgaW50byB0aGUgZmllbGQgdmVj dG9yLiAgKi8KICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZmllbGRzOyArK2kp CkBAIC0zMDAsMTYgKzI5NSwxNiBAQCBhdHRhY2hfZmllbGRzX3RvX3R5cGUg KHN0cnVjdCBmaWVsZF9pbmZvICpmaXAsIHN0cnVjdCB0eXBlICp0eXBlKQog CiBzdGF0aWMgc3RydWN0IHR5cGUgKgogY3RmX2luaXRfZmxvYXRfdHlwZSAo c3RydWN0IG9iamZpbGUgKm9iamZpbGUsCi0gICAgICAgICAgICAgICAgICAg ICBpbnQgYml0cywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l X2hpbnQpCisJCSAgICAgaW50IGJpdHMsCisJCSAgICAgY29uc3QgY2hhciAq bmFtZSwKKwkJICAgICBjb25zdCBjaGFyICpuYW1lX2hpbnQpCiB7CiAgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X29iamZpbGVfYXJjaCAob2Jq ZmlsZSk7CiAgIGNvbnN0IHN0cnVjdCBmbG9hdGZvcm1hdCAqKmZvcm1hdDsK ICAgc3RydWN0IHR5cGUgKnR5cGU7CiAKICAgZm9ybWF0ID0gZ2RiYXJjaF9m bG9hdGZvcm1hdF9mb3JfdHlwZSAoZ2RiYXJjaCwgbmFtZV9oaW50LCBiaXRz KTsKLSAgaWYgKGZvcm1hdCkKKyAgaWYgKGZvcm1hdCAhPSBOVUxMKQogICAg IHR5cGUgPSBpbml0X2Zsb2F0X3R5cGUgKG9iamZpbGUsIGJpdHMsIG5hbWUs IGZvcm1hdCk7CiAgIGVsc2UKICAgICB0eXBlID0gaW5pdF90eXBlIChvYmpm aWxlLCBUWVBFX0NPREVfRVJST1IsIGJpdHMsIG5hbWUpOwpAQCAtMzE4LDE3 ICszMTMsMTcgQEAgY3RmX2luaXRfZmxvYXRfdHlwZSAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUsCiB9CiAKIC8qIENhbGxiYWNrIHRvIGFkZCBtZW1iZXIg TkFNRSB0byBhIHN0cnVjdC91bmlvbiB0eXBlLiBUSUQgaXMgdGhlIHR5cGUK LSAgIG9mIHN0cnVjdC91bmlvbiBtZW1iZXIsIE9GRlNFVCBpcyB0aGUgb2Zm c2V0IG9mIG1lbWJlciBpbiBiaXRzCi0gICAoZ2RiYXJjaF9iaXRzX2JpZ19l bmRpYW4oKSwgYW5kIEFSRyBjb250YWlucyB0aGUgZmllbGRfaW5mby4gICov CisgICBvZiBzdHJ1Y3QvdW5pb24gbWVtYmVyLCBPRkZTRVQgaXMgdGhlIG9m ZnNldCBvZiBtZW1iZXIgaW4gYml0cywKKyAgIGFuZCBBUkcgY29udGFpbnMg dGhlIGZpZWxkX2luZm8uICAqLwogCiBzdGF0aWMgaW50CiBjdGZfYWRkX21l bWJlcl9jYiAoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAg ICBjdGZfaWRfdCB0aWQsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQor CQkgICBjdGZfaWRfdCB0aWQsCisJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0 LAorCQkgICB2b2lkICphcmcpCiB7Ci0gIHN0cnVjdCBmaWVsZF9pbmZvICpm aXAgPSAoc3RydWN0IGZpZWxkX2luZm8gKilhcmc7Ci0gIGN0Zl9jb250ZXh0 X3QgKmNjcCA9ICZmaXAtPmN1cl9jb250ZXh0OworICBzdHJ1Y3QgZmllbGRf aW5mbyAqZmlwID0gKHN0cnVjdCBmaWVsZF9pbmZvICopIGFyZzsKKyAgY3Rm X2NvbnRleHRfdCAqY2NwID0gZmlwLT5jdXJfY29udGV4dDsKICAgc3RydWN0 IG5leHRmaWVsZCBuZXdfZmllbGQ7CiAgIHN0cnVjdCBmaWVsZCAqZnA7CiAg IHN0cnVjdCB0eXBlICp0OwpAQCAtMzM5LDI4ICszMzQsMjUgQEAgY3RmX2Fk ZF9tZW1iZXJfY2IgKGNvbnN0IGNoYXIgKm5hbWUsCiAKICAga2luZCA9IGN0 Zl90eXBlX2tpbmQgKGNjcC0+ZnAsIHRpZCk7CiAgIHQgPSBnZXRfdGlkX3R5 cGUgKGNjcC0+b2YsIHRpZCk7Ci0gIGlmICghdCkKKyAgaWYgKHQgPT0gTlVM TCkKICAgICB7CiAgICAgICB0ID0gcmVhZF90eXBlX3JlY29yZCAoY2NwLCB0 aWQpOwotICAgICAgaWYgKCF0KQotICAgICAgICB7Ci0gICAgICAgICAgY29t cGxhaW50IChfKCJjdGZfYWRkX21lbWJlcl9jYjogJXMgaGFzIE5PIHR5cGUg KCVsZCkiKSwgbmFtZSwgdGlkKTsKLSAgICAgICAgICB0ID0gb2JqZmlsZV90 eXBlIChjY3AtPm9mKS0+YnVpbHRpbl9lcnJvcjsKLSAgICAgICAgICBzZXRf dGlkX3R5cGUgKGNjcC0+b2YsIHRpZCwgdCk7Ci0gICAgICAgIH0KKyAgICAg IGlmICh0ID09IE5VTEwpCisJeworCSAgY29tcGxhaW50IChfKCJjdGZfYWRk X21lbWJlcl9jYjogJXMgaGFzIE5PIHR5cGUgKCVsZCkiKSwgbmFtZSwgdGlk KTsKKwkgIHQgPSBvYmpmaWxlX3R5cGUgKGNjcC0+b2YpLT5idWlsdGluX2Vy cm9yOworCSAgc2V0X3RpZF90eXBlIChjY3AtPm9mLCB0aWQsIHQpOworCX0K ICAgICB9CiAKICAgaWYgKGtpbmQgPT0gQ1RGX0tfU1RSVUNUIHx8IGtpbmQg PT0gQ1RGX0tfVU5JT04pCi0gICAgewotICAgICAgcHJvY2Vzc19zdHJ1Y3Rf bWVtYmVycyAoY2NwLCB0aWQsIHQpOwotICAgIH0KKyAgICBwcm9jZXNzX3N0 cnVjdF9tZW1iZXJzIChjY3AsIHRpZCwgdCk7CiAKICAgRklFTERfVFlQRSAo KmZwKSA9IHQ7CiAgIFNFVF9GSUVMRF9CSVRQT1MgKCpmcCwgb2Zmc2V0IC8g VEFSR0VUX0NIQVJfQklUKTsKICAgRklFTERfQklUU0laRSAoKmZwKSA9IGdl dF9iaXRzaXplIChjY3AtPmZwLCB0aWQsIGtpbmQpOwogCiAgIGZpcC0+Zmll bGRzLmVtcGxhY2VfYmFjayAobmV3X2ZpZWxkKTsKLSAgZmlwLT5uZmllbGRz Kys7CiAKICAgcmV0dXJuIDA7CiB9CkBAIC0zNjksMjAgKzM2MSwyMCBAQCBj dGZfYWRkX21lbWJlcl9jYiAoY29uc3QgY2hhciAqbmFtZSwKICAgIEFSRyBj b250YWlucyB0aGUgZmllbGRfaW5mby4gICovCiAKIHN0YXRpYyBpbnQKLWN0 Zl9hZGRfZW51bV9tZW1iZXJfY2IgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBl dmFsLCB2b2lkICphcmcpCitjdGZfYWRkX2VudW1fbWVtYmVyX2NiIChjb25z dCBjaGFyICpuYW1lLCBpbnQgZW51bV92YWx1ZSwgdm9pZCAqYXJnKQogewot ICBzdHJ1Y3QgZmllbGRfaW5mbyAqZmlwID0gKHN0cnVjdCBmaWVsZF9pbmZv ICopYXJnOworICBzdHJ1Y3QgZmllbGRfaW5mbyAqZmlwID0gKHN0cnVjdCBm aWVsZF9pbmZvICopIGFyZzsKICAgc3RydWN0IG5leHRmaWVsZCBuZXdfZmll bGQ7CiAgIHN0cnVjdCBmaWVsZCAqZnA7Ci0gIGN0Zl9jb250ZXh0X3QgKmNj cCA9ICZmaXAtPmN1cl9jb250ZXh0OworICBjdGZfY29udGV4dF90ICpjY3Ag PSBmaXAtPmN1cl9jb250ZXh0OwogCiAgIGZwID0gJm5ld19maWVsZC5maWVs ZDsKICAgRklFTERfTkFNRSAoKmZwKSA9IG5hbWU7CiAgIEZJRUxEX1RZUEUg KCpmcCkgPSBOVUxMOwotICBTRVRfRklFTERfRU5VTVZBTCAoKmZwLCBldmFs KTsKKyAgU0VUX0ZJRUxEX0VOVU1WQUwgKCpmcCwgZW51bV92YWx1ZSk7CiAg IEZJRUxEX0JJVFNJWkUgKCpmcCkgPSAwOwogCi0gIGlmIChuYW1lKQorICBp ZiAobmFtZSAhPSBOVUxMKQogICAgIHsKICAgICAgIHN0cnVjdCBzeW1ib2wg KnN5bSA9IGFsbG9jYXRlX3N5bWJvbCAoY2NwLT5vZik7CiAgICAgICBPQkpT VEFUIChjY3AtPm9mLCBuX3N5bXMrKyk7CkBAIC0zOTYsMTMgKzM4OCwxMiBA QCBjdGZfYWRkX2VudW1fbWVtYmVyX2NiIChjb25zdCBjaGFyICpuYW1lLCBp bnQgZXZhbCwgdm9pZCAqYXJnKQogICAgIH0KIAogICBmaXAtPmZpZWxkcy5l bXBsYWNlX2JhY2sgKG5ld19maWVsZCk7Ci0gIGZpcC0+bmZpZWxkcysrOwog CiAgIHJldHVybiAwOwogfQogCi0vKiBBZGQgYSBuZXcgc3ltYm9sIGVudHJ5 LCB3aXRoIGl0cyBuYW1lIGZyb20gVFAsIGl0cyBhY2Nlc3MgaW5kZXggYW5k Ci0gICBkb21haW4gZnJvbSBUUCdzIGtpbmQsIGFuZCBpdHMgdHlwZSBmcm9t IFRQWUUuICAqLworLyogQWRkIGEgbmV3IHN5bWJvbCBlbnRyeSwgd2l0aCBp dHMgbmFtZSBmcm9tIFRJRCwgaXRzIGFjY2VzcyBpbmRleCBhbmQKKyAgIGRv bWFpbiBmcm9tIFRJRCdzIGtpbmQsIGFuZCBpdHMgdHlwZSBmcm9tIFRZUEUu ICAqLwogCiBzdGF0aWMgc3RydWN0IHN5bWJvbCAqCiBuZXdfc3ltYm9sIChj dGZfY29udGV4dF90ICpjY3AsIHN0cnVjdCB0eXBlICp0eXBlLCBjdGZfaWRf dCB0aWQpCkBAIC00MTEsMTYgKzQwMiwxNyBAQCBuZXdfc3ltYm9sIChjdGZf Y29udGV4dF90ICpjY3AsIHN0cnVjdCB0eXBlICp0eXBlLCBjdGZfaWRfdCB0 aWQpCiAgIGN0Zl9maWxlX3QgKmZwID0gY2NwLT5mcDsKICAgc3RydWN0IHN5 bWJvbCAqc3ltID0gTlVMTDsKIAotICBjb25zdCBjaGFyICpuYW1lID0gY3Rm X3R5cGVfYW5hbWVfcmF3IChmcCwgdGlkKTsKLSAgaWYgKG5hbWUpCisgIGNo YXIgKm5hbWUgPSBjdGZfdHlwZV9hbmFtZV9yYXcgKGZwLCB0aWQpOworICBp ZiAobmFtZSAhPSBOVUxMKQogICAgIHsKICAgICAgIHN5bSA9IGFsbG9jYXRl X3N5bWJvbCAob2JqZmlsZSk7CiAgICAgICBPQkpTVEFUIChvYmpmaWxlLCBu X3N5bXMrKyk7CiAKICAgICAgIFNZTUJPTF9TRVRfTEFOR1VBR0UgKHN5bSwg bGFuZ3VhZ2VfYywgJm9iamZpbGUtPm9iamZpbGVfb2JzdGFjayk7Ci0gICAg ICBTWU1CT0xfU0VUX05BTUVTIChzeW0sIHhzdHJkdXAgKG5hbWUpLCBzdHJs ZW4gKG5hbWUpLCAwLCBvYmpmaWxlKTsKKyAgICAgIFNZTUJPTF9TRVRfTkFN RVMgKHN5bSwgbmFtZSwgc3RybGVuIChuYW1lKSwgMSwgb2JqZmlsZSk7CiAg ICAgICBTWU1CT0xfRE9NQUlOIChzeW0pID0gVkFSX0RPTUFJTjsKICAgICAg IFNZTUJPTF9BQ0xBU1NfSU5ERVggKHN5bSkgPSBMT0NfT1BUSU1JWkVEX09V VDsKKyAgICAgIGZyZWUgKG5hbWUpOwogCiAgICAgICBpZiAodHlwZSAhPSBO VUxMKQogCVNZTUJPTF9UWVBFIChzeW0pID0gdHlwZTsKQEAgLTQyOCwzMyAr NDIwLDMzIEBAIG5ld19zeW1ib2wgKGN0Zl9jb250ZXh0X3QgKmNjcCwgc3Ry dWN0IHR5cGUgKnR5cGUsIGN0Zl9pZF90IHRpZCkKICAgICAgIHVpbnQzMl90 IGtpbmQgPSBjdGZfdHlwZV9raW5kIChmcCwgdGlkKTsKICAgICAgIHN3aXRj aCAoa2luZCkKIAl7Ci0gICAgICAJICBjYXNlIENURl9LX1NUUlVDVDoKLSAg ICAgIAkgIGNhc2UgQ1RGX0tfVU5JT046Ci0gICAgICAJICBjYXNlIENURl9L X0VOVU06CisJICBjYXNlIENURl9LX1NUUlVDVDoKKwkgIGNhc2UgQ1RGX0tf VU5JT046CisJICBjYXNlIENURl9LX0VOVU06CiAJICAgIFNZTUJPTF9BQ0xB U1NfSU5ERVggKHN5bSkgPSBMT0NfVFlQRURFRjsKIAkgICAgU1lNQk9MX0RP TUFJTiAoc3ltKSA9IFNUUlVDVF9ET01BSU47CiAJICAgIGJyZWFrOwotICAg ICAgCSAgY2FzZSBDVEZfS19GVU5DVElPTjoKKwkgIGNhc2UgQ1RGX0tfRlVO Q1RJT046CiAJICAgIFNZTUJPTF9BQ0xBU1NfSU5ERVggKHN5bSkgPSBMT0Nf U1RBVElDOwogCSAgICBicmVhazsKLSAgICAgIAkgIGNhc2UgQ1RGX0tfQ09O U1Q6CisJICBjYXNlIENURl9LX0NPTlNUOgogCSAgICBpZiAoVFlQRV9DT0RF IChTWU1CT0xfVFlQRSAoc3ltKSkgPT0gVFlQRV9DT0RFX1ZPSUQpCiAJICAg ICAgU1lNQk9MX1RZUEUgKHN5bSkgPSBvYmpmaWxlX3R5cGUgKG9iamZpbGUp LT5idWlsdGluX2ludDsKIAkgICAgYnJlYWs7Ci0gICAgICAJICBjYXNlIENU Rl9LX1RZUEVERUY6Ci0gICAgICAJICBjYXNlIENURl9LX0lOVEVHRVI6Ci0g ICAgICAJICBjYXNlIENURl9LX0ZMT0FUOgorCSAgY2FzZSBDVEZfS19UWVBF REVGOgorCSAgY2FzZSBDVEZfS19JTlRFR0VSOgorCSAgY2FzZSBDVEZfS19G TE9BVDoKIAkgICAgU1lNQk9MX0FDTEFTU19JTkRFWCAoc3ltKSA9IExPQ19U WVBFREVGOwogCSAgICBTWU1CT0xfRE9NQUlOIChzeW0pID0gVkFSX0RPTUFJ TjsKIAkgICAgYnJlYWs7Ci0gICAgICAJICBjYXNlIENURl9LX1BPSU5URVI6 CisJICBjYXNlIENURl9LX1BPSU5URVI6CiAJICAgIGJyZWFrOwotICAgICAg CSAgY2FzZSBDVEZfS19WT0xBVElMRToKLSAgICAgIAkgIGNhc2UgQ1RGX0tf UkVTVFJJQ1Q6CisJICBjYXNlIENURl9LX1ZPTEFUSUxFOgorCSAgY2FzZSBD VEZfS19SRVNUUklDVDoKIAkgICAgYnJlYWs7Ci0gICAgICAJICBjYXNlIENU Rl9LX1NMSUNFOgotICAgICAgCSAgY2FzZSBDVEZfS19BUlJBWToKLSAgICAg IAkgIGNhc2UgQ1RGX0tfVU5LTk9XTjoKKwkgIGNhc2UgQ1RGX0tfU0xJQ0U6 CisJICBjYXNlIENURl9LX0FSUkFZOgorCSAgY2FzZSBDVEZfS19VTktOT1dO OgogCSAgICBicmVhazsKIAl9CiAKQEAgLTQ3NCwyMyArNDY2LDI5IEBAIHJl YWRfYmFzZV90eXBlIChjdGZfY29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRp ZCkKICAgY3RmX2ZpbGVfdCAqZnAgPSBjY3AtPmZwOwogICBjdGZfZW5jb2Rp bmdfdCBjZXQ7CiAgIHN0cnVjdCB0eXBlICp0eXBlID0gTlVMTDsKLSAgY29u c3QgY2hhciAqbmFtZTsKKyAgY2hhciAqbmFtZTsKICAgdWludDMyX3Qga2lu ZDsKIAogICBpZiAoY3RmX3R5cGVfZW5jb2RpbmcgKGZwLCB0aWQsICZjZXQp KQogICAgIHsKICAgICAgIGNvbXBsYWludCAoXygiY3RmX3R5cGVfZW5jb2Rp bmcgcmVhZF9iYXNlX3R5cGUgZmFpbGVkIC0gJXMiKSwKLSAgICAgICAgICAg ICAgICAgY3RmX2Vycm1zZyAoY3RmX2Vycm5vIChmcCkpKTsKKwkJIGN0Zl9l cnJtc2cgKGN0Zl9lcnJubyAoZnApKSk7CiAgICAgICByZXR1cm4gTlVMTDsK ICAgICB9CiAKICAgbmFtZSA9IGN0Zl90eXBlX2FuYW1lX3JhdyAoZnAsIHRp ZCk7Ci0gIGlmICghbmFtZSB8fCAobmFtZSAmJiAhc3RybGVuIChuYW1lKSkp CisgIGlmIChuYW1lID09IE5VTEwgfHwgc3RybGVuIChuYW1lKSA9PSAwKQog ICAgIHsKICAgICAgIG5hbWUgPSBjdGZfdHlwZV9hbmFtZSAoZnAsIHRpZCk7 Ci0gICAgICBpZiAoIW5hbWUpCi0gICAgICAgIGNvbXBsYWludCAoXygiY3Rm X3R5cGVfYW5hbWUgcmVhZF9iYXNlX3R5cGUgZmFpbGVkIC0gJXMiKSwKLSAg ICAgICAgICAgICAgICAgICBjdGZfZXJybXNnIChjdGZfZXJybm8gKGZwKSkp OworICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKKwljb21wbGFpbnQgKF8oImN0 Zl90eXBlX2FuYW1lIHJlYWRfYmFzZV90eXBlIGZhaWxlZCAtICVzIiksCisJ CSAgIGN0Zl9lcnJtc2cgKGN0Zl9lcnJubyAoZnApKSk7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgY2hhciAqZHVwX25hbWUgPSBuYW1lOworICAg ICAgbmFtZSA9IG9ic3RhY2tfc3RyZHVwICgmb2YtPm9iamZpbGVfb2JzdGFj aywgbmFtZSk7CisgICAgICBmcmVlIChkdXBfbmFtZSk7CiAgICAgfQogCiAg IGtpbmQgPSBjdGZfdHlwZV9raW5kIChmcCwgdGlkKTsKQEAgLTUwMywxMCAr NTAxLDEwIEBAIHJlYWRfYmFzZV90eXBlIChjdGZfY29udGV4dF90ICpjY3As IGN0Zl9pZF90IHRpZCkKICAgICAgIGlzY2hhciA9IGNldC5jdGVfZm9ybWF0 ICYgQ1RGX0lOVF9DSEFSOwogICAgICAgaXNib29sID0gY2V0LmN0ZV9mb3Jt YXQgJiBDVEZfSU5UX0JPT0w7CiAgICAgICBpZiAoaXNjaGFyKQotICAgICAg CXR5cGUgPSBpbml0X2NoYXJhY3Rlcl90eXBlIChvZiwgVEFSR0VUX0NIQVJf QklULCAhaXNzaWduZWQsIG5hbWUpOworCXR5cGUgPSBpbml0X2NoYXJhY3Rl cl90eXBlIChvZiwgVEFSR0VUX0NIQVJfQklULCAhaXNzaWduZWQsIG5hbWUp OwogICAgICAgZWxzZSBpZiAoaXNib29sKQotICAgICAgCXR5cGUgPSBpbml0 X2Jvb2xlYW5fdHlwZSAob2YsIGdkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzc2lnbmVk LCBuYW1lKTsKKwl0eXBlID0gaW5pdF9ib29sZWFuX3R5cGUgKG9mLCBnZGJh cmNoX2ludF9iaXQgKGdkYmFyY2gpLAorCQkJCSAgIWlzc2lnbmVkLCBuYW1l KTsKICAgICAgIGVsc2UKIAl7CiAJICBpbnQgYml0czsKQEAgLTUxNCwyNSAr NTEyLDIzIEBAIHJlYWRfYmFzZV90eXBlIChjdGZfY29udGV4dF90ICpjY3As IGN0Zl9pZF90IHRpZCkKIAkgICAgYml0cyA9IGNldC5jdGVfYml0czsKIAkg IGVsc2UKIAkgICAgYml0cyA9IGdkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCk7 Ci0gICAgICAJICB0eXBlID0gaW5pdF9pbnRlZ2VyX3R5cGUgKG9mLCBiaXRz LCAhaXNzaWduZWQsIG5hbWUpOworCSAgdHlwZSA9IGluaXRfaW50ZWdlcl90 eXBlIChvZiwgYml0cywgIWlzc2lnbmVkLCBuYW1lKTsKIAl9CiAgICAgfQog ICBlbHNlIGlmIChraW5kID09IENURl9LX0ZMT0FUKQogICAgIHsKICAgICAg IHVpbnQzMl90IGlzZmx0OwogICAgICAgaXNmbHQgPSAhKChjZXQuY3RlX2Zv cm1hdCAmIENURl9GUF9JTUFHUlkpID09IENURl9GUF9JTUFHUlkKLSAgICAg ICAgICAgICAgICAgfHwgKGNldC5jdGVfZm9ybWF0ICYgQ1RGX0ZQX0RJTUFH UlkpID09IENURl9GUF9ESU1BR1JZCi0gICAgICAgICAgICAgICAgIHx8IChj ZXQuY3RlX2Zvcm1hdCAmIENURl9GUF9MRElNQUdSWSkgPT0gQ1RGX0ZQX0xE SU1BR1JZKTsKKwkJIHx8IChjZXQuY3RlX2Zvcm1hdCAmIENURl9GUF9ESU1B R1JZKSA9PSBDVEZfRlBfRElNQUdSWQorCQkgfHwgKGNldC5jdGVfZm9ybWF0 ICYgQ1RGX0ZQX0xESU1BR1JZKSA9PSBDVEZfRlBfTERJTUFHUlkpOwogICAg ICAgaWYgKGlzZmx0KQotICAgICAgICB7Ci0JICB0eXBlID0gY3RmX2luaXRf ZmxvYXRfdHlwZSAob2YsIGNldC5jdGVfYml0cywgbmFtZSwgbmFtZSk7Ci0g ICAgICAgIH0KKwl0eXBlID0gY3RmX2luaXRfZmxvYXRfdHlwZSAob2YsIGNl dC5jdGVfYml0cywgbmFtZSwgbmFtZSk7CiAgICAgICBlbHNlCi0gICAgICAg IHsKLQkgIHN0cnVjdCB0eXBlICp0OwotCSAgdCA9IGN0Zl9pbml0X2Zsb2F0 X3R5cGUgKG9mLCBjZXQuY3RlX2JpdHMgLyAyLCBOVUxMLCBuYW1lKTsKLSAg ICAgIAkgIHR5cGUgPSBpbml0X2NvbXBsZXhfdHlwZSAob2YsIG5hbWUsIHQp OwotICAgICAgICB9CisJeworCSAgc3RydWN0IHR5cGUgKnQKKwkgICAgPSBj dGZfaW5pdF9mbG9hdF90eXBlIChvZiwgY2V0LmN0ZV9iaXRzIC8gMiwgTlVM TCwgbmFtZSk7CisJICB0eXBlID0gaW5pdF9jb21wbGV4X3R5cGUgKG9mLCBu YW1lLCB0KTsKKwl9CiAgICAgfQogICBlbHNlCiAgICAgewpAQCAtNTQwLDcg KzUzNiw3IEBAIHJlYWRfYmFzZV90eXBlIChjdGZfY29udGV4dF90ICpjY3As IGN0Zl9pZF90IHRpZCkKICAgICAgIHR5cGUgPSBpbml0X3R5cGUgKG9mLCBU WVBFX0NPREVfRVJST1IsIGNldC5jdGVfYml0cywgbmFtZSk7CiAgICAgfQog Ci0gIGlmIChuYW1lICYmIHN0cmNtcCAobmFtZSwgImNoYXIiKSA9PSAwKQor ICBpZiAobmFtZSAhPSBOVUxMICYmIHN0cmNtcCAobmFtZSwgImNoYXIiKSA9 PSAwKQogICAgIFRZUEVfTk9TSUdOICh0eXBlKSA9IDE7CiAKICAgcmV0dXJu IHNldF90aWRfdHlwZSAob2YsIHRpZCwgdHlwZSk7CkBAIC01NTUsOCArNTUx LDggQEAgcHJvY2Vzc19iYXNlX3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwg Y3RmX2lkX3QgdGlkKQogICBuZXdfc3ltYm9sIChjY3AsIHR5cGUsIHRpZCk7 CiB9CiAKLS8qIFN0YXJ0IGEgc3RydWN0dXJlIG9yIHVuaW9uIHNjb3BlIChk ZWZpbml0aW9uKSB3aXRoIFRJRCBhbmQgVFAgdG8gY3JlYXRlCi0gICBhIHR5 cGUgZm9yIHRoZSBzdHJ1Y3R1cmUgb3IgdW5pb24uCisvKiBTdGFydCBhIHN0 cnVjdHVyZSBvciB1bmlvbiBzY29wZSAoZGVmaW5pdGlvbikgd2l0aCBUSUQg dG8gY3JlYXRlIGEgdHlwZQorICAgZm9yIHRoZSBzdHJ1Y3R1cmUgb3IgdW5p b24uCiAKICAgIEZpbGwgaW4gdGhlIHR5cGUncyBuYW1lIGFuZCBnZW5lcmFs IHByb3BlcnRpZXMuIFRoZSBtZW1iZXJzIHdpbGwgbm90IGJlCiAgICBwcm9j ZXNzZWQsIG5vciBhIHN5bWJvbCB0YWJsZSBlbnRyeSBiZSBkb25lIHVudGls IHByb2Nlc3Nfc3RydWN0dXJlX3R5cGUKQEAgLTU2OCwyMiArNTY0LDI0IEBA IHJlYWRfc3RydWN0dXJlX3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwgY3Rm X2lkX3QgdGlkKQogICBzdHJ1Y3Qgb2JqZmlsZSAqb2YgPSBjY3AtPm9mOwog ICBjdGZfZmlsZV90ICpmcCA9IGNjcC0+ZnA7CiAgIHN0cnVjdCB0eXBlICp0 eXBlOwotICBjb25zdCBjaGFyICpuYW1lOworICBjaGFyICpuYW1lOwogICB1 aW50MzJfdCBraW5kOwogCiAgIHR5cGUgPSBhbGxvY190eXBlIChvZik7CisK ICAgbmFtZSA9IGN0Zl90eXBlX2FuYW1lX3JhdyAoZnAsIHRpZCk7Ci0gIGlm IChuYW1lICYmIHN0cmxlbiAobmFtZSkpCi0gICAgVFlQRV9OQU1FICh0eXBl KSA9IG5hbWU7Ci0gIGtpbmQgPSBjdGZfdHlwZV9raW5kIChmcCwgdGlkKTsK LSAgaWYgKGtpbmQgPT0gQ1RGX0tfVU5JT04pCisgIGlmIChuYW1lICE9IE5V TEwgJiYgc3RybGVuIChuYW1lKSAhPSAwKQogICAgIHsKLSAgICAgIFRZUEVf Q09ERSAodHlwZSkgPSBUWVBFX0NPREVfVU5JT047CisgICAgICBUWVBFX05B TUUgKHR5cGUpID0gb2JzdGFja19zdHJkdXAgKCZvZi0+b2JqZmlsZV9vYnN0 YWNrLCBuYW1lKTsKKyAgICAgIGZyZWUgKG5hbWUpOwogICAgIH0KKworICBr aW5kID0gY3RmX3R5cGVfa2luZCAoZnAsIHRpZCk7CisgIGlmIChraW5kID09 IENURl9LX1VOSU9OKQorICAgIFRZUEVfQ09ERSAodHlwZSkgPSBUWVBFX0NP REVfVU5JT047CiAgIGVsc2UKLSAgICB7Ci0gICAgICBUWVBFX0NPREUgKHR5 cGUpID0gVFlQRV9DT0RFX1NUUlVDVDsKLSAgICB9CisgICAgVFlQRV9DT0RF ICh0eXBlKSA9IFRZUEVfQ09ERV9TVFJVQ1Q7CisKICAgVFlQRV9MRU5HVEgg KHR5cGUpID0gY3RmX3R5cGVfc2l6ZSAoZnAsIHRpZCk7CiAgIHNldF90eXBl X2FsaWduICh0eXBlLCBjdGZfdHlwZV9hbGlnbiAoZnAsIHRpZCkpOwogCkBA IC01OTUsMjAgKzU5MywxNSBAQCByZWFkX3N0cnVjdHVyZV90eXBlIChjdGZf Y29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCkKIAogc3RhdGljIHZvaWQK IHByb2Nlc3Nfc3RydWN0X21lbWJlcnMgKGN0Zl9jb250ZXh0X3QgKmNjcCwK LSAgICAgICAgICAgICAgICAgICAgICAgIGN0Zl9pZF90IHRpZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0eXBlICp0eXBlKQorCQkJY3Rm X2lkX3QgdGlkLAorCQkJc3RydWN0IHR5cGUgKnR5cGUpCiB7Ci0gIGN0Zl9m aWxlX3QgKmZwID0gY2NwLT5mcDsKICAgc3RydWN0IGZpZWxkX2luZm8gZmk7 CiAKLSAgZmkuY3VyX2NvbnRleHQuZnAgPSBmcDsKLSAgZmkuY3VyX2NvbnRl eHQub2YgPSBjY3AtPm9mOwotICBmaS5jdXJfY29udGV4dC5idWlsZGVyID0g Y2NwLT5idWlsZGVyOwotICBpZiAoY3RmX21lbWJlcl9pdGVyIChmcCwgdGlk LCBjdGZfYWRkX21lbWJlcl9jYiwgJmZpKSA9PSBDVEZfRVJSKQotICAgIHsK LSAgICAgIGNvbXBsYWludCAoXygiY3RmX21lbWJlcl9pdGVyIHByb2Nlc3Nf c3RydWN0X21lbWJlcnMgZmFpbGVkIC0gJXMiKSwKLSAgICAgICAgICAgICAg ICAgY3RmX2Vycm1zZyAoY3RmX2Vycm5vIChmcCkpKTsKLSAgICB9CisgIGZp LmN1cl9jb250ZXh0ID0gY2NwOworICBpZiAoY3RmX21lbWJlcl9pdGVyIChj Y3AtPmZwLCB0aWQsIGN0Zl9hZGRfbWVtYmVyX2NiLCAmZmkpID09IENURl9F UlIpCisgICAgY29tcGxhaW50IChfKCJjdGZfbWVtYmVyX2l0ZXIgcHJvY2Vz c19zdHJ1Y3RfbWVtYmVycyBmYWlsZWQgLSAlcyIpLAorCSAgICAgICBjdGZf ZXJybXNnIChjdGZfZXJybm8gKGNjcC0+ZnApKSk7CiAKICAgLyogQXR0YWNo IGZpZWxkcyB0byB0aGUgdHlwZS4gICovCiAgIGF0dGFjaF9maWVsZHNfdG9f dHlwZSAoJmZpLCB0eXBlKTsKQEAgLTYxNyw4ICs2MTAsNyBAQCBwcm9jZXNz X3N0cnVjdF9tZW1iZXJzIChjdGZfY29udGV4dF90ICpjY3AsCiB9CiAKIHN0 YXRpYyB2b2lkCi1wcm9jZXNzX3N0cnVjdHVyZV90eXBlIChjdGZfY29udGV4 dF90ICpjY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdGZfaWRfdCB0 aWQpCitwcm9jZXNzX3N0cnVjdHVyZV90eXBlIChjdGZfY29udGV4dF90ICpj Y3AsIGN0Zl9pZF90IHRpZCkKIHsKICAgc3RydWN0IHR5cGUgKnR5cGU7CiAK QEAgLTYyNiw3ICs2MTgsNyBAQCBwcm9jZXNzX3N0cnVjdHVyZV90eXBlIChj dGZfY29udGV4dF90ICpjY3AsCiAgIHByb2Nlc3Nfc3RydWN0X21lbWJlcnMg KGNjcCwgdGlkLCB0eXBlKTsKIH0KIAotLyogQ3JlYXRlIGEgZnVuY3Rpb24g dHlwZSBmb3IgVElELCBzZXQgaXRzIHJldHVybiB0eXBlIHVzaW5nIFRQLiAg Ki8KKy8qIENyZWF0ZSBhIGZ1bmN0aW9uIHR5cGUgZm9yIFRJRCBhbmQgc2V0 IGl0cyByZXR1cm4gdHlwZS4gICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAq CiByZWFkX2Z1bmNfa2luZF90eXBlIChjdGZfY29udGV4dF90ICpjY3AsIGN0 Zl9pZF90IHRpZCkKQEAgLTYzNSwxMiArNjI3LDE3IEBAIHJlYWRfZnVuY19r aW5kX3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwgY3RmX2lkX3QgdGlkKQog ICBjdGZfZmlsZV90ICpmcCA9IGNjcC0+ZnA7CiAgIHN0cnVjdCB0eXBlICp0 eXBlLCAqcmV0dHlwZTsKICAgY3RmX2Z1bmNpbmZvX3QgY2ZpOwotICBjb25z dCBjaGFyICpuYW1lOworICBjaGFyICpuYW1lOwogCiAgIHR5cGUgPSBhbGxv Y190eXBlIChvYmpmaWxlKTsKKwogICBuYW1lID0gY3RmX3R5cGVfYW5hbWVf cmF3IChmcCwgdGlkKTsKLSAgaWYgKG5hbWUgJiYgc3RybGVuIChuYW1lKSkK LSAgICBUWVBFX05BTUUgKHR5cGUpID0gbmFtZTsKKyAgaWYgKG5hbWUgIT0g TlVMTCAmJiBzdHJsZW4gKG5hbWUpICE9IDApCisgICAgeworICAgICAgVFlQ RV9OQU1FICh0eXBlKSA9IG9ic3RhY2tfc3RyZHVwICgmb2JqZmlsZS0+b2Jq ZmlsZV9vYnN0YWNrLCBuYW1lKTsKKyAgICAgIGZyZWUgKG5hbWUpOworICAg IH0KKwogICBUWVBFX0NPREUgKHR5cGUpID0gVFlQRV9DT0RFX0ZVTkM7CiAg IGN0Zl9mdW5jX3R5cGVfaW5mbyAoZnAsIHRpZCwgJmNmaSk7CiAgIHJldHR5 cGUgPSBnZXRfdGlkX3R5cGUgKG9iamZpbGUsIGNmaS5jdGNfcmV0dXJuKTsK QEAgLTY1MCwyMyArNjQ3LDI3IEBAIHJlYWRfZnVuY19raW5kX3R5cGUgKGN0 Zl9jb250ZXh0X3QgKmNjcCwgY3RmX2lkX3QgdGlkKQogICByZXR1cm4gc2V0 X3RpZF90eXBlIChvYmpmaWxlLCB0aWQsIHR5cGUpOwogfQogCi0vKiBHaXZl biBhIFRJRCBvZiBDVEZfS19FTlVNIHdpdGggdHlwZSBub2RlIFRQLCBwcm9j ZXNzIGFsbCB0aGUgbWVtYmVycyBvZgotICAgdGhlIGVudW1lcmF0aW9uLCBh bmQgY3JlYXRlIHRoZSBzeW1ib2wgZm9yIHRoZSBlbnVtZXJhdGlvbiB0eXBl LiAgKi8KKy8qIEdpdmVuIGEgVElEIG9mIENURl9LX0VOVU0sIHByb2Nlc3Mg YWxsIHRoZSBtZW1iZXJzIG9mIHRoZQorICAgZW51bWVyYXRpb24sIGFuZCBj cmVhdGUgdGhlIHN5bWJvbCBmb3IgdGhlIGVudW1lcmF0aW9uIHR5cGUuICAq LwogCiBzdGF0aWMgc3RydWN0IHR5cGUgKgotcmVhZF9lbnVtX3R5cGUgKGN0 Zl9jb250ZXh0X3QgKmNjcCwKLSAgICAgICAgICAgICAgICAgICAgICAgY3Rm X2lkX3QgdGlkKQorcmVhZF9lbnVtX3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNj cCwgY3RmX2lkX3QgdGlkKQogewogICBzdHJ1Y3Qgb2JqZmlsZSAqb2YgPSBj Y3AtPm9mOwogICBjdGZfZmlsZV90ICpmcCA9IGNjcC0+ZnA7CiAgIHN0cnVj dCB0eXBlICp0eXBlLCAqdGFyZ2V0X3R5cGU7CiAgIGN0Zl9mdW5jaW5mb190 IGZpOwotICBjb25zdCBjaGFyICpuYW1lOworICBjaGFyICpuYW1lOwogCiAg IHR5cGUgPSBhbGxvY190eXBlIChvZik7CisKICAgbmFtZSA9IGN0Zl90eXBl X2FuYW1lX3JhdyAoZnAsIHRpZCk7Ci0gIGlmIChuYW1lICYmIHN0cmxlbiAo bmFtZSkpCi0gICAgVFlQRV9OQU1FICh0eXBlKSA9IG5hbWU7CisgIGlmIChu YW1lICE9IE5VTEwgJiYgc3RybGVuIChuYW1lKSAhPSAwKQorICAgIHsKKyAg ICAgIFRZUEVfTkFNRSAodHlwZSkgPSBvYnN0YWNrX3N0cmR1cCAoJm9mLT5v YmpmaWxlX29ic3RhY2ssIG5hbWUpOworICAgICAgZnJlZSAobmFtZSk7Cisg ICAgfQorCiAgIFRZUEVfQ09ERSAodHlwZSkgPSBUWVBFX0NPREVfRU5VTTsK ICAgVFlQRV9MRU5HVEggKHR5cGUpID0gY3RmX3R5cGVfc2l6ZSAoZnAsIHRp ZCk7CiAgIGN0Zl9mdW5jX3R5cGVfaW5mbyAoZnAsIHRpZCwgJmZpKTsKQEAg LTY3OCwyNCArNjc5LDE4IEBAIHJlYWRfZW51bV90eXBlIChjdGZfY29udGV4 dF90ICpjY3AsCiB9CiAKIHN0YXRpYyB2b2lkCi1wcm9jZXNzX2VudW1fdHlw ZSAoY3RmX2NvbnRleHRfdCAqY2NwLAotICAgICAgICAgICAgICAgICAgIGN0 Zl9pZF90IHRpZCkKK3Byb2Nlc3NfZW51bV90eXBlIChjdGZfY29udGV4dF90 ICpjY3AsIGN0Zl9pZF90IHRpZCkKIHsKLSAgY3RmX2ZpbGVfdCAqZnAgPSBj Y3AtPmZwOwogICBzdHJ1Y3QgdHlwZSAqdHlwZTsKICAgc3RydWN0IGZpZWxk X2luZm8gZmk7CiAKICAgdHlwZSA9IHJlYWRfZW51bV90eXBlIChjY3AsIHRp ZCk7CiAKLSAgZmkuY3VyX2NvbnRleHQuZnAgPSBmcDsKLSAgZmkuY3VyX2Nv bnRleHQub2YgPSBjY3AtPm9mOwotICBmaS5jdXJfY29udGV4dC5idWlsZGVy ID0gY2NwLT5idWlsZGVyOworICBmaS5jdXJfY29udGV4dCA9IGNjcDsKICAg ZmkucHR5cGUgPSB0eXBlOwotICBpZiAoY3RmX2VudW1faXRlciAoZnAsIHRp ZCwgY3RmX2FkZF9lbnVtX21lbWJlcl9jYiwgJmZpKSA9PSBDVEZfRVJSKQot ICAgIHsKLSAgICAgIGNvbXBsYWludCAoXygiY3RmX2VudW1faXRlciBwcm9j ZXNzX2VudW1fdHlwZSBmYWlsZWQgLSAlcyIpLAotICAgICAgICAgICAgICAg ICBjdGZfZXJybXNnIChjdGZfZXJybm8gKGZwKSkpOwotICAgIH0KKyAgaWYg KGN0Zl9lbnVtX2l0ZXIgKGNjcC0+ZnAsIHRpZCwgY3RmX2FkZF9lbnVtX21l bWJlcl9jYiwgJmZpKSA9PSBDVEZfRVJSKQorICAgIGNvbXBsYWludCAoXygi Y3RmX2VudW1faXRlciBwcm9jZXNzX2VudW1fdHlwZSBmYWlsZWQgLSAlcyIp LAorCSAgICAgICBjdGZfZXJybXNnIChjdGZfZXJybm8gKGNjcC0+ZnApKSk7 CiAKICAgLyogQXR0YWNoIGZpZWxkcyB0byB0aGUgdHlwZS4gICovCiAgIGF0 dGFjaF9maWVsZHNfdG9fdHlwZSAoJmZpLCB0eXBlKTsKQEAgLTcwNywxMCAr NzAyLDEwIEBAIHByb2Nlc3NfZW51bV90eXBlIChjdGZfY29udGV4dF90ICpj Y3AsCiAKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAqCiBhZGRfYXJyYXlfY3ZfdHlw ZSAoY3RmX2NvbnRleHRfdCAqY2NwLAotICAgICAgICAgICAgICAgICAgIGN0 Zl9pZF90IHRpZCwKLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdHlwZSAq YmFzZV90eXBlLAotICAgICAgICAgICAgICAgICAgIGludCBjbnN0LAotICAg ICAgICAgICAgICAgICAgIGludCB2b2x0bCkKKwkJICAgY3RmX2lkX3QgdGlk LAorCQkgICBzdHJ1Y3QgdHlwZSAqYmFzZV90eXBlLAorCQkgICBpbnQgY25z dCwKKwkJICAgaW50IHZvbHRsKQogewogICBzdHJ1Y3QgdHlwZSAqZWxfdHlw ZSwgKmlubmVyX2FycmF5OwogCkBAIC03MTksOCArNzE0LDggQEAgYWRkX2Fy cmF5X2N2X3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwKIAogICB3aGlsZSAo VFlQRV9DT0RFIChUWVBFX1RBUkdFVF9UWVBFIChpbm5lcl9hcnJheSkpID09 IFRZUEVfQ09ERV9BUlJBWSkKICAgICB7Ci0gICAgICBUWVBFX1RBUkdFVF9U WVBFIChpbm5lcl9hcnJheSkgPQotCWNvcHlfdHlwZSAoVFlQRV9UQVJHRVRf VFlQRSAoaW5uZXJfYXJyYXkpKTsKKyAgICAgIFRZUEVfVEFSR0VUX1RZUEUg KGlubmVyX2FycmF5KQorCT0gY29weV90eXBlIChUWVBFX1RBUkdFVF9UWVBF IChpbm5lcl9hcnJheSkpOwogICAgICAgaW5uZXJfYXJyYXkgPSBUWVBFX1RB UkdFVF9UWVBFIChpbm5lcl9hcnJheSk7CiAgICAgfQogCkBAIC03MzIsNyAr NzI3LDcgQEAgYWRkX2FycmF5X2N2X3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNj cCwKICAgcmV0dXJuIHNldF90aWRfdHlwZSAoY2NwLT5vZiwgdGlkLCBiYXNl X3R5cGUpOwogfQogCi0vKiBSZWFkIGFsbCBpbmZvcm1hdGlvbiBmcm9tIGEg Q1RGX0tfQVJSQVkgVElEIHdpdGggdHlwZSBub2RlIFRQLiAgKi8KKy8qIFJl YWQgYWxsIGluZm9ybWF0aW9uIGZyb20gYSBUSUQgb2YgQ1RGX0tfQVJSQVku ICAqLwogCiBzdGF0aWMgc3RydWN0IHR5cGUgKgogcmVhZF9hcnJheV90eXBl IChjdGZfY29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCkKQEAgLTc0Niwx NyArNzQxLDE5IEBAIHJlYWRfYXJyYXlfdHlwZSAoY3RmX2NvbnRleHRfdCAq Y2NwLCBjdGZfaWRfdCB0aWQpCiAgIGlmIChjdGZfYXJyYXlfaW5mbyAoZnAs IHRpZCwgJmFyKSA9PSBDVEZfRVJSKQogICAgIHsKICAgICAgIGNvbXBsYWlu dCAoXygiY3RmX2FycmF5X2luZm8gcmVhZF9hcnJheV90eXBlIGZhaWxlZCAt ICVzIiksCi0gICAgICAgICAgICAgICAgIGN0Zl9lcnJtc2cgKGN0Zl9lcnJu byAoZnApKSk7CisJCSBjdGZfZXJybXNnIChjdGZfZXJybm8gKGZwKSkpOwog ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgIGVsZW1lbnRfdHlwZSA9 IGdldF90aWRfdHlwZSAob2JqZmlsZSwgYXIuY3RyX2NvbnRlbnRzKTsKLSAg aWYgKCFlbGVtZW50X3R5cGUpCisgIGlmIChlbGVtZW50X3R5cGUgPT0gTlVM TCkKICAgICByZXR1cm4gTlVMTDsKKwogICBpZHhfdHlwZSA9IGdldF90aWRf dHlwZSAob2JqZmlsZSwgYXIuY3RyX2luZGV4KTsKLSAgaWYgKCFpZHhfdHlw ZSkKKyAgaWYgKGlkeF90eXBlID09IE5VTEwpCiAgICAgaWR4X3R5cGUgPSBv YmpmaWxlX3R5cGUgKG9iamZpbGUpLT5idWlsdGluX2ludDsKIAotICByYW5n ZV90eXBlID0gY3JlYXRlX3N0YXRpY19yYW5nZV90eXBlIChOVUxMLCBpZHhf dHlwZSwgMCwgYXIuY3RyX25lbGVtcy0xKTsKKyAgcmFuZ2VfdHlwZSA9IGNy ZWF0ZV9zdGF0aWNfcmFuZ2VfdHlwZSAoTlVMTCwgaWR4X3R5cGUsIDAsIGFy LmN0cl9uZWxlbXMgLSAxKTsKICAgdHlwZSA9IGNyZWF0ZV9hcnJheV90eXBl IChOVUxMLCBlbGVtZW50X3R5cGUsIHJhbmdlX3R5cGUpOwogICBpZiAoYXIu Y3RyX25lbGVtcyA8PSAxKQkvKiBDaGVjayBpZiB1bmRlZmluZWQgdXBwZXIg Ym91bmQuICAqLwogICAgIHsKQEAgLTc2NSw5ICs3NjIsOCBAQCByZWFkX2Fy cmF5X3R5cGUgKGN0Zl9jb250ZXh0X3QgKmNjcCwgY3RmX2lkX3QgdGlkKQog ICAgICAgVFlQRV9UQVJHRVRfU1RVQiAodHlwZSkgPSAxOwogICAgIH0KICAg ZWxzZQotICAgIHsKLSAgICAgIFRZUEVfTEVOR1RIICh0eXBlKSA9IGN0Zl90 eXBlX3NpemUgKGZwLCB0aWQpOwotICAgIH0KKyAgICBUWVBFX0xFTkdUSCAo dHlwZSkgPSBjdGZfdHlwZV9zaXplIChmcCwgdGlkKTsKKwogICBzZXRfdHlw ZV9hbGlnbiAodHlwZSwgY3RmX3R5cGVfYWxpZ24gKGZwLCB0aWQpKTsKIAog ICByZXR1cm4gc2V0X3RpZF90eXBlIChvYmpmaWxlLCB0aWQsIHR5cGUpOwpA QCAtNzg1LDExICs3ODEsMTEgQEAgcmVhZF9jb25zdF90eXBlIChjdGZfY29u dGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCwgY3RmX2lkX3QgYnRpZCkKICAg aWYgKGJhc2VfdHlwZSA9PSBOVUxMKQogICAgIHsKICAgICAgIGJhc2VfdHlw ZSA9IHJlYWRfdHlwZV9yZWNvcmQgKGNjcCwgYnRpZCk7Ci0gICAgICBpZiAo IWJhc2VfdHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNvbXBsYWludCAo XygicmVhZF9jb25zdF90eXBlOiBOVUxMIGJhc2UgdHlwZSAoJWxkKSIpLCBi dGlkKTsKKyAgICAgIGlmIChiYXNlX3R5cGUgPT0gTlVMTCkKKwl7CisJICBj b21wbGFpbnQgKF8oInJlYWRfY29uc3RfdHlwZTogTlVMTCBiYXNlIHR5cGUg KCVsZCkiKSwgYnRpZCk7CiAJICBiYXNlX3R5cGUgPSBvYmpmaWxlX3R5cGUg KG9iamZpbGUpLT5idWlsdGluX2Vycm9yOwotICAgICAgICB9CisJfQogICAg IH0KICAgY3ZfdHlwZSA9IG1ha2VfY3ZfdHlwZSAoMSwgVFlQRV9WT0xBVElM RSAoYmFzZV90eXBlKSwgYmFzZV90eXBlLCAwKTsKIApAQCAtODA2LDEwICs4 MDIsMTQgQEAgcmVhZF92b2xhdGlsZV90eXBlIChjdGZfY29udGV4dF90ICpj Y3AsIGN0Zl9pZF90IHRpZCwgY3RmX2lkX3QgYnRpZCkKICAgc3RydWN0IHR5 cGUgKmJhc2VfdHlwZSwgKmN2X3R5cGU7CiAKICAgYmFzZV90eXBlID0gZ2V0 X3RpZF90eXBlIChvYmpmaWxlLCBidGlkKTsKLSAgaWYgKCFiYXNlX3R5cGUp CisgIGlmIChiYXNlX3R5cGUgPT0gTlVMTCkKICAgICB7Ci0gICAgICBjb21w bGFpbnQgKF8oInJlYWRfdm9sYXRpbGVfdHlwZTogTlVMTCBiYXNlIHR5cGUg KCVsZCkiKSwgYnRpZCk7Ci0gICAgICBiYXNlX3R5cGUgPSBvYmpmaWxlX3R5 cGUgKG9iamZpbGUpLT5idWlsdGluX2Vycm9yOworICAgICAgYmFzZV90eXBl ID0gcmVhZF90eXBlX3JlY29yZCAoY2NwLCBidGlkKTsKKyAgICAgIGlmIChi YXNlX3R5cGUgPT0gTlVMTCkKKwl7CisJICBjb21wbGFpbnQgKF8oInJlYWRf dm9sYXRpbGVfdHlwZTogTlVMTCBiYXNlIHR5cGUgKCVsZCkiKSwgYnRpZCk7 CisJICBiYXNlX3R5cGUgPSBvYmpmaWxlX3R5cGUgKG9iamZpbGUpLT5idWls dGluX2Vycm9yOworCX0KICAgICB9CiAKICAgaWYgKGN0Zl90eXBlX2tpbmQg KGZwLCBidGlkKSA9PSBDVEZfS19BUlJBWSkKQEAgLTgzMSwxMSArODMxLDEx IEBAIHJlYWRfcmVzdHJpY3RfdHlwZSAoY3RmX2NvbnRleHRfdCAqY2NwLCBj dGZfaWRfdCB0aWQsIGN0Zl9pZF90IGJ0aWQpCiAgIGlmIChiYXNlX3R5cGUg PT0gTlVMTCkKICAgICB7CiAgICAgICBiYXNlX3R5cGUgPSByZWFkX3R5cGVf cmVjb3JkIChjY3AsIGJ0aWQpOwotICAgICAgaWYgKCFiYXNlX3R5cGUpCi0g ICAgICAgIHsKLSAgICAgICAgICBjb21wbGFpbnQgKF8oInJlYWRfcmVzdHJp Y3RfdHlwZTogTlVMTCBiYXNlIHR5cGUgKCVsZCkiKSwgYnRpZCk7CisgICAg ICBpZiAoYmFzZV90eXBlID09IE5VTEwpCisJeworCSAgY29tcGxhaW50IChf KCJyZWFkX3Jlc3RyaWN0X3R5cGU6IE5VTEwgYmFzZSB0eXBlICglbGQpIiks IGJ0aWQpOwogCSAgYmFzZV90eXBlID0gb2JqZmlsZV90eXBlIChvYmpmaWxl KS0+YnVpbHRpbl9lcnJvcjsKLSAgICAgICAgfQorCX0KICAgICB9CiAgIGN2 X3R5cGUgPSBtYWtlX3Jlc3RyaWN0X3R5cGUgKGJhc2VfdHlwZSk7CiAKQEAg LTg0NiwxOSArODQ2LDIwIEBAIHJlYWRfcmVzdHJpY3RfdHlwZSAoY3RmX2Nv bnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQsIGN0Zl9pZF90IGJ0aWQpCiAK IHN0YXRpYyBzdHJ1Y3QgdHlwZSAqCiByZWFkX3R5cGVkZWZfdHlwZSAoY3Rm X2NvbnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQsCi0gICAgICAgICAgICAg ICAgICAgY3RmX2lkX3QgYnRpZCwgY29uc3QgY2hhciAqbmFtZSkKKwkJICAg Y3RmX2lkX3QgYnRpZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgc3RydWN0 IG9iamZpbGUgKm9iamZpbGUgPSBjY3AtPm9mOwogICBzdHJ1Y3QgdHlwZSAq dGhpc190eXBlLCAqdGFyZ2V0X3R5cGU7CiAKLSAgdGhpc190eXBlID0gaW5p dF90eXBlIChvYmpmaWxlLCBUWVBFX0NPREVfVFlQRURFRiwgMCwgbmFtZSk7 CisgIGNoYXIgKmFuYW1lID0gb2JzdGFja19zdHJkdXAgKCZvYmpmaWxlLT5v YmpmaWxlX29ic3RhY2ssIG5hbWUpOworICB0aGlzX3R5cGUgPSBpbml0X3R5 cGUgKG9iamZpbGUsIFRZUEVfQ09ERV9UWVBFREVGLCAwLCBhbmFtZSk7CiAg IHNldF90aWRfdHlwZSAob2JqZmlsZSwgdGlkLCB0aGlzX3R5cGUpOwogICB0 YXJnZXRfdHlwZSA9IGdldF90aWRfdHlwZSAob2JqZmlsZSwgYnRpZCk7CiAg IGlmICh0YXJnZXRfdHlwZSAhPSB0aGlzX3R5cGUpCiAgICAgVFlQRV9UQVJH RVRfVFlQRSAodGhpc190eXBlKSA9IHRhcmdldF90eXBlOwogICBlbHNlCiAg ICAgVFlQRV9UQVJHRVRfVFlQRSAodGhpc190eXBlKSA9IE5VTEw7Ci0gIFRZ UEVfVEFSR0VUX1NUVUIgKHRoaXNfdHlwZSkgPSBUWVBFX1RBUkdFVF9UWVBF ICh0aGlzX3R5cGUpPyAxIDogMDsKKyAgVFlQRV9UQVJHRVRfU1RVQiAodGhp c190eXBlKSA9IFRZUEVfVEFSR0VUX1RZUEUgKHRoaXNfdHlwZSkgPyAxIDog MDsKIAogICByZXR1cm4gc2V0X3RpZF90eXBlIChvYmpmaWxlLCB0aWQsIHRo aXNfdHlwZSk7CiB9CkBAIC04NzIsMTQgKzg3MywxNCBAQCByZWFkX3BvaW50 ZXJfdHlwZSAoY3RmX2NvbnRleHRfdCAqY2NwLCBjdGZfaWRfdCB0aWQsIGN0 Zl9pZF90IGJ0aWQpCiAgIHN0cnVjdCB0eXBlICp0YXJnZXRfdHlwZSwgKnR5 cGU7CiAKICAgdGFyZ2V0X3R5cGUgPSBnZXRfdGlkX3R5cGUgKG9mLCBidGlk KTsKLSAgaWYgKCF0YXJnZXRfdHlwZSkKKyAgaWYgKHRhcmdldF90eXBlID09 IE5VTEwpCiAgICAgewogICAgICAgdGFyZ2V0X3R5cGUgPSByZWFkX3R5cGVf cmVjb3JkIChjY3AsIGJ0aWQpOwotICAgICAgaWYgKCF0YXJnZXRfdHlwZSkK LSAgICAgICAgewotICAgICAgICAgIGNvbXBsYWludCAoXygicmVhZF9wb2lu dGVyX3R5cGU6IE5VTEwgdGFyZ2V0IHR5cGUgKCVsZCkiKSwgYnRpZCk7Cisg ICAgICBpZiAodGFyZ2V0X3R5cGUgPT0gTlVMTCkKKwl7CisJICBjb21wbGFp bnQgKF8oInJlYWRfcG9pbnRlcl90eXBlOiBOVUxMIHRhcmdldCB0eXBlICgl bGQpIiksIGJ0aWQpOwogCSAgdGFyZ2V0X3R5cGUgPSBvYmpmaWxlX3R5cGUg KGNjcC0+b2YpLT5idWlsdGluX2Vycm9yOwotICAgICAgICB9CisJfQogICAg IH0KIAogICB0eXBlID0gbG9va3VwX3BvaW50ZXJfdHlwZSAodGFyZ2V0X3R5 cGUpOwpAQCAtODk0LDcgKzg5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHlwZSAq CiByZWFkX3R5cGVfcmVjb3JkIChjdGZfY29udGV4dF90ICpjY3AsIGN0Zl9p ZF90IHRpZCkKIHsKICAgY3RmX2ZpbGVfdCAqZnAgPSBjY3AtPmZwOwotICBj b25zdCBjaGFyICpuYW1lOworICBjaGFyICpuYW1lOwogICB1aW50MzJfdCBr aW5kOwogICBzdHJ1Y3QgdHlwZSAqdHlwZSA9IE5VTEw7CiAgIGN0Zl9pZF90 IGJ0aWQ7CkBAIC05MDgsNDIgKzkwOSw0MyBAQCByZWFkX3R5cGVfcmVjb3Jk IChjdGZfY29udGV4dF90ICpjY3AsIGN0Zl9pZF90IHRpZCkKIAlicmVhazsK ICAgICAgIGNhc2UgQ1RGX0tfRU5VTToKIAl0eXBlID0gcmVhZF9lbnVtX3R5 cGUgKGNjcCwgdGlkKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAg ICBjYXNlIENURl9LX0ZVTkNUSU9OOgogCXR5cGUgPSByZWFkX2Z1bmNfa2lu ZF90eXBlIChjY3AsIHRpZCk7Ci0gICAgICAgIGJyZWFrOworCWJyZWFrOwog ICAgICAgY2FzZSBDVEZfS19DT05TVDoKLSAgICAgICAgYnRpZCA9IGN0Zl90 eXBlX3JlZmVyZW5jZSAoZnAsIHRpZCk7CisJYnRpZCA9IGN0Zl90eXBlX3Jl ZmVyZW5jZSAoZnAsIHRpZCk7CiAJdHlwZSA9IHJlYWRfY29uc3RfdHlwZSAo Y2NwLCB0aWQsIGJ0aWQpOwotICAgICAgICBicmVhazsKKwlicmVhazsKICAg ICAgIGNhc2UgQ1RGX0tfVFlQRURFRjoKLSAgICAgICAgbmFtZSA9IGN0Zl90 eXBlX2FuYW1lX3JhdyAoZnAsIHRpZCk7Ci0gICAgICAgIGJ0aWQgPSBjdGZf dHlwZV9yZWZlcmVuY2UgKGZwLCB0aWQpOworCW5hbWUgPSBjdGZfdHlwZV9h bmFtZV9yYXcgKGZwLCB0aWQpOworCWJ0aWQgPSBjdGZfdHlwZV9yZWZlcmVu Y2UgKGZwLCB0aWQpOwogCXR5cGUgPSByZWFkX3R5cGVkZWZfdHlwZSAoY2Nw LCB0aWQsIGJ0aWQsIG5hbWUpOwotICAgICAgICBicmVhazsKKwlmcmVlIChu YW1lKTsKKwlicmVhazsKICAgICAgIGNhc2UgQ1RGX0tfVk9MQVRJTEU6Ci0g ICAgICAgIGJ0aWQgPSBjdGZfdHlwZV9yZWZlcmVuY2UgKGZwLCB0aWQpOwor CWJ0aWQgPSBjdGZfdHlwZV9yZWZlcmVuY2UgKGZwLCB0aWQpOwogCXR5cGUg PSByZWFkX3ZvbGF0aWxlX3R5cGUgKGNjcCwgdGlkLCBidGlkKTsKLSAgICAg ICAgYnJlYWs7CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX1JFU1RSSUNU OgotICAgICAgICBidGlkID0gY3RmX3R5cGVfcmVmZXJlbmNlIChmcCwgdGlk KTsKKwlidGlkID0gY3RmX3R5cGVfcmVmZXJlbmNlIChmcCwgdGlkKTsKIAl0 eXBlID0gcmVhZF9yZXN0cmljdF90eXBlIChjY3AsIHRpZCwgYnRpZCk7Ci0g ICAgICAgIGJyZWFrOworCWJyZWFrOwogICAgICAgY2FzZSBDVEZfS19QT0lO VEVSOgotICAgICAgICBidGlkID0gY3RmX3R5cGVfcmVmZXJlbmNlIChmcCwg dGlkKTsKKwlidGlkID0gY3RmX3R5cGVfcmVmZXJlbmNlIChmcCwgdGlkKTsK IAl0eXBlID0gcmVhZF9wb2ludGVyX3R5cGUgKGNjcCwgdGlkLCBidGlkKTsK LSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX0lO VEVHRVI6CiAgICAgICBjYXNlIENURl9LX0ZMT0FUOgogCXR5cGUgPSByZWFk X2Jhc2VfdHlwZSAoY2NwLCB0aWQpOwotICAgICAgICBicmVhazsKKwlicmVh azsKICAgICAgIGNhc2UgQ1RGX0tfQVJSQVk6CiAJdHlwZSA9IHJlYWRfYXJy YXlfdHlwZSAoY2NwLCB0aWQpOwotICAgICAgICBicmVhazsKKwlicmVhazsK ICAgICAgIGNhc2UgQ1RGX0tfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7CisJ YnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKwlicmVh azsKICAgICB9CiAKICAgcmV0dXJuIHR5cGU7CkBAIC05NjAsNyArOTYyLDcg QEAgY3RmX2FkZF90eXBlX2NiIChjdGZfaWRfdCB0aWQsIHZvaWQgKmFyZykK IAogICAvKiBDaGVjayBpZiB0aWQncyB0eXBlIGhhcyBhbHJlYWR5IGJlZW4g ZGVmaW5lZC4gICovCiAgIHR5cGUgPSBnZXRfdGlkX3R5cGUgKGNjcC0+b2Ys IHRpZCk7Ci0gIGlmICh0eXBlKQorICBpZiAodHlwZSAhPSBOVUxMKQogICAg IHJldHVybiAwOwogCiAgIGN0Zl9pZF90IGJ0aWQgPSBjdGZfdHlwZV9yZWZl cmVuY2UgKGNjcC0+ZnAsIHRpZCk7CkBAIC05NzMsNDIgKzk3NSw0MiBAQCBj dGZfYWRkX3R5cGVfY2IgKGN0Zl9pZF90IHRpZCwgdm9pZCAqYXJnKQogCWJy ZWFrOwogICAgICAgY2FzZSBDVEZfS19FTlVNOgogCXByb2Nlc3NfZW51bV90 eXBlIChjY3AsIHRpZCk7Ci0gICAgICAgIGJyZWFrOworCWJyZWFrOwogICAg ICAgY2FzZSBDVEZfS19GVU5DVElPTjoKIAl0eXBlID0gcmVhZF9mdW5jX2tp bmRfdHlwZSAoY2NwLCB0aWQpOwogCW5ld19zeW1ib2wgKGNjcCwgdHlwZSwg dGlkKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgICBjYXNlIENU Rl9LX0lOVEVHRVI6CiAgICAgICBjYXNlIENURl9LX0ZMT0FUOgogCXByb2Nl c3NfYmFzZV90eXBlIChjY3AsIHRpZCk7Ci0gICAgICAgIGJyZWFrOworCWJy ZWFrOwogICAgICAgY2FzZSBDVEZfS19UWVBFREVGOgogCW5ld19zeW1ib2wg KGNjcCwgcmVhZF90eXBlX3JlY29yZCAoY2NwLCB0aWQpLCB0aWQpOwotICAg ICAgICBicmVhazsKKwlicmVhazsKICAgICAgIGNhc2UgQ1RGX0tfQ09OU1Q6 CiAJdHlwZSA9IHJlYWRfY29uc3RfdHlwZSAoY2NwLCB0aWQsIGJ0aWQpOwog CW5ld19zeW1ib2wgKGNjcCwgdHlwZSwgdGlkKTsKLSAgICAgICAgYnJlYWs7 CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX1ZPTEFUSUxFOgogCXR5cGUg PSByZWFkX3ZvbGF0aWxlX3R5cGUgKGNjcCwgdGlkLCBidGlkKTsKIAluZXdf c3ltYm9sIChjY3AsIHR5cGUsIHRpZCk7Ci0gICAgICAgIGJyZWFrOworCWJy ZWFrOwogICAgICAgY2FzZSBDVEZfS19SRVNUUklDVDoKIAl0eXBlID0gcmVh ZF9yZXN0cmljdF90eXBlIChjY3AsIHRpZCwgYnRpZCk7CiAJbmV3X3N5bWJv bCAoY2NwLCB0eXBlLCB0aWQpOwotICAgICAgICBicmVhazsKKwlicmVhazsK ICAgICAgIGNhc2UgQ1RGX0tfUE9JTlRFUjoKIAl0eXBlID0gcmVhZF9wb2lu dGVyX3R5cGUgKGNjcCwgdGlkLCBidGlkKTsKIAluZXdfc3ltYm9sIChjY3As IHR5cGUsIHRpZCk7Ci0gICAgICAgIGJyZWFrOworCWJyZWFrOwogICAgICAg Y2FzZSBDVEZfS19BUlJBWToKIAl0eXBlID0gcmVhZF9hcnJheV90eXBlIChj Y3AsIHRpZCk7CiAJbmV3X3N5bWJvbCAoY2NwLCB0eXBlLCB0aWQpOwotICAg ICAgICBicmVhazsKKwlicmVhazsKICAgICAgIGNhc2UgQ1RGX0tfVU5LTk9X TjoKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgICBkZWZhdWx0Ogot ICAgICAgICBicmVhazsKKwlicmVhazsKICAgICB9CiAKICAgcmV0dXJuIDA7 CkBAIC0xMDMxLDggKzEwMzMsOCBAQCBjdGZfYWRkX3Zhcl9jYiAoY29uc3Qg Y2hhciAqbmFtZSwgY3RmX2lkX3QgaWQsIHZvaWQgKmFyZykKICAgICB7CiAg ICAgICBjYXNlIENURl9LX0ZVTkNUSU9OOgogCWlmIChuYW1lICYmICFzdHJj bXAobmFtZSwgIm1haW4iKSkKLSAgICAgICAgICBzZXRfb2JqZmlsZV9tYWlu X25hbWUgKGNjcC0+b2YsIG5hbWUsIGxhbmd1YWdlX2MpOwotICAgICAgICBi cmVhazsKKwkgIHNldF9vYmpmaWxlX21haW5fbmFtZSAoY2NwLT5vZiwgbmFt ZSwgbGFuZ3VhZ2VfYyk7CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX0lO VEVHRVI6CiAgICAgICBjYXNlIENURl9LX0ZMT0FUOgogICAgICAgY2FzZSBD VEZfS19WT0xBVElMRToKQEAgLTEwNDEsNDcgKzEwNDMsNDQgQEAgY3RmX2Fk ZF92YXJfY2IgKGNvbnN0IGNoYXIgKm5hbWUsIGN0Zl9pZF90IGlkLCB2b2lk ICphcmcpCiAgICAgICBjYXNlIENURl9LX0NPTlNUOgogICAgICAgY2FzZSBD VEZfS19QT0lOVEVSOgogICAgICAgY2FzZSBDVEZfS19BUlJBWToKLSAgICAg ICAgaWYgKHR5cGUpCi0gICAgCSAgeworCWlmICh0eXBlKQorCSAgewogCSAg ICBzeW0gPSBuZXdfc3ltYm9sIChjY3AsIHR5cGUsIGlkKTsKLSAgICAgICAg ICAgIFNZTUJPTF9TRVRfTkFNRVMgKHN5bSwgbmFtZSwgc3RybGVuIChuYW1l KSwgMCwgY2NwLT5vZik7Ci0gICAgICAgICAgfQotICAgICAgICBicmVhazsK KwkgICAgU1lNQk9MX1NFVF9OQU1FUyAoc3ltLCBuYW1lLCBzdHJsZW4gKG5h bWUpLCAwLCBjY3AtPm9mKTsKKwkgIH0KKwlicmVhazsKICAgICAgIGNhc2Ug Q1RGX0tfU1RSVUNUOgogICAgICAgY2FzZSBDVEZfS19VTklPTjoKICAgICAg IGNhc2UgQ1RGX0tfRU5VTToKLSAgICAgICAgaWYgKCF0eXBlKQotICAgICAg ICB7Ci0gICAgICAgICAgY29tcGxhaW50IChfKCJjdGZfYWRkX3Zhcl9jYjog JXMgaGFzIE5PIHR5cGUgKCVsZCkiKSwgbmFtZSwgaWQpOwotICAgICAgICAg IHR5cGUgPSBvYmpmaWxlX3R5cGUgKGNjcC0+b2YpLT5idWlsdGluX2Vycm9y OwotICAgICAgICB9Ci0gICAgICAgIHN5bSA9IGFsbG9jYXRlX3N5bWJvbCAo Y2NwLT5vZik7Ci0gICAgICAgIE9CSlNUQVQgKGNjcC0+b2YsIG5fc3ltcysr KTsKKwlpZiAodHlwZSA9PSBOVUxMKQorCXsKKwkgIGNvbXBsYWludCAoXygi Y3RmX2FkZF92YXJfY2I6ICVzIGhhcyBOTyB0eXBlICglbGQpIiksIG5hbWUs IGlkKTsKKwkgIHR5cGUgPSBvYmpmaWxlX3R5cGUgKGNjcC0+b2YpLT5idWls dGluX2Vycm9yOworCX0KKwlzeW0gPSBhbGxvY2F0ZV9zeW1ib2wgKGNjcC0+ b2YpOworCU9CSlNUQVQgKGNjcC0+b2YsIG5fc3ltcysrKTsKIAlTWU1CT0xf VFlQRSAoc3ltKSA9IHR5cGU7CiAJU1lNQk9MX0RPTUFJTiAoc3ltKSA9IFZB Ul9ET01BSU47Ci0gICAgICAgIFNZTUJPTF9BQ0xBU1NfSU5ERVggKHN5bSkg PSBMT0NfT1BUSU1JWkVEX09VVDsKLSAgICAgICAgU1lNQk9MX1NFVF9OQU1F UyAoc3ltLCBuYW1lLCBzdHJsZW4gKG5hbWUpLCAwLCBjY3AtPm9mKTsKLSAg ICAgICAgYWRkX3N5bWJvbF90b19saXN0IChzeW0sIGNjcC0+YnVpbGRlci0+ Z2V0X2dsb2JhbF9zeW1ib2xzICgpKTsKLSAgICAgICAgYnJlYWs7CisJU1lN Qk9MX0FDTEFTU19JTkRFWCAoc3ltKSA9IExPQ19PUFRJTUlaRURfT1VUOwor CVNZTUJPTF9TRVRfTkFNRVMgKHN5bSwgbmFtZSwgc3RybGVuIChuYW1lKSwg MCwgY2NwLT5vZik7CisJYWRkX3N5bWJvbF90b19saXN0IChzeW0sIGNjcC0+ YnVpbGRlci0+Z2V0X2dsb2JhbF9zeW1ib2xzICgpKTsKKwlicmVhazsKICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbXBsYWludCAoXygiY3RmX2FkZF92 YXJfY2I6IGtpbmQgdW5zdXBwb3J0ZWQgKCVkKSIpLCBraW5kKTsKLSAgICAg ICAgYnJlYWs7CisJY29tcGxhaW50IChfKCJjdGZfYWRkX3Zhcl9jYjoga2lu ZCB1bnN1cHBvcnRlZCAoJWQpIiksIGtpbmQpOworCWJyZWFrOwogICAgIH0K IAogICBpZiAoc3ltKQotICAgIHsKLSAgICAgIHNldF9zeW1ib2xfYWRkcmVz cyAoY2NwLT5vZiwgc3ltLCBuYW1lKTsKLSAgICB9CisgICAgc2V0X3N5bWJv bF9hZGRyZXNzIChjY3AtPm9mLCBzeW0sIG5hbWUpOwogCiAgIHJldHVybiAw OwogfQogCiAvKiBBZGQgYW4gRUxGIFNUVF9PQkogc3ltYm9sIHdpdGggaW5k ZXggSURYIHRvIHRoZSBzeW1ib2wgdGFibGUuICAqLwogCi1zdHJ1Y3Qgc3lt Ym9sICoKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICoKIGFkZF9zdHRfb2JqIChj dGZfY29udGV4dF90ICpjY3AsIHVuc2lnbmVkIGxvbmcgaWR4KQogewotICBj b25zdCBjaGFyICpuYW1lOwogICBzdHJ1Y3Qgc3ltYm9sICpzeW07CiAgIHN0 cnVjdCB0eXBlICp0eXBlOwogICBjdGZfaWRfdCB0aWQ7CkBAIC0xMDkzLDIy ICsxMDkyLDE4IEBAIGFkZF9zdHRfb2JqIChjdGZfY29udGV4dF90ICpjY3As IHVuc2lnbmVkIGxvbmcgaWR4KQogICBpZiAodHlwZSA9PSBOVUxMKQogICAg IHJldHVybiBOVUxMOwogCi0gIG5hbWUgPSBjdGZfdHlwZV9hbmFtZV9yYXcg KGNjcC0+ZnAsIGlkeCk7Ci0gIGlmIChuYW1lID09IE5VTEwpCi0gICAgcmV0 dXJuIE5VTEw7CiAgIHN5bSA9IG5ld19zeW1ib2wgKGNjcCwgdHlwZSwgdGlk KTsKLSAgU1lNQk9MX1NFVF9OQU1FUyAoc3ltLCBuYW1lLCBzdHJsZW4gKG5h bWUpLCAwLCBjY3AtPm9mKTsKIAogICByZXR1cm4gc3ltOwogfQogCiAvKiBB ZGQgYW4gRUxGIFNUVF9GVU5DIHN5bWJvbCB3aXRoIGluZGV4IElEWCB0byB0 aGUgc3ltYm9sIHRhYmxlLiAgKi8KIAotc3RydWN0IHN5bWJvbCAqCitzdGF0 aWMgc3RydWN0IHN5bWJvbCAqCiBhZGRfc3R0X2Z1bmMgKGN0Zl9jb250ZXh0 X3QgKmNjcCwgdW5zaWduZWQgbG9uZyBpZHgpCiB7CiAgIHN0cnVjdCB0eXBl ICpmdHlwZSwgKmF0eXAsICpyZXR0eXA7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7 CisgIGNoYXIgKm5hbWU7CiAgIHN0cnVjdCBzeW1ib2wgKnN5bTsKICAgY3Rm X2Z1bmNpbmZvX3QgZmluZm87CiAgIGN0Zl9pZF90IGFyZ3ZbMzJdOwpAQCAt MTEyNiwxNSArMTEyMSwxOCBAQCBhZGRfc3R0X2Z1bmMgKGN0Zl9jb250ZXh0 X3QgKmNjcCwgdW5zaWduZWQgbG9uZyBpZHgpCiAgIG5hbWUgPSBjdGZfdHlw ZV9hbmFtZV9yYXcgKGNjcC0+ZnAsIGlkeCk7CiAgIGlmIChuYW1lID09IE5V TEwpCiAgICAgcmV0dXJuIE5VTEw7CisgIGZyZWUgKG5hbWUpOworCiAgIHRp ZCA9IGN0Zl9sb29rdXBfYnlfc3ltYm9sIChjY3AtPmZwLCBpZHgpOwogICBm dHlwZSA9IGdldF90aWRfdHlwZSAoY2NwLT5vZiwgdGlkKTsKICAgaWYgKGZp bmZvLmN0Y19mbGFncyAmIENURl9GVU5DX1ZBUkFSRykKICAgICBUWVBFX1ZB UkFSR1MgKGZ0eXBlKSA9IDE7CiAgIFRZUEVfTkZJRUxEUyAoZnR5cGUpID0g YXJnYzsKKwogICAvKiBJZiBhcmdjIGlzIDAsIGl0IGhhcyBhICJ2b2lkIiB0 eXBlLiAgKi8KLSAgaWYgKGFyZ2MpCi0gICAgVFlQRV9GSUVMRFMgKGZ0eXBl KSA9IChzdHJ1Y3QgZmllbGQgKikKLSAgICAgIFRZUEVfWkFMTE9DIChmdHlw ZSwgYXJnYyAqIHNpemVvZiAoc3RydWN0IGZpZWxkKSk7CisgIGlmIChhcmdj ICE9IDApCisgICAgVFlQRV9GSUVMRFMgKGZ0eXBlKQorICAgICAgPSAoc3Ry dWN0IGZpZWxkICopIFRZUEVfWkFMTE9DIChmdHlwZSwgYXJnYyAqIHNpemVv ZiAoc3RydWN0IGZpZWxkKSk7CiAKICAgLyogVFlQRV9GSUVMRF9UWVBFIG11 c3QgbmV2ZXIgYmUgTlVMTC4gIEZpbGwgaXQgd2l0aCB2b2lkX3R5cGUsIGlm IGZhaWxlZAogICAgICB0byBmaW5kIHRoZSBhcmd1bWVudCB0eXBlLiAgKi8K QEAgLTExNDIsOSArMTE0MCw5IEBAIGFkZF9zdHRfZnVuYyAoY3RmX2NvbnRl eHRfdCAqY2NwLCB1bnNpZ25lZCBsb25nIGlkeCkKICAgICB7CiAgICAgICBh dHlwID0gZ2V0X3RpZF90eXBlIChjY3AtPm9mLCBhcmd2W2lwYXJhbV0pOwog ICAgICAgaWYgKGF0eXApCi0gICAgCVRZUEVfRklFTERfVFlQRSAoZnR5cGUs IGlwYXJhbSkgPSBhdHlwOworCVRZUEVfRklFTERfVFlQRSAoZnR5cGUsIGlw YXJhbSkgPSBhdHlwOwogICAgICAgZWxzZQotICAgIAlUWVBFX0ZJRUxEX1RZ UEUgKGZ0eXBlLCBpcGFyYW0pID0gdm9pZF90eXBlOworCVRZUEVfRklFTERf VFlQRSAoZnR5cGUsIGlwYXJhbSkgPSB2b2lkX3R5cGU7CiAgICAgfQogCiAg IHN5bSA9IG5ld19zeW1ib2wgKGNjcCwgZnR5cGUsIHRpZCk7CkBAIC0xMTUz LDcgKzExNTEsNiBAQCBhZGRfc3R0X2Z1bmMgKGN0Zl9jb250ZXh0X3QgKmNj cCwgdW5zaWduZWQgbG9uZyBpZHgpCiAgICAgU1lNQk9MX1RZUEUgKHN5bSkg PSByZXR0eXA7CiAgIGVsc2UKICAgICBTWU1CT0xfVFlQRSAoc3ltKSA9IHZv aWRfdHlwZTsKLSAgU1lNQk9MX1NFVF9OQU1FUyAoc3ltLCBuYW1lLCBzdHJs ZW4gKG5hbWUpLCAwLCBjY3AtPm9mKTsKIAogICByZXR1cm4gc3ltOwogfQpA QCAtMTE2MSwxNCArMTE1OCwxNCBAQCBhZGRfc3R0X2Z1bmMgKGN0Zl9jb250 ZXh0X3QgKmNjcCwgdW5zaWduZWQgbG9uZyBpZHgpCiAvKiBHZXQgdGV4dCBz ZWdtZW50IGJhc2UgZm9yIE9CSkZJTEUsIFRTSVpFIGNvbnRhaW5zIHRoZSBz ZWdtZW50IHNpemUuICAqLwogCiBzdGF0aWMgQ09SRV9BRERSCi1nZXRfb2Zf dGV4dF9yYW5nZSAoc3RydWN0IG9iamZpbGUgKm9mLCBpbnQgKnRzaXplKQor Z2V0X29iamZpbGVfdGV4dF9yYW5nZSAoc3RydWN0IG9iamZpbGUgKm9mLCBp bnQgKnRzaXplKQogewogICBDT1JFX0FERFIgdGV4dF9iYXNlOwogICBiZmQg KmFiZmQgPSBvZi0+b2JmZDsKICAgY29uc3QgYXNlY3Rpb24gKmNvZGVzOwog CiAgIGNvZGVzID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGFiZmQsICIu dGV4dCIpOwotICBpZiAoIWNvZGVzKQorICBpZiAoY29kZXMgPT0gTlVMTCkK ICAgICB7CiAgICAgICB0ZXh0X2Jhc2UgPSAwOwogICAgICAgKnRzaXplID0g MDsKQEAgLTExODYsMTQgKzExODMsMTQgQEAgZ2V0X29mX3RleHRfcmFuZ2Ug KHN0cnVjdCBvYmpmaWxlICpvZiwgaW50ICp0c2l6ZSkKIAogc3RhdGljIHZv aWQKIGN0Zl9zdGFydF9zeW10YWIgKHN0cnVjdCBwYXJ0aWFsX3N5bXRhYiAq cHN0LAotICAgICAgICAgICAgICAgICAgc3RydWN0IG9iamZpbGUgKm9mLCBD T1JFX0FERFIgdGV4dF9vZmZzZXQpCisJCSAgc3RydWN0IG9iamZpbGUgKm9m LCBDT1JFX0FERFIgdGV4dF9vZmZzZXQpCiB7CiAgIGN0Zl9jb250ZXh0X3Qg KmNjcDsKIAogICBjY3AgPSAoY3RmX2NvbnRleHRfdCAqKSBwc3QtPnJlYWRf c3ltdGFiX3ByaXZhdGU7Ci0gIGNjcC0+YnVpbGRlciA9IG5ldyBzdHJ1Y3Qg YnVpbGRzeW1fY29tcHVuaXQKKyAgY2NwLT5idWlsZGVyID0gbmV3IGJ1aWxk c3ltX2NvbXB1bml0CiAJCSAgICAgICAob2YsIG9mLT5vcmlnaW5hbF9uYW1l LCBOVUxMLAotCSAgICAgICAgICAgICAgIGxhbmd1YWdlX2MsIHRleHRfb2Zm c2V0KTsKKwkJICAgICAgIGxhbmd1YWdlX2MsIHRleHRfb2Zmc2V0KTsKICAg Y2NwLT5idWlsZGVyLT5yZWNvcmRfZGVidWdmb3JtYXQgKCJjdGYiKTsKIH0K IApAQCAtMTIwMyw3ICsxMjAwLDcgQEAgY3RmX3N0YXJ0X3N5bXRhYiAoc3Ry dWN0IHBhcnRpYWxfc3ltdGFiICpwc3QsCiAKIHN0YXRpYyBzdHJ1Y3QgY29t cHVuaXRfc3ltdGFiICoKIGN0Zl9lbmRfc3ltdGFiIChzdHJ1Y3QgcGFydGlh bF9zeW10YWIgKnBzdCwKLSAgICAgICAgICAgICAgICBDT1JFX0FERFIgZW5k X2FkZHIsIGludCBzZWN0aW9uKQorCQlDT1JFX0FERFIgZW5kX2FkZHIsIGlu dCBzZWN0aW9uKQogewogICBjdGZfY29udGV4dF90ICpjY3A7CiAKQEAgLTEy MjMsMzggKzEyMjAsMzMgQEAgcHN5bXRhYl90b19zeW10YWIgKHN0cnVjdCBw YXJ0aWFsX3N5bXRhYiAqcHN0KQogICBzdHJ1Y3Qgc3ltYm9sICpzeW07CiAg IGN0Zl9jb250ZXh0X3QgKmNjcDsKIAotICBpZiAocHN0LT5yZWFkaW4gPT0g MSkKLSAgICByZXR1cm47CisgIGdkYl9hc3NlcnQgKCFwc3QtPnJlYWRpbik7 CiAKICAgY2NwID0gKGN0Zl9jb250ZXh0X3QgKikgcHN0LT5yZWFkX3N5bXRh Yl9wcml2YXRlOwogCiAgIC8qIEl0ZXJhdGUgb3ZlciBlbnRyaWVzIGluIGRh dGEgdHlwZXMgc2VjdGlvbi4gICovCiAgIGlmIChjdGZfdHlwZV9pdGVyIChj Y3AtPmZwLCBjdGZfYWRkX3R5cGVfY2IsIGNjcCkgPT0gQ1RGX0VSUikKLSAg ICB7Ci0gICAgICBjb21wbGFpbnQgKF8oImN0Zl90eXBlX2l0ZXIgcHN5bXRh Yl90b19zeW10YWIgZmFpbGVkIC0gJXMiKSwKLSAgICAgICAgICAgICAgICAg Y3RmX2Vycm1zZyAoY3RmX2Vycm5vIChjY3AtPmZwKSkpOwotICAgIH0KKyAg ICBjb21wbGFpbnQgKF8oImN0Zl90eXBlX2l0ZXIgcHN5bXRhYl90b19zeW10 YWIgZmFpbGVkIC0gJXMiKSwKKwkgICAgICAgY3RmX2Vycm1zZyAoY3RmX2Vy cm5vIChjY3AtPmZwKSkpOwogCiAKICAgLyogSXRlcmF0ZSBvdmVyIGVudHJp ZXMgaW4gdmFyaWFibGUgaW5mbyBzZWN0aW9uLiAgKi8KICAgaWYgKGN0Zl92 YXJpYWJsZV9pdGVyIChjY3AtPmZwLCBjdGZfYWRkX3Zhcl9jYiwgY2NwKSA9 PSBDVEZfRVJSKQotICAgIHsKLSAgICAgIGNvbXBsYWludCAoXygiY3RmX3Zh cmlhYmxlX2l0ZXIgcHN5bXRhYl90b19zeW10YWIgZmFpbGVkIC0gJXMiKSwK LSAgICAgICAgICAgICAgICAgY3RmX2Vycm1zZyAoY3RmX2Vycm5vIChjY3At PmZwKSkpOwotICAgIH0KKyAgICBjb21wbGFpbnQgKF8oImN0Zl92YXJpYWJs ZV9pdGVyIHBzeW10YWJfdG9fc3ltdGFiIGZhaWxlZCAtICVzIiksCisJICAg ICAgIGN0Zl9lcnJtc2cgKGN0Zl9lcnJubyAoY2NwLT5mcCkpKTsKIAogICAv KiBBZGQgZW50cmllcyBpbiBkYXRhIG9iamVjdHMgYW5kIGZ1bmN0aW9uIGlu Zm8gc2VjdGlvbnMuICAqLwogICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7 IDsgaSsrKQogICAgIHsKICAgICAgIHN5bSA9IGFkZF9zdHRfb2JqIChjY3As IGkpOwotICAgICAgaWYgKCFzeW0pCi0gICAgICAgIHsKKyAgICAgIGlmIChz eW0gPT0gTlVMTCkKKwl7CiAJICBpZiAoY3RmX2Vycm5vIChjY3AtPmZwKSA9 PSBFSU5WQUwKLSAgICAgICAgICAgICB8fCBjdGZfZXJybm8gKGNjcC0+ZnAp ID09IEVDVEZfTk9TWU1UQUIpCisJICAgICAgfHwgY3RmX2Vycm5vIChjY3At PmZwKSA9PSBFQ1RGX05PU1lNVEFCKQogCSAgICBicmVhazsKICAgICAgICAg ICBzeW0gPSBhZGRfc3R0X2Z1bmMgKGNjcCwgaSk7Ci0gICAgICAgIH0KLSAg ICAgIGlmICghc3ltKQorCX0KKyAgICAgIGlmIChzeW0gPT0gTlVMTCkKIAlj b250aW51ZTsKIAogICAgICAgc2V0X3N5bWJvbF9hZGRyZXNzIChjY3AtPm9m LCBzeW0sIFNZTUJPTF9MSU5LQUdFX05BTUUgKHN5bSkpOwpAQCAtMTI2Nywy MCArMTI1OSwxNSBAQCBwc3ltdGFiX3RvX3N5bXRhYiAoc3RydWN0IHBhcnRp YWxfc3ltdGFiICpwc3QpCiAgICBQU1QgaXMgbm90IE5VTEwuICAqLwogCiBz dGF0aWMgdm9pZAotY3RmX3JlYWRfc3ltdGFiIChzdHJ1Y3QgcGFydGlhbF9z eW10YWIgKnBzdCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IG9iamZpbGUg Km9iamZpbGUpCitjdGZfcmVhZF9zeW10YWIgKHN0cnVjdCBwYXJ0aWFsX3N5 bXRhYiAqcHN0LCBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKIHsKICAgaWYg KHBzdC0+cmVhZGluKQotICAgIHsKLSAgICAgIHdhcm5pbmcgKF8oImJ1Zzog cHN5bXRhYiBmb3IgJXMgaXMgYWxyZWFkeSByZWFkIGluLiIpLAotCSAgICAg ICBwc3QtPmZpbGVuYW1lKTsKLSAgICB9CisgICAgd2FybmluZyAoXygiYnVn OiBwc3ltdGFiIGZvciAlcyBpcyBhbHJlYWR5IHJlYWQgaW4uIiksIHBzdC0+ ZmlsZW5hbWUpOwogICBlbHNlCiAgICAgewogICAgICAgaWYgKGluZm9fdmVy Ym9zZSkKIAl7Ci0JICBwcmludGZfZmlsdGVyZWQgKF8oIlJlYWRpbmcgaW4g Q1RGIGRhdGEgZm9yICVzLi4uIiksCi0JCQkgICBwc3QtPmZpbGVuYW1lKTsK KwkgIHByaW50Zl9maWx0ZXJlZCAoXygiUmVhZGluZyBpbiBDVEYgZGF0YSBm b3IgJXMuLi4iKSwgcHN0LT5maWxlbmFtZSk7CiAJICBnZGJfZmx1c2ggKGdk Yl9zdGRvdXQpOwogCX0KIApAQCAtMTI4OCwxNCArMTI3NSwxNCBAQCBjdGZf cmVhZF9zeW10YWIgKHN0cnVjdCBwYXJ0aWFsX3N5bXRhYiAqcHN0LAogICAg ICAgQ09SRV9BRERSIHRleHRfb2Zmc2V0OyAgICAgICAgLyogU3RhcnQgb2Yg dGV4dCBzZWdtZW50LiAgKi8KICAgICAgIGludCB0c2l6ZTsKIAotICAgICAg dGV4dF9vZmZzZXQgPSBnZXRfb2ZfdGV4dF9yYW5nZSAob2JqZmlsZSwgJnRz aXplKTsKKyAgICAgIHRleHRfb2Zmc2V0ID0gZ2V0X29iamZpbGVfdGV4dF9y YW5nZSAob2JqZmlsZSwgJnRzaXplKTsKICAgICAgIGN0Zl9zdGFydF9zeW10 YWIgKHBzdCwgb2JqZmlsZSwgdGV4dF9vZmZzZXQpOwogICAgICAgcHN5bXRh Yl90b19zeW10YWIgKHBzdCk7CiAKICAgICAgIHBzdC0+c2V0X3RleHRfbG93 ICh0ZXh0X29mZnNldCk7Ci0gICAgICBwc3QtPnNldF90ZXh0X2hpZ2ggKHRl eHRfb2Zmc2V0K3RzaXplKTsKKyAgICAgIHBzdC0+c2V0X3RleHRfaGlnaCAo dGV4dF9vZmZzZXQgKyB0c2l6ZSk7CiAgICAgICBwc3QtPmNvbXB1bml0X3N5 bXRhYiA9IGN0Zl9lbmRfc3ltdGFiIChwc3QsIHRleHRfb2Zmc2V0ICsgdHNp emUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNFQ1RfT0ZGX1RFWFQgKG9iamZpbGUpKTsKKwkJCQkJICAgICBTRUNUX09G Rl9URVhUIChvYmpmaWxlKSk7CiAKICAgICAgIC8qIEZpbmlzaCB1cCB0aGUg ZGVidWcgZXJyb3IgbWVzc2FnZS4gICovCiAgICAgICBpZiAoaW5mb192ZXJi b3NlKQpAQCAtMTMxNCw4ICsxMzAxLDkgQEAgY3RmX2Nsb3NlX29iamZpbGUg KHN0cnVjdCBvYmpmaWxlICpvZiwgdm9pZCAqZGF0dW0pCiAgIGN0Zl9jbG9z ZSAoYXJjKTsKIH0KIAotLyogQWxsb2NhdGUgYSBuZXcgcGFydGlhbF9zeW10 YWIgTkFNRS4gICovCi0vKiBFYWNoIHNvdXJjZSBmaWxlIHRoYXQgaGFzIG5v dCBiZWVuIGZ1bGx5IHJlYWQgaW4gaXMgcmVwcmVzZW50ZWQgYnkKKy8qIEFs bG9jYXRlIGEgbmV3IHBhcnRpYWxfc3ltdGFiIE5BTUUuCisKKyAgIEVhY2gg c291cmNlIGZpbGUgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgcmVhZCBpbiBp cyByZXByZXNlbnRlZCBieQogICAgYSBwYXJ0aWFsX3N5bXRhYi4gIFRoaXMg Y29udGFpbnMgdGhlIGluZm9ybWF0aW9uIG9uIHdoZXJlIGluIHRoZQogICAg ZXhlY3V0YWJsZSB0aGUgZGVidWdnaW5nIHN5bWJvbHMgZm9yIGEgc3BlY2lm aWMgZmlsZSBhcmUsIGFuZCBhCiAgICBsaXN0IG9mIG5hbWVzIG9mIGdsb2Jh bCBzeW1ib2xzIHdoaWNoIGFyZSBsb2NhdGVkIGluIHRoaXMgZmlsZS4KQEAg LTEzMjcsOCArMTMxNSw4IEBAIGN0Zl9jbG9zZV9vYmpmaWxlIChzdHJ1Y3Qg b2JqZmlsZSAqb2YsIHZvaWQgKmRhdHVtKQogCiBzdGF0aWMgc3RydWN0IHBh cnRpYWxfc3ltdGFiICoKIGNyZWF0ZV9wYXJ0aWFsX3N5bXRhYiAoY29uc3Qg Y2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY3RmX2ZpbGVf dCAqY2ZwLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2JqZmls ZSAqb2JqZmlsZSkKKwkJICAgICAgIGN0Zl9maWxlX3QgKmNmcCwKKwkJICAg ICAgIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQogewogICBzdHJ1Y3QgcGFy dGlhbF9zeW10YWIgKnBzdDsKICAgc3RhdGljIGN0Zl9jb250ZXh0X3QgY2N4 OwpAQCAtMTMzNyw3ICsxMzI1LDcgQEAgY3JlYXRlX3BhcnRpYWxfc3ltdGFi IChjb25zdCBjaGFyICpuYW1lLAogCiAgIGNjeC5mcCA9IGNmcDsKICAgY2N4 Lm9mID0gb2JqZmlsZTsKLSAgcHN0LT5yZWFkX3N5bXRhYl9wcml2YXRlID0g KHZvaWQgKikmY2N4OworICBwc3QtPnJlYWRfc3ltdGFiX3ByaXZhdGUgPSAo dm9pZCAqKSAmY2N4OwogICBwc3QtPnJlYWRfc3ltdGFiID0gY3RmX3JlYWRf c3ltdGFiOwogCiAgIHJldHVybiBwc3Q7CkBAIC0xMzQ5LDEzICsxMzM3LDEz IEBAIHN0YXRpYyBpbnQKIGN0Zl9wc3ltdGFiX3R5cGVfY2IgKGN0Zl9pZF90 IHRpZCwgdm9pZCAqYXJnKQogewogICBjdGZfY29udGV4dF90ICpjY3A7Ci0g IGNvbnN0IGNoYXIgKm5hbWU7CisgIGNoYXIgKm5hbWU7CiAgIHVpbnQzMl90 IGtpbmQ7CiAgIHNob3J0IHNlY3Rpb24gPSAtMTsKIAotICBjY3AgPSAoY3Rm X2NvbnRleHRfdCAqKWFyZzsKKyAgY2NwID0gKGN0Zl9jb250ZXh0X3QgKikg YXJnOwogICBuYW1lID0gY3RmX3R5cGVfYW5hbWVfcmF3IChjY3AtPmZwLCB0 aWQpOwotICBpZiAoIW5hbWUgfHwgKG5hbWUgJiYgIXN0cmxlbiAobmFtZSkp KQorICBpZiAobmFtZSA9PSBOVUxMIHx8IHN0cmxlbiAobmFtZSkgPT0gMCkK ICAgICByZXR1cm4gMDsKIAogICBkb21haW5fZW51bSBkb21haW4gPSBVTkRF Rl9ET01BSU47CkBAIC0xMzY2LDQxICsxMzU0LDQyIEBAIGN0Zl9wc3ltdGFi X3R5cGVfY2IgKGN0Zl9pZF90IHRpZCwgdm9pZCAqYXJnKQogICAgICAgY2Fz ZSBDVEZfS19TVFJVQ1Q6CiAgICAgICBjYXNlIENURl9LX1VOSU9OOgogICAg ICAgY2FzZSBDVEZfS19FTlVNOgotICAgICAgCWRvbWFpbiA9IFNUUlVDVF9E T01BSU47Ci0gICAgICAJYWNsYXNzID0gTE9DX1RZUEVERUY7Ci0gICAgICAg IGJyZWFrOworCWRvbWFpbiA9IFNUUlVDVF9ET01BSU47CisJYWNsYXNzID0g TE9DX1RZUEVERUY7CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX0ZVTkNU SU9OOgogICAgICAgY2FzZSBDVEZfS19GT1JXQVJEOgotICAgICAgCWRvbWFp biA9IFZBUl9ET01BSU47Ci0gICAgICAJYWNsYXNzID0gTE9DX1NUQVRJQzsK LSAgICAgICAgc2VjdGlvbiA9IFNFQ1RfT0ZGX1RFWFQgKGNjcC0+b2YpOwot ICAgICAgICBicmVhazsKKwlkb21haW4gPSBWQVJfRE9NQUlOOworCWFjbGFz cyA9IExPQ19TVEFUSUM7CisJc2VjdGlvbiA9IFNFQ1RfT0ZGX1RFWFQgKGNj cC0+b2YpOworCWJyZWFrOwogICAgICAgY2FzZSBDVEZfS19DT05TVDoKLSAg ICAgIAlkb21haW4gPSBWQVJfRE9NQUlOOwotICAgICAgCWFjbGFzcyA9IExP Q19TVEFUSUM7Ci0gICAgICAgIGJyZWFrOworCWRvbWFpbiA9IFZBUl9ET01B SU47CisJYWNsYXNzID0gTE9DX1NUQVRJQzsKKwlicmVhazsKICAgICAgIGNh c2UgQ1RGX0tfVFlQRURFRjoKICAgICAgIGNhc2UgQ1RGX0tfUE9JTlRFUjoK ICAgICAgIGNhc2UgQ1RGX0tfVk9MQVRJTEU6CiAgICAgICBjYXNlIENURl9L X1JFU1RSSUNUOgotICAgICAgCWRvbWFpbiA9IFZBUl9ET01BSU47Ci0gICAg ICAJYWNsYXNzID0gTE9DX1RZUEVERUY7Ci0gICAgICAgIGJyZWFrOworCWRv bWFpbiA9IFZBUl9ET01BSU47CisJYWNsYXNzID0gTE9DX1RZUEVERUY7CisJ YnJlYWs7CiAgICAgICBjYXNlIENURl9LX0lOVEVHRVI6CiAgICAgICBjYXNl IENURl9LX0ZMT0FUOgotICAgICAgCWRvbWFpbiA9IFZBUl9ET01BSU47Ci0g ICAgICAJYWNsYXNzID0gTE9DX1RZUEVERUY7Ci0gICAgICAgIGJyZWFrOwor CWRvbWFpbiA9IFZBUl9ET01BSU47CisJYWNsYXNzID0gTE9DX1RZUEVERUY7 CisJYnJlYWs7CiAgICAgICBjYXNlIENURl9LX0FSUkFZOgogICAgICAgY2Fz ZSBDVEZfS19VTktOT1dOOgotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4g MDsKICAgICB9CiAKLSAgICBhZGRfcHN5bWJvbF90b19saXN0IChuYW1lLCBz dHJsZW4gKG5hbWUpLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRv bWFpbiwgYWNsYXNzLCBzZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAg ICAgIHBzeW1ib2xfcGxhY2VtZW50OjpHTE9CQUwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgMCwgbGFuZ3VhZ2VfYywgY2NwLT5vZik7CisgICAgYWRk X3BzeW1ib2xfdG9fbGlzdCAobmFtZSwgc3RybGVuIChuYW1lKSwgdHJ1ZSwK KwkJCSBkb21haW4sIGFjbGFzcywgc2VjdGlvbiwKKwkJCSBwc3ltYm9sX3Bs YWNlbWVudDo6R0xPQkFMLAorCQkJIDAsIGxhbmd1YWdlX2MsIGNjcC0+b2Yp OwogCisgIGZyZWUgKG5hbWUpOwogICByZXR1cm4gMDsKIH0KIApAQCAtMTQx MSwxMCArMTQwMCwxMCBAQCBjdGZfcHN5bXRhYl92YXJfY2IgKGNvbnN0IGNo YXIgKm5hbWUsIGN0Zl9pZF90IGlkLCB2b2lkICphcmcpCiB7CiAgIGN0Zl9j b250ZXh0X3QgKmNjcCA9IChjdGZfY29udGV4dF90ICopIGFyZzsKIAotICBh ZGRfcHN5bWJvbF90b19saXN0IChuYW1lLCBzdHJsZW4gKG5hbWUpLCAxLAot ICAgICAgICAgICAgICAgICAgICAgICBWQVJfRE9NQUlOLCBMT0NfU1RBVElD LCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgcHN5bWJvbF9wbGFjZW1l bnQ6OkdMT0JBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgMCwgbGFuZ3Vh Z2VfYywgY2NwLT5vZik7CisgIGFkZF9wc3ltYm9sX3RvX2xpc3QgKG5hbWUs IHN0cmxlbiAobmFtZSksIHRydWUsCisJCSAgICAgICBWQVJfRE9NQUlOLCBM T0NfU1RBVElDLCAtMSwKKwkJICAgICAgIHBzeW1ib2xfcGxhY2VtZW50OjpH TE9CQUwsCisJCSAgICAgICAwLCBsYW5ndWFnZV9jLCBjY3AtPm9mKTsKICAg cmV0dXJuIDA7CiB9CiAKQEAgLTE0MzEsMTcgKzE0MjAsMTQgQEAgc2Nhbl9w YXJ0aWFsX3N5bWJvbHMgKGN0Zl9maWxlX3QgKmNmcCwgc3RydWN0IG9iamZp bGUgKm9mKQogCiAgIGNjeC5mcCA9IGNmcDsKICAgY2N4Lm9mID0gb2Y7CisK ICAgaWYgKGN0Zl90eXBlX2l0ZXIgKGNmcCwgY3RmX3BzeW10YWJfdHlwZV9j YiwgJmNjeCkgPT0gQ1RGX0VSUikKLSAgICB7Ci0gICAgICBjb21wbGFpbnQg KF8oImN0Zl90eXBlX2l0ZXIgc2Nhbl9wYXJ0aWFsX3N5bWJvbHMgZmFpbGVk IC0gJXMiKSwKLSAgICAgICAgICAgICAgICAgY3RmX2Vycm1zZyAoY3RmX2Vy cm5vIChjZnApKSk7Ci0gICAgfQorICAgIGNvbXBsYWludCAoXygiY3RmX3R5 cGVfaXRlciBzY2FuX3BhcnRpYWxfc3ltYm9scyBmYWlsZWQgLSAlcyIpLAor CSAgICAgICBjdGZfZXJybXNnIChjdGZfZXJybm8gKGNmcCkpKTsKIAogICBp ZiAoY3RmX3ZhcmlhYmxlX2l0ZXIgKGNmcCwgY3RmX3BzeW10YWJfdmFyX2Ni LCAmY2N4KSA9PSBDVEZfRVJSKQotICAgIHsKLSAgICAgIGNvbXBsYWludCAo XygiY3RmX3ZhcmlhYmxlX2l0ZXIgc2Nhbl9wYXJ0aWFsX3N5bWJvbHMgZmFp bGVkIC0gJXMiKSwKLSAgICAgICAgICAgICAgICAgY3RmX2Vycm1zZyAoY3Rm X2Vycm5vIChjZnApKSk7Ci0gICAgfQorICAgIGNvbXBsYWludCAoXygiY3Rm X3ZhcmlhYmxlX2l0ZXIgc2Nhbl9wYXJ0aWFsX3N5bWJvbHMgZmFpbGVkIC0g JXMiKSwKKwkgICAgICAgY3RmX2Vycm1zZyAoY3RmX2Vycm5vIChjZnApKSk7 CiAKICAgLyogU2NhbiBDVEYgb2JqZWN0IGFuZCBmdW5jdGlvbiBzZWN0aW9u cyB3aGljaCBjb3JyZXNwb25kIHRvIGVhY2gKICAgICAgU1RUX0ZVTkMgb3Ig U1RUX09CSkVDVCBlbnRyeSBpbiB0aGUgc3ltYm9sIHRhYmxlLApAQCAtMTQ1 MCw0MSArMTQzNiw0MCBAQCBzY2FuX3BhcnRpYWxfc3ltYm9scyAoY3RmX2Zp bGVfdCAqY2ZwLCBzdHJ1Y3Qgb2JqZmlsZSAqb2YpCiAgICAgewogICAgICAg Y3RmX2lkX3QgdGlkOwogICAgICAgaWYgKCh0aWQgPSBjdGZfbG9va3VwX2J5 X3N5bWJvbCAoY2ZwLCBpZHgpKSA9PSBDVEZfRVJSKQotICAgICAgICB7Ci0J aWYgKGN0Zl9lcnJubyAoY2ZwKSA9PSBFSU5WQUwKLSAgICAgICAgICAgfHwg Y3RmX2Vycm5vIChjZnApID09IEVDVEZfTk9TWU1UQUIpCi0JICAgIC8vIGNh c2UgRUNURl9TWU1SQU5HRToKLQkgIGJyZWFrOworCXsKKwlpZiAoY3RmX2Vy cm5vIChjZnApID09IEVJTlZBTCB8fCBjdGZfZXJybm8gKGNmcCkgPT0gRUNU Rl9OT1NZTVRBQikKKwkgIGJyZWFrOwkvLyBEb25lLCByZWFjaCBlbmQgb2Yg dGhlIHNlY3Rpb24uCiAJZWxzZQogCSAgY29udGludWU7Ci0gICAgICAgIH0K LSAgICAgIGNvbnN0IGNoYXIgKnRuYW1lID0gY3RmX3R5cGVfYW5hbWVfcmF3 IChjZnAsIHRpZCk7CisJfQorICAgICAgY2hhciAqdG5hbWUgPSBjdGZfdHlw ZV9hbmFtZV9yYXcgKGNmcCwgdGlkKTsKICAgICAgIHVpbnQzMl90IGtpbmQg PSBjdGZfdHlwZV9raW5kIChjZnAsIHRpZCk7CiAgICAgICBhZGRyZXNzX2Ns YXNzIGFjbGFzczsKICAgICAgIGRvbWFpbl9lbnVtIHRkb21haW47CiAgICAg ICBzd2l0Y2ggKGtpbmQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIENU Rl9LX1NUUlVDVDoKLSAgICAgICAgICBjYXNlIENURl9LX1VOSU9OOgotICAg ICAgICAgIGNhc2UgQ1RGX0tfRU5VTToKKwl7CisJICBjYXNlIENURl9LX1NU UlVDVDoKKwkgIGNhc2UgQ1RGX0tfVU5JT046CisJICBjYXNlIENURl9LX0VO VU06CiAJICAgIHRkb21haW4gPSBTVFJVQ1RfRE9NQUlOOwogCSAgICBicmVh azsKLSAgICAgICAgICBkZWZhdWx0OgorCSAgZGVmYXVsdDoKIAkgICAgdGRv bWFpbiA9IFZBUl9ET01BSU47CiAJICAgIGJyZWFrOwotICAgICAgICB9CisJ fQogCiAgICAgICBpZiAoa2luZCA9PSBDVEZfS19GVU5DVElPTikKLSAgICAg ICAgYWNsYXNzID0gTE9DX1NUQVRJQzsKKwlhY2xhc3MgPSBMT0NfU1RBVElD OwogICAgICAgZWxzZSBpZiAoa2luZCA9PSBDVEZfS19DT05TVCkKLSAgICAg ICAgYWNsYXNzID0gTE9DX0NPTlNUOworCWFjbGFzcyA9IExPQ19DT05TVDsK ICAgICAgIGVsc2UKLSAgICAgICAgYWNsYXNzID0gTE9DX1RZUEVERUY7CisJ YWNsYXNzID0gTE9DX1RZUEVERUY7CiAKLSAgICAgIGFkZF9wc3ltYm9sX3Rv X2xpc3QgKHRuYW1lLCBzdHJsZW4gKG5hbWUpLCAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRvbWFpbiwgYWNsYXNzLCAtMSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBzeW1ib2xfcGxhY2VtZW50OjpTVEFUSUMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBsYW5ndWFnZV9jLCBv Zik7CisgICAgICBhZGRfcHN5bWJvbF90b19saXN0ICh0bmFtZSwgc3RybGVu ICh0bmFtZSksIHRydWUsCisJCQkgICB0ZG9tYWluLCBhY2xhc3MsIC0xLAor CQkJICAgcHN5bWJvbF9wbGFjZW1lbnQ6OlNUQVRJQywKKwkJCSAgIDAsIGxh bmd1YWdlX2MsIG9mKTsKKyAgICAgIGZyZWUgKHRuYW1lKTsKICAgICB9CiAK ICAgZW5kX3BzeW10YWJfY29tbW9uIChvZiwgcHN0KTsKQEAgLTE1MDEsMTQg KzE0ODYsMTQgQEAgZWxmY3RmX2J1aWxkX3BzeW10YWJzIChzdHJ1Y3Qgb2Jq ZmlsZSAqb2YpCiAgIGludCBlcnI7CiAKICAgY3RmX2FyY2hpdmVfdCAqYXJj ID0gY3RmX2JmZG9wZW4gKGFiZmQsICZlcnIpOwotICBpZiAoIWFyYykKKyAg aWYgKGFyYyA9PSBOVUxMKQogICAgIGVycm9yIChfKCJjdGZfYmZkb3BlbiBm YWlsZWQgb24gJXMgLSAlcyIpLAotICAgICAgICAgICBiZmRfZ2V0X2ZpbGVu YW1lIChhYmZkKSwgY3RmX2Vycm1zZyAoZXJyKSk7CisJICAgYmZkX2dldF9m aWxlbmFtZSAoYWJmZCksIGN0Zl9lcnJtc2cgKGVycikpOwogCiAgIGN0Zl9m aWxlX3QgKmZwID0gY3RmX2FyY19vcGVuX2J5X25hbWUgKGFyYywgTlVMTCwg JmVycik7Ci0gIGlmICghZnApCisgIGlmIChmcCA9PSBOVUxMKQogICAgIGVy cm9yIChfKCJjdGZfYXJjX29wZW5fYnlfbmFtZSBmYWlsZWQgb24gJXMgLSAl cyIpLAotICAgICAgICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSwgY3Rm X2Vycm1zZyAoZXJyKSk7CisJICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCks IGN0Zl9lcnJtc2cgKGVycikpOwogICBzZXRfb2JqZmlsZV9kYXRhIChvZiwg Y3RmX2ZpbGVfa2V5LCBmcCk7CiAKICAgc2Nhbl9wYXJ0aWFsX3N5bWJvbHMg KGZwLCBvZik7Cg== --------------C9A9D709BBE697D9E568BCE5--