Return-Path: X-Original-To: apmail-apr-dev-archive@www.apache.org Delivered-To: apmail-apr-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CA78B1745C for ; Thu, 24 Sep 2015 14:33:40 +0000 (UTC) Received: (qmail 48437 invoked by uid 500); 24 Sep 2015 14:33:40 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 48360 invoked by uid 500); 24 Sep 2015 14:33:40 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 48350 invoked by uid 99); 24 Sep 2015 14:33:40 -0000 Received: from Unknown (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 24 Sep 2015 14:33:40 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 1AE05181125 for ; Thu, 24 Sep 2015 14:33:40 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -0.101 X-Spam-Level: X-Spam-Status: No, score=-0.101 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id OK0IfU8_88VY for ; Thu, 24 Sep 2015 14:33:33 +0000 (UTC) Received: from mail-qg0-f41.google.com (mail-qg0-f41.google.com [209.85.192.41]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTPS id 7E73D210C8 for ; Thu, 24 Sep 2015 14:33:33 +0000 (UTC) Received: by qgt47 with SMTP id 47so45569422qgt.2 for ; Thu, 24 Sep 2015 07:33:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Jh5taHjSSl09tZi7++nd2Ox26s0quqjR0EVEMLFFO7I=; b=KtDR1vNWTDegvtGm4lOSM79GfWkd6+i/aAckbxNsRv+c66os6FNg/sB31Vo/gDLosc 4LeY0vOSEzChjIU8h/MPot2Rek2QhPsP/u3Ij1/5fGXzowL0xuiYj92QEQV9nTASqiwO jVphKBph/RL5RJEvZAgzZdf2cpAUR5bIw8Xdhx/OJMLWOreyOv1Q6QxEhhZDZTyOxMxt 2Vg2j+qh7/YL4v3R9aVPCdbD0tlZmpqE08GIbVt2bJXFfQmuXIV2b35MGssL3U8PE+hm 2ypIZRli8OQkyTMG7gz8ohu9cJ6zkSx0WSsrhpaT4AHpyPfuU8rSfyy4foILLP7D2EKb djTQ== MIME-Version: 1.0 X-Received: by 10.140.147.8 with SMTP id 8mr46383339qht.83.1443105206406; Thu, 24 Sep 2015 07:33:26 -0700 (PDT) Received: by 10.55.72.20 with HTTP; Thu, 24 Sep 2015 07:33:26 -0700 (PDT) In-Reply-To: References: Date: Thu, 24 Sep 2015 16:33:26 +0200 Message-ID: Subject: Re: Issues/questions with apr_memcache_multigetp From: Yann Ylavic To: APR Developer List Cc: Jeffrey Crowell Content-Type: multipart/mixed; boundary=001a1135470833f77605207f1d71 --001a1135470833f77605207f1d71 Content-Type: text/plain; charset=UTF-8 Hi Jeffrey, On Wed, Sep 23, 2015 at 9:23 PM, Jeffrey Crowell wrote: > > We have some patches which were created in an attempt to fix some signed > bugs in the original code that I think may be causing our issue. > > Namely here: > https://github.com/pagespeed/mod_pagespeed/blob/master/third_party/aprutil/apr_memcache2.c#L1453 > vs here > https://gist.github.com/crowell/59bfa1bb9f0cda30c48a#file-multiget-c-L192 > The original code uses an atoi(), which has undefined behavior when called > on non integer strings, leaving len to be 0. > > Second, the check here > https://github.com/pagespeed/mod_pagespeed/blob/master/third_party/aprutil/apr_memcache2.c#L1457 > vs https://gist.github.com/crowell/59bfa1bb9f0cda30c48a#file-multiget-c-L199 > > In the original apr code, this check will never fail. len is an apr_size_t, > and will never be < 0. The code you refer has changed with [1] (i.e. APR-1.4.3, the current version is 1.5.2), but still does not seem to fix the invalid/unknown length/value/type issue, which are both unexpected errors in apr_memcache, and as such should probably terminate the connection... > > The issue here now is that the check in the "server sent back a key that i > didn't ask for" > https://github.com/pagespeed/mod_pagespeed/blob/master/third_party/aprutil/apr_memcache2.c#L1507 > (same in both forked and upstream), apr_pollset_remove, is never called, and > the number of queries sent is never changed. > > Does it seem possible that this is causing the server to spin here Yes, in the unexpected cases mentioned above, the socket is not "consumed" (i.e. apr_brigade_partition() is not called), which let some immediatly poll()able data for the next loops. > would apr be interested in accepting a patch to fix the signedness issues? Of course! I included parse_size() in the attached patch which tries to address the parsing/unexpected issues by aborting the connection and returning an error. Does it work for you (it is based on trunk, so you may need to adapt it to your version, which preferably should be the latest...)? I'm not sure about the handling of empty values (the real len == 0 case, not the parsing error). The previous code did not expect the trailing CRLF, while this patch does... Regards, Yann. [1] http://svn.apache.org/r982408 --001a1135470833f77605207f1d71 Content-Type: text/x-diff; charset=US-ASCII; name="apr_memcache_getp.patch" Content-Disposition: attachment; filename="apr_memcache_getp.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ieybkhk00 SW5kZXg6IG1lbWNhY2hlL2Fwcl9tZW1jYWNoZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1lbWNhY2hlL2Fw cl9tZW1jYWNoZS5jCShyZXZpc2lvbiAxNjg1ODUzKQorKysgbWVtY2FjaGUvYXByX21lbWNhY2hl LmMJKHdvcmtpbmcgY29weSkKQEAgLTczMSw2ICs3MzEsMjYgQEAgYXByX21lbWNhY2hlX3JlcGxh Y2UoYXByX21lbWNhY2hlX3QgKm1jLAogCiB9CiAKKy8qCisgKiBQYXJzZXMgYSBkZWNpbWFsIHNp emUgZnJvbSBzaXplX3N0ciwgcmV0dXJuaW5nIHRoZSB2YWx1ZSBpbiAqc2l6ZS4KKyAqIFJldHVy bnMgMSBpZiBwYXJzaW5nIHdhcyBzdWNjZXNzZnVsLCAwIGlmIHBhcnNpbmcgZmFpbGVkLgorICov CitzdGF0aWMgaW50IHBhcnNlX3NpemUoY29uc3QgY2hhciAqc2l6ZV9zdHIsIGFwcl9zaXplX3Qg KnNpemUpCit7CisgICAgY2hhciAqZW5kcHRyOworICAgIGxvbmcgc2l6ZV9hc19sb25nOworCisg ICAgZXJybm8gPSAwOworICAgIHNpemVfYXNfbG9uZyA9IHN0cnRvbChzaXplX3N0ciwgJmVuZHB0 ciwgMTApOworICAgIGlmICgoc2l6ZV9hc19sb25nIDwgMCkgfHwgKGVycm5vICE9IDApIHx8IChl bmRwdHIgPT0gc2l6ZV9zdHIpIHx8CisgICAgICAgIChlbmRwdHJbMF0gIT0gJ1xyJykgfHwgKGVu ZHB0clsxXSAhPSAnXG4nKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAqc2l6 ZSA9ICh1bnNpZ25lZCBsb25nKXNpemVfYXNfbG9uZzsKKyAgICByZXR1cm4gMTsKK30KKwogQVBS X0RFQ0xBUkUoYXByX3N0YXR1c190KQogYXByX21lbWNhY2hlX2dldHAoYXByX21lbWNhY2hlX3Qg Km1jLAogICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcCwKQEAgLTc5OSwxNCArODE5LDEx IEBAIGFwcl9tZW1jYWNoZV9nZXRwKGFwcl9tZW1jYWNoZV90ICptYywKICAgICAgICAgfQogCiAg ICAgICAgIGxlbmd0aCA9IGFwcl9zdHJ0b2soTlVMTCwgIiAiLCAmbGFzdCk7Ci0gICAgICAgIGlm IChsZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbiA9IHN0cnRvbChsZW5ndGgsIChjaGFyICoqKU5V TEwsIDEwKTsKKyAgICAgICAgaWYgKCFsZW5ndGggfHwgIXBhcnNlX3NpemUobGVuZ3RoLCAmbGVu KSkgeworICAgICAgICAgICAgbXNfYmFkX2Nvbm4obXMsIGNvbm4pOworICAgICAgICAgICAgYXBy X21lbWNhY2hlX2Rpc2FibGVfc2VydmVyKG1jLCBtcyk7CisgICAgICAgICAgICByZXR1cm4gQVBS X0VJTlZBTDsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChsZW4gPT0gMCApICB7Ci0gICAgICAg ICAgICAqbmV3X2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICAqYmF0b24gPSBOVUxMOwotICAgICAg ICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgYXByX2J1Y2tldF9icmlnYWRlICpiYmI7 CiAgICAgICAgICAgICBhcHJfYnVja2V0ICplOwpAQCAtMTM2MSw3NCArMTM3OCw2OSBAQCBhcHJf bWVtY2FjaGVfbXVsdGdldHAoYXByX21lbWNhY2hlX3QgKm1jLAogICAgICAgICAgICAgICAgY2hh ciAqbGFzdDsKICAgICAgICAgICAgICAgIGNoYXIgKmRhdGE7CiAgICAgICAgICAgICAgICBhcHJf c2l6ZV90IGxlbiA9IDA7CisgICAgICAgICAgICAgICBhcHJfYnVja2V0ICplID0gTlVMTDsKIAog ICAgICAgICAgICAgICAgYXByX3N0cnRvayhjb25uLT5idWZmZXIsICIgIiwgJmxhc3QpOyAvKiBq dXN0IHRoZSBWQUxVRSwgaWdub3JlICovCiAgICAgICAgICAgICAgICBrZXkgPSBhcHJfc3RydG9r KE5VTEwsICIgIiwgJmxhc3QpOwogICAgICAgICAgICAgICAgZmxhZ3MgPSBhcHJfc3RydG9rKE5V TEwsICIgIiwgJmxhc3QpOworICAgICAgICAgICAgICAgbGVuZ3RoID0gYXByX3N0cnRvayhOVUxM LCAiICIsICZsYXN0KTsKIAotCi0gICAgICAgICAgICAgICBsZW5ndGggPSBhcHJfc3RydG9rKE5V TEwsICIgIiwgJmxhc3QpOwotICAgICAgICAgICAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICAg ICAgICAgICAgIGxlbiA9IHN0cnRvbChsZW5ndGgsIChjaGFyICoqKSBOVUxMLCAxMCk7CisgICAg ICAgICAgICAgICBpZiAoIWxlbmd0aCB8fCAhcGFyc2Vfc2l6ZShsZW5ndGgsICZsZW4pKSB7Cisg ICAgICAgICAgICAgICAgICAgcnYgPSBBUFJfRUlOVkFMOwogICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgLyogZWF0IHRoZSB0cmFpbGlu ZyBcclxuICovCisgICAgICAgICAgICAgICAgICAgcnYgPSBhcHJfYnJpZ2FkZV9wYXJ0aXRpb24o Y29ubi0+YmIsIGxlbisyLCAmZSk7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBp ZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICBhcHJfcG9sbHNldF9y ZW1vdmUgKHBvbGxzZXQsICZhY3RpdmVmZHNbaV0pOworICAgICAgICAgICAgICAgICAgIG1nZXRf Y29ubl9yZXN1bHQoRkFMU0UsIEZBTFNFLCBydiwgbWMsIG1zLCBjb25uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3F1ZXJ5LCB2YWx1ZXMsIHNlcnZlcl9xdWVy aWVzKTsKKyAgICAgICAgICAgICAgICAgICBxdWVyaWVzX3NlbnQtLTsKKyAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgdmFsdWUg PSBhcHJfaGFzaF9nZXQodmFsdWVzLCBrZXksIHN0cmxlbihrZXkpKTsKLQotICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICBpZiAo bGVuICE9IDApICB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGFwcl9idWNrZXRfYnJpZ2FkZSAq YmJiOwotICAgICAgICAgICAgICAgICAgICAgICBhcHJfYnVja2V0ICplOwotICAgICAgICAgICAg ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgLyogZWF0IHRoZSB0cmFpbGluZyBc clxuICovCi0gICAgICAgICAgICAgICAgICAgICAgIHJ2ID0gYXByX2JyaWdhZGVfcGFydGl0aW9u KGNvbm4tPmJiLCBsZW4rMiwgJmUpOwotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICBhcHJfcG9sbHNldF9yZW1vdmUgKHBvbGxzZXQsICZhY3RpdmVmZHNbaV0pOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdldF9jb25uX3Jlc3VsdChGQUxTRSwgRkFMU0Us IHJ2LCBtYywgbXMsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlcnZlcl9xdWVyeSwgdmFsdWVzLCBzZXJ2ZXJfcXVlcmllcyk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICBxdWVyaWVzX3NlbnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICBiYmIgPSBhcHJfYnJpZ2FkZV9zcGxpdChj b25uLT5iYiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg ICAgICBydiA9IGFwcl9icmlnYWRlX3BmbGF0dGVuKGNvbm4tPmJiLCAmZGF0YSwgJmxlbiwgZGF0 YV9wb29sKTsKLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg IGlmIChydiAhPSBBUFJfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy X3BvbGxzZXRfcmVtb3ZlIChwb2xsc2V0LCAmYWN0aXZlZmRzW2ldKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1nZXRfY29ubl9yZXN1bHQoRkFMU0UsIEZBTFNFLCBydiwgbWMsIG1zLCBj b25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJf cXVlcnksIHZhbHVlcywgc2VydmVyX3F1ZXJpZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgcXVlcmllc19zZW50LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg ICAgICAgICAgICAgICAgICAgcnYgPSBhcHJfYnJpZ2FkZV9kZXN0cm95KGNvbm4tPmJiKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICBhcHJfcG9sbHNldF9yZW1vdmUgKHBvbGxzZXQsICZhY3RpdmVmZHNb aV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdldF9jb25uX3Jlc3VsdChGQUxTRSwg RkFMU0UsIHJ2LCBtYywgbXMsIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlcnZlcl9xdWVyeSwgdmFsdWVzLCBzZXJ2ZXJfcXVlcmllcyk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICBxdWVyaWVzX3NlbnQtLTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iYiA9IGJiYjsKLSAg ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5sZW4g PSBsZW4gLSAyOwotICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3ZhbHVlLT5sZW5dID0gJ1ww JzsKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmRhdGEgPSBkYXRhOworICAgICAgICAg ICAgICAgICAgIGFwcl9idWNrZXRfYnJpZ2FkZSAqYmJiOworICAgICAgICAgICAgICAgICAgCisg ICAgICAgICAgICAgICAgICAgYmJiID0gYXByX2JyaWdhZGVfc3BsaXQoY29ubi0+YmIsIGUpOwor ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIHJ2ID0gYXByX2JyaWdhZGVf cGZsYXR0ZW4oY29ubi0+YmIsICZkYXRhLCAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YV9wb29sKTsKKyAgICAgICAgICAgICAgICAgICBpZiAo cnYgIT0gQVBSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgYXByX3BvbGxzZXRf cmVtb3ZlIChwb2xsc2V0LCAmYWN0aXZlZmRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAg bWdldF9jb25uX3Jlc3VsdChGQUxTRSwgRkFMU0UsIHJ2LCBtYywgbXMsIGNvbm4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3F1ZXJ5LCB2YWx1ZXMsIHNl cnZlcl9xdWVyaWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcXVlcmllc19zZW50LS07Cisg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBydiA9IGFwcl9icmlnYWRlX2Rl c3Ryb3koY29ubi0+YmIpOworICAgICAgICAgICAgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VT UykgeworICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9sbHNldF9yZW1vdmUgKHBvbGxzZXQs ICZhY3RpdmVmZHNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICBtZ2V0X2Nvbm5fcmVzdWx0 KEZBTFNFLCBGQUxTRSwgcnYsIG1jLCBtcywgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJfcXVlcnksIHZhbHVlcywgc2VydmVyX3F1ZXJpZXMpOwor ICAgICAgICAgICAgICAgICAgICAgICBxdWVyaWVzX3NlbnQtLTsKKyAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg IAorICAgICAgICAgICAgICAgICAgIGNvbm4tPmJiID0gYmJiOworICAgICAgICAgICAgICAgICAg IAorICAgICAgICAgICAgICAgICAgIHZhbHVlLT5sZW4gPSBsZW4gLSAyOworICAgICAgICAgICAg ICAgICAgIGRhdGFbdmFsdWUtPmxlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgIHZhbHVl LT5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2 YWx1ZS0+c3RhdHVzID0gcnY7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmZsYWdzID0gYXRv aShmbGFncyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLyogc3Rh eSBvbiB0aGUgc2VydmVyICovCiAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICAgLyogVE9ETzogU2VydmVyIFNlbnQgYmFjayBhIGtleSBJIGRpZG4ndCBhc2sg Zm9yIG9yIG15Ci0gICAgICAgICAgICAgICAgICAgICogICAgICAgaGFzaCBpcyBjb3JydXB0ICov CisgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIFNlbnQgYmFjayBhIGtleSBJIGRpZG4ndCBh c2sgZm9yIG9yIG15CisgICAgICAgICAgICAgICAgICAgICogaGFzaCBpcyBjb3JydXB0ICovCisg ICAgICAgICAgICAgICAgICAgcnYgPSBBUFJfRUdFTkVSQUw7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoc3RybmNtcChNU19FTkQsIGNvbm4tPmJ1 ZmZlciwgTVNfRU5EX0xFTikgPT0gMCkgewpAQCAtMTQzNiw3ICsxNDQ4LDYgQEAgYXByX21lbWNh Y2hlX211bHRnZXRwKGFwcl9tZW1jYWNoZV90ICptYywKICAgICAgICAgICAgICAgIGFwcl9wb2xs c2V0X3JlbW92ZSAocG9sbHNldCwgJmFjdGl2ZWZkc1tpXSk7CiAgICAgICAgICAgICAgICBtc19y ZWxlYXNlX2Nvbm4obXMsIGNvbm4pOwogICAgICAgICAgICAgICAgYXByX2hhc2hfc2V0KHNlcnZl cl9xdWVyaWVzLCAmbXMsIHNpemVvZihtcyksIE5VTEwpOwotICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICBxdWVyaWVzX3NlbnQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl IHsKQEAgLTE0NDMsNyArMTQ1NCwxMiBAQCBhcHJfbWVtY2FjaGVfbXVsdGdldHAoYXByX21lbWNh Y2hlX3QgKm1jLAogICAgICAgICAgICAgICAgLyogdW5rbm93biByZXBseT8gKi8KICAgICAgICAg ICAgICAgIHJ2ID0gQVBSX0VHRU5FUkFMOwogICAgICAgICAgICB9Ci0gICAgICAgICAgIAorICAg ICAgICAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgIGFwcl9wb2xs c2V0X3JlbW92ZSAocG9sbHNldCwgJmFjdGl2ZWZkc1tpXSk7CisgICAgICAgICAgICAgICBtZ2V0 X2Nvbm5fcmVzdWx0KEZBTFNFLCBGQUxTRSwgcnYsIG1jLCBtcywgY29ubiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3F1ZXJ5LCB2YWx1ZXMsIHNlcnZlcl9xdWVyaWVz KTsKKyAgICAgICAgICAgICAgIHF1ZXJpZXNfc2VudC0tOworICAgICAgICAgICB9CiAgICAgICAg IH0gLyogL2ZvciAqLwogICAgIH0gLyogL3doaWxlICovCiAgICAgCg== --001a1135470833f77605207f1d71--