From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v4 10/12] xenstore: add helper functions for wire argument parsing Date: Mon, 5 Dec 2016 08:48:51 +0100 Message-ID: <20161205074853.13268-11-jgross@suse.com> References: <20161205074853.13268-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cDo1S-0003Wt-5K for xen-devel@lists.xenproject.org; Mon, 05 Dec 2016 07:49:14 +0000 In-Reply-To: <20161205074853.13268-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org VGhlIHhlbnN0b3JlIHdpcmUgY29tbWFuZCBhcmd1bWVudCBwYXJzaW5nIG9mIHRoZSBkaWZmZXJl bnQgY29tbWFuZHMKaXMgcmVwZWF0aW5nIHNvbWUgcGF0dGVybnMgbXVsdGlwbGUgdGltZXMuIEFk ZCBzb21lIGhlbHBlciBmdW5jdGlvbnMKdG8gYXZvaWQgdGhlIGR1cGxpY2F0ZWQgY29kZS4KClNp Z25lZC1vZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpncm9zc0BzdXNlLmNvbT4KQWNrZWQtYnk6IFdl aSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogdG9vbHMveGVuc3RvcmUveGVuc3RvcmVk X2NvcmUuYyAgIHwgNjYgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogdG9vbHMveGVuc3Rv cmUveGVuc3RvcmVkX2RvbWFpbi5jIHwgOTAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKyksIDc5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9jb3JlLmMgYi90b29s cy94ZW5zdG9yZS94ZW5zdG9yZWRfY29yZS5jCmluZGV4IDQzOGE4Y2UuLmExMTg0NTggMTAwNjQ0 Ci0tLSBhL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9jb3JlLmMKKysrIGIvdG9vbHMveGVuc3Rv cmUveGVuc3RvcmVkX2NvcmUuYwpAQCAtNzQ1LDEzICs3NDUsMjUgQEAgY2hhciAqY2Fub25pY2Fs aXplKHN0cnVjdCBjb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpub2RlKQogCXJldHVybiAo Y2hhciAqKW5vZGU7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqZ2V0X25vZGVfY2Fub25pY2Fs aXplZChzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwKKwkJCQkJICAgY29uc3Qgdm9pZCAqY3R4LAor CQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICBjaGFyICoqY2Fub25pY2FsX25hbWUs CisJCQkJCSAgIGVudW0geHNfcGVybV90eXBlIHBlcm0pCit7CisJY2hhciAqdG1wX25hbWU7CisK KwlpZiAoIWNhbm9uaWNhbF9uYW1lKQorCQljYW5vbmljYWxfbmFtZSA9ICZ0bXBfbmFtZTsKKwkq Y2Fub25pY2FsX25hbWUgPSBjYW5vbmljYWxpemUoY29ubiwgbmFtZSk7CisJcmV0dXJuIGdldF9u b2RlKGNvbm4sIGN0eCwgKmNhbm9uaWNhbF9uYW1lLCBwZXJtKTsKK30KKwogc3RhdGljIGludCBz ZW5kX2RpcmVjdG9yeShzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1ZmZlcmVkX2Rh dGEgKmluKQogewogCXN0cnVjdCBub2RlICpub2RlOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBvbmVh cmcoaW4pOwogCi0JbmFtZSA9IGNhbm9uaWNhbGl6ZShjb25uLCBuYW1lKTsKLQlub2RlID0gZ2V0 X25vZGUoY29ubiwgaW4sIG5hbWUsIFhTX1BFUk1fUkVBRCk7CisJbm9kZSA9IGdldF9ub2RlX2Nh bm9uaWNhbGl6ZWQoY29ubiwgaW4sIG9uZWFyZyhpbiksIE5VTEwsIFhTX1BFUk1fUkVBRCk7CiAJ aWYgKCFub2RlKQogCQlyZXR1cm4gZXJybm87CiAKQEAgLTc2NCw3ICs3NzYsNyBAQCBzdGF0aWMg aW50IHNlbmRfZGlyZWN0b3J5X3BhcnQoc3RydWN0IGNvbm5lY3Rpb24gKmNvbm4sCiAJCQkgICAg ICAgc3RydWN0IGJ1ZmZlcmVkX2RhdGEgKmluKQogewogCXVuc2lnbmVkIGludCBvZmYsIGxlbiwg bWF4bGVuLCBnZW5sZW47Ci0JY2hhciAqbmFtZSwgKmNoaWxkLCAqZGF0YTsKKwljaGFyICpjaGls ZCwgKmRhdGE7CiAJc3RydWN0IG5vZGUgKm5vZGU7CiAJY2hhciBnZW5bMjRdOwogCkBAIC03NzIs MTUgKzc4NCwxMyBAQCBzdGF0aWMgaW50IHNlbmRfZGlyZWN0b3J5X3BhcnQoc3RydWN0IGNvbm5l Y3Rpb24gKmNvbm4sCiAJCXJldHVybiBFSU5WQUw7CiAKIAkvKiBGaXJzdCBhcmcgaXMgbm9kZSBu YW1lLiAqLwotCW5hbWUgPSBjYW5vbmljYWxpemUoY29ubiwgaW4tPmJ1ZmZlcik7CisJbm9kZSA9 IGdldF9ub2RlX2Nhbm9uaWNhbGl6ZWQoY29ubiwgaW4sIGluLT5idWZmZXIsIE5VTEwsIFhTX1BF Uk1fUkVBRCk7CisJaWYgKCFub2RlKQorCQlyZXR1cm4gZXJybm87CiAKIAkvKiBTZWNvbmQgYXJn IGlzIGNoaWxkbGlzdCBvZmZzZXQuICovCiAJb2ZmID0gYXRvaShpbi0+YnVmZmVyICsgc3RybGVu KGluLT5idWZmZXIpICsgMSk7CiAKLQlub2RlID0gZ2V0X25vZGUoY29ubiwgaW4sIG5hbWUsIFhT X1BFUk1fUkVBRCk7Ci0JaWYgKCFub2RlKQotCQlyZXR1cm4gZXJybm87Ci0KIAlnZW5sZW4gPSBz bnByaW50ZihnZW4sIHNpemVvZihnZW4pLCAiJSJQUkl1NjQsIG5vZGUtPmdlbmVyYXRpb24pICsg MTsKIAogCS8qIE9mZnNldCBiZWhpbmQgbGlzdDoganVzdCByZXR1cm4gYSBsaXN0IHdpdGggYW4g ZW1wdHkgc3RyaW5nLiAqLwpAQCAtODIwLDEwICs4MzAsOCBAQCBzdGF0aWMgaW50IHNlbmRfZGly ZWN0b3J5X3BhcnQoc3RydWN0IGNvbm5lY3Rpb24gKmNvbm4sCiBzdGF0aWMgaW50IGRvX3JlYWQo c3RydWN0IGNvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBidWZmZXJlZF9kYXRhICppbikKIHsKIAlz dHJ1Y3Qgbm9kZSAqbm9kZTsKLQljb25zdCBjaGFyICpuYW1lID0gb25lYXJnKGluKTsKIAotCW5h bWUgPSBjYW5vbmljYWxpemUoY29ubiwgbmFtZSk7Ci0Jbm9kZSA9IGdldF9ub2RlKGNvbm4sIGlu LCBuYW1lLCBYU19QRVJNX1JFQUQpOworCW5vZGUgPSBnZXRfbm9kZV9jYW5vbmljYWxpemVkKGNv bm4sIGluLCBvbmVhcmcoaW4pLCBOVUxMLCBYU19QRVJNX1JFQUQpOwogCWlmICghbm9kZSkKIAkJ cmV0dXJuIGVycm5vOwogCkBAIC05NjIsOCArOTcwLDcgQEAgc3RhdGljIGludCBkb193cml0ZShz dHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1ZmZlcmVkX2RhdGEgKmluKQogCW9mZnNl dCA9IHN0cmxlbih2ZWNbMF0pICsgMTsKIAlkYXRhbGVuID0gaW4tPnVzZWQgLSBvZmZzZXQ7CiAK LQluYW1lID0gY2Fub25pY2FsaXplKGNvbm4sIHZlY1swXSk7Ci0Jbm9kZSA9IGdldF9ub2RlKGNv bm4sIGluLCBuYW1lLCBYU19QRVJNX1dSSVRFKTsKKwlub2RlID0gZ2V0X25vZGVfY2Fub25pY2Fs aXplZChjb25uLCBpbiwgdmVjWzBdLCAmbmFtZSwgWFNfUEVSTV9XUklURSk7CiAJaWYgKCFub2Rl KSB7CiAJCS8qIE5vIHBlcm1pc3Npb25zLCBpbnZhbGlkIGlucHV0PyAqLwogCQlpZiAoZXJybm8g IT0gRU5PRU5UKQpAQCAtOTg3LDEzICs5OTQsMTAgQEAgc3RhdGljIGludCBkb193cml0ZShzdHJ1 Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1ZmZlcmVkX2RhdGEgKmluKQogc3RhdGljIGlu dCBkb19ta2RpcihzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1ZmZlcmVkX2RhdGEg KmluKQogewogCXN0cnVjdCBub2RlICpub2RlOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBvbmVhcmco aW4pOworCWNoYXIgKm5hbWU7CiAKLQlpZiAoIW5hbWUpCi0JCXJldHVybiBFSU5WQUw7Ci0KLQlu YW1lID0gY2Fub25pY2FsaXplKGNvbm4sIG5hbWUpOwotCW5vZGUgPSBnZXRfbm9kZShjb25uLCBp biwgbmFtZSwgWFNfUEVSTV9XUklURSk7CisJbm9kZSA9IGdldF9ub2RlX2Nhbm9uaWNhbGl6ZWQo Y29ubiwgaW4sIG9uZWFyZyhpbiksICZuYW1lLAorCQkJCSAgICAgIFhTX1BFUk1fV1JJVEUpOwog CiAJLyogSWYgaXQgYWxyZWFkeSBleGlzdHMsIGZpbmUuICovCiAJaWYgKCFub2RlKSB7CkBAIC0x MTAzLDEwICsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgZG9fcm0oc3RydWN0IGNvbm5lY3Rpb24gKmNv bm4sIHN0cnVjdCBidWZmZXJlZF9kYXRhICppbikKIHsKIAlzdHJ1Y3Qgbm9kZSAqbm9kZTsKIAlp bnQgcmV0OwotCWNvbnN0IGNoYXIgKm5hbWUgPSBvbmVhcmcoaW4pOworCWNoYXIgKm5hbWU7CiAK LQluYW1lID0gY2Fub25pY2FsaXplKGNvbm4sIG5hbWUpOwotCW5vZGUgPSBnZXRfbm9kZShjb25u LCBpbiwgbmFtZSwgWFNfUEVSTV9XUklURSk7CisJbm9kZSA9IGdldF9ub2RlX2Nhbm9uaWNhbGl6 ZWQoY29ubiwgaW4sIG9uZWFyZyhpbiksICZuYW1lLAorCQkJCSAgICAgIFhTX1BFUk1fV1JJVEUp OwogCWlmICghbm9kZSkgewogCQkvKiBEaWRuJ3QgZXhpc3QgYWxyZWFkeT8gIEZpbmUsIGlmIHBh cmVudCBleGlzdHMuICovCiAJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKQEAgLTExMzgsMTIgKzEx NDIsMTAgQEAgc3RhdGljIGludCBkb19ybShzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0 IGJ1ZmZlcmVkX2RhdGEgKmluKQogc3RhdGljIGludCBkb19nZXRfcGVybXMoc3RydWN0IGNvbm5l Y3Rpb24gKmNvbm4sIHN0cnVjdCBidWZmZXJlZF9kYXRhICppbikKIHsKIAlzdHJ1Y3Qgbm9kZSAq bm9kZTsKLQljb25zdCBjaGFyICpuYW1lID0gb25lYXJnKGluKTsKIAljaGFyICpzdHJpbmdzOwog CXVuc2lnbmVkIGludCBsZW47CiAKLQluYW1lID0gY2Fub25pY2FsaXplKGNvbm4sIG5hbWUpOwot CW5vZGUgPSBnZXRfbm9kZShjb25uLCBpbiwgbmFtZSwgWFNfUEVSTV9SRUFEKTsKKwlub2RlID0g Z2V0X25vZGVfY2Fub25pY2FsaXplZChjb25uLCBpbiwgb25lYXJnKGluKSwgTlVMTCwgWFNfUEVS TV9SRUFEKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiBlcnJubzsKIApAQCAtMTE2OCwxNSArMTE3 MCwxNSBAQCBzdGF0aWMgaW50IGRvX3NldF9wZXJtcyhzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwg c3RydWN0IGJ1ZmZlcmVkX2RhdGEgKmluKQogCQlyZXR1cm4gRUlOVkFMOwogCiAJLyogRmlyc3Qg YXJnIGlzIG5vZGUgbmFtZS4gKi8KLQluYW1lID0gY2Fub25pY2FsaXplKGNvbm4sIGluLT5idWZm ZXIpOworCS8qIFdlIG11c3Qgb3duIG5vZGUgdG8gZG8gdGhpcyAodG9vbHMgY2FuIGRvIHRoaXMg dG9vKS4gKi8KKwlub2RlID0gZ2V0X25vZGVfY2Fub25pY2FsaXplZChjb25uLCBpbiwgaW4tPmJ1 ZmZlciwgJm5hbWUsCisJCQkJICAgICAgWFNfUEVSTV9XUklURSB8IFhTX1BFUk1fT1dORVIpOwor CWlmICghbm9kZSkKKwkJcmV0dXJuIGVycm5vOworCiAJcGVybXN0ciA9IGluLT5idWZmZXIgKyBz dHJsZW4oaW4tPmJ1ZmZlcikgKyAxOwogCW51bS0tOwogCi0JLyogV2UgbXVzdCBvd24gbm9kZSB0 byBkbyB0aGlzICh0b29scyBjYW4gZG8gdGhpcyB0b28pLiAqLwotCW5vZGUgPSBnZXRfbm9kZShj b25uLCBpbiwgbmFtZSwgWFNfUEVSTV9XUklURXxYU19QRVJNX09XTkVSKTsKLQlpZiAoIW5vZGUp Ci0JCXJldHVybiBlcnJubzsKLQogCXBlcm1zID0gdGFsbG9jX2FycmF5KG5vZGUsIHN0cnVjdCB4 c19wZXJtaXNzaW9ucywgbnVtKTsKIAlpZiAoIXhzX3N0cmluZ3NfdG9fcGVybXMocGVybXMsIG51 bSwgcGVybXN0cikpCiAJCXJldHVybiBlcnJubzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnN0b3Jl L3hlbnN0b3JlZF9kb21haW4uYyBiL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9kb21haW4uYwpp bmRleCAwYjJhZjEzLi4yNDQzYjA4IDEwMDY0NAotLS0gYS90b29scy94ZW5zdG9yZS94ZW5zdG9y ZWRfZG9tYWluLmMKKysrIGIvdG9vbHMveGVuc3RvcmUveGVuc3RvcmVkX2RvbWFpbi5jCkBAIC0z OTksNiArMzk5LDE4IEBAIGludCBkb19pbnRyb2R1Y2Uoc3RydWN0IGNvbm5lY3Rpb24gKmNvbm4s IHN0cnVjdCBidWZmZXJlZF9kYXRhICppbikKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVj dCBkb21haW4gKmZpbmRfY29ubmVjdGVkX2RvbWFpbih1bnNpZ25lZCBpbnQgZG9taWQpCit7CisJ c3RydWN0IGRvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gZmluZF9kb21haW5fYnlfZG9taWQo ZG9taWQpOworCWlmICghZG9tYWluKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwlpZiAo IWRvbWFpbi0+Y29ubikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJcmV0dXJuIGRvbWFp bjsKK30KKwogaW50IGRvX3NldF90YXJnZXQoc3RydWN0IGNvbm5lY3Rpb24gKmNvbm4sIHN0cnVj dCBidWZmZXJlZF9kYXRhICppbikKIHsKIAljaGFyICp2ZWNbMl07CkBAIC00MTMsMTggKzQyNSwx MyBAQCBpbnQgZG9fc2V0X3RhcmdldChzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1 ZmZlcmVkX2RhdGEgKmluKQogCWRvbWlkID0gYXRvaSh2ZWNbMF0pOwogCXRkb21pZCA9IGF0b2ko dmVjWzFdKTsKIAotICAgICAgICBkb21haW4gPSBmaW5kX2RvbWFpbl9ieV9kb21pZChkb21pZCk7 Ci0JaWYgKCFkb21haW4pCi0JCXJldHVybiBFTk9FTlQ7Ci0gICAgICAgIGlmICghZG9tYWluLT5j b25uKQotCQlyZXR1cm4gRUlOVkFMOworICAgICAgICBkb21haW4gPSBmaW5kX2Nvbm5lY3RlZF9k b21haW4oZG9taWQpOworCWlmIChJU19FUlIoZG9tYWluKSkKKwkJcmV0dXJuIC1QVFJfRVJSKGRv bWFpbik7CiAKLSAgICAgICAgdGRvbWFpbiA9IGZpbmRfZG9tYWluX2J5X2RvbWlkKHRkb21pZCk7 Ci0JaWYgKCF0ZG9tYWluKQotCQlyZXR1cm4gRU5PRU5UOwotCi0gICAgICAgIGlmICghdGRvbWFp bi0+Y29ubikKLQkJcmV0dXJuIEVJTlZBTDsKKyAgICAgICAgdGRvbWFpbiA9IGZpbmRfY29ubmVj dGVkX2RvbWFpbih0ZG9taWQpOworCWlmIChJU19FUlIodGRvbWFpbikpCisJCXJldHVybiAtUFRS X0VSUih0ZG9tYWluKTsKIAogICAgICAgICB0YWxsb2NfcmVmZXJlbmNlKGRvbWFpbi0+Y29ubiwg dGRvbWFpbi0+Y29ubik7CiAgICAgICAgIGRvbWFpbi0+Y29ubi0+dGFyZ2V0ID0gdGRvbWFpbi0+ Y29ubjsKQEAgLTQzNCwyOSArNDQxLDMzIEBAIGludCBkb19zZXRfdGFyZ2V0KHN0cnVjdCBjb25u ZWN0aW9uICpjb25uLCBzdHJ1Y3QgYnVmZmVyZWRfZGF0YSAqaW4pCiAJcmV0dXJuIDA7CiB9CiAK K3N0YXRpYyBzdHJ1Y3QgZG9tYWluICpvbmVhcmdfZG9tYWluKHN0cnVjdCBjb25uZWN0aW9uICpj b25uLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyZWRfZGF0YSAqaW4pCit7CisJY29uc3QgY2hhciAq ZG9taWRfc3RyID0gb25lYXJnKGluKTsKKwl1bnNpZ25lZCBpbnQgZG9taWQ7CisKKwlpZiAoIWRv bWlkX3N0cikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlkb21pZCA9IGF0b2koZG9t aWRfc3RyKTsKKwlpZiAoIWRvbWlkKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlm IChkb21haW5faXNfdW5wcml2aWxlZ2VkKGNvbm4pKQorCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VT KTsKKworCXJldHVybiBmaW5kX2Nvbm5lY3RlZF9kb21haW4oZG9taWQpOworfQorCiAvKiBkb21p ZCAqLwogaW50IGRvX3JlbGVhc2Uoc3RydWN0IGNvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBidWZm ZXJlZF9kYXRhICppbikKIHsKLQljb25zdCBjaGFyICpkb21pZF9zdHIgPSBvbmVhcmcoaW4pOwog CXN0cnVjdCBkb21haW4gKmRvbWFpbjsKLQl1bnNpZ25lZCBpbnQgZG9taWQ7CiAKLQlpZiAoIWRv bWlkX3N0cikKLQkJcmV0dXJuIEVJTlZBTDsKLQotCWRvbWlkID0gYXRvaShkb21pZF9zdHIpOwot CWlmICghZG9taWQpCi0JCXJldHVybiBFSU5WQUw7Ci0KLQlpZiAoZG9tYWluX2lzX3VucHJpdmls ZWdlZChjb25uKSkKLQkJcmV0dXJuIEVBQ0NFUzsKLQotCWRvbWFpbiA9IGZpbmRfZG9tYWluX2J5 X2RvbWlkKGRvbWlkKTsKLQlpZiAoIWRvbWFpbikKLQkJcmV0dXJuIEVOT0VOVDsKLQotCWlmICgh ZG9tYWluLT5jb25uKQotCQlyZXR1cm4gRUlOVkFMOworCWRvbWFpbiA9IG9uZWFyZ19kb21haW4o Y29ubiwgaW4pOworCWlmIChJU19FUlIoZG9tYWluKSkKKwkJcmV0dXJuIC1QVFJfRVJSKGRvbWFp bik7CiAKIAl0YWxsb2NfZnJlZShkb21haW4tPmNvbm4pOwogCkBAIC00NjgsMjUgKzQ3OSwxMCBA QCBpbnQgZG9fcmVsZWFzZShzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGJ1ZmZlcmVk X2RhdGEgKmluKQogaW50IGRvX3Jlc3VtZShzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgc3RydWN0 IGJ1ZmZlcmVkX2RhdGEgKmluKQogewogCXN0cnVjdCBkb21haW4gKmRvbWFpbjsKLQl1bnNpZ25l ZCBpbnQgZG9taWQ7Ci0JY29uc3QgY2hhciAqZG9taWRfc3RyID0gb25lYXJnKGluKTsKIAotCWlm ICghZG9taWRfc3RyKQotCQlyZXR1cm4gRUlOVkFMOwotCi0JZG9taWQgPSBhdG9pKGRvbWlkX3N0 cik7Ci0JaWYgKCFkb21pZCkKLQkJcmV0dXJuIEVJTlZBTDsKLQotCWlmIChkb21haW5faXNfdW5w cml2aWxlZ2VkKGNvbm4pKQotCQlyZXR1cm4gRUFDQ0VTOwotCi0JZG9tYWluID0gZmluZF9kb21h aW5fYnlfZG9taWQoZG9taWQpOwotCWlmICghZG9tYWluKQotCQlyZXR1cm4gRU5PRU5UOwotCi0J aWYgKCFkb21haW4tPmNvbm4pCi0JCXJldHVybiBFSU5WQUw7CisJZG9tYWluID0gb25lYXJnX2Rv bWFpbihjb25uLCBpbik7CisJaWYgKElTX0VSUihkb21haW4pKQorCQlyZXR1cm4gLVBUUl9FUlIo ZG9tYWluKTsKIAogCWRvbWFpbi0+c2h1dGRvd24gPSAwOwogCQotLSAKMi4xMC4yCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==