From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9EE2C388F7 for ; Thu, 22 Oct 2020 11:32:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 055E7206E5 for ; Thu, 22 Oct 2020 11:32:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="BK0VjHBb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 055E7206E5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:60866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kVYpg-0000ZS-Pp for qemu-devel@archiver.kernel.org; Thu, 22 Oct 2020 07:32:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kVYlN-00042Z-EJ for qemu-devel@nongnu.org; Thu, 22 Oct 2020 07:28:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:32220) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kVYlH-00050z-0l for qemu-devel@nongnu.org; Thu, 22 Oct 2020 07:28:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603366081; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dFpMASVSNF4gnj4wpvZPZnPDmOAhSVnZ+tVY7OKNgmc=; b=BK0VjHBbxQk59JxtlsxJKICSBabmahl2BORNwYOJj9wDpHVgUoZmhnuedW1Mpm1rzlv9oj oYlUjonoqjm03xO1YIEz5I75JspVp0iMCEkRRCpgNiondu3lmi8z7j7GOM2L1GIRD3A1mP tjMFiMbCEmgn+4abSEJSNIQ8uMIrn4A= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-213-eaBDNC3nNXiokZq11uKR1w-1; Thu, 22 Oct 2020 07:27:59 -0400 X-MC-Unique: eaBDNC3nNXiokZq11uKR1w-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CC3921009E23; Thu, 22 Oct 2020 11:27:57 +0000 (UTC) Received: from localhost (ovpn-114-229.ams2.redhat.com [10.36.114.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id E62D75C1C7; Thu, 22 Oct 2020 11:27:49 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL v2 04/28] util/vhost-user-server: generic vhost user server Date: Thu, 22 Oct 2020 12:27:02 +0100 Message-Id: <20201022112726.736757-5-stefanha@redhat.com> In-Reply-To: <20201022112726.736757-1-stefanha@redhat.com> References: <20201022112726.736757-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=216.205.24.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/22 00:54:46 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , qemu-block@nongnu.org, "Dr. David Alan Gilbert" , Coiby Xu , Markus Armbruster , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , Max Reitz Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" RnJvbTogQ29pYnkgWHUgPGNvaWJ5Lnh1QGdtYWlsLmNvbT4KClNoYXJpbmcgUUVNVSBkZXZpY2Vz IHZpYSB2aG9zdC11c2VyIHByb3RvY29sLgoKT25seSBvbmUgdmhvc3QtdXNlciBjbGllbnQgY2Fu IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBvbmUgdGltZS4KClN1Z2dlc3RlZC1ieTogS2V2aW4gV29s ZiA8a3dvbGZAcmVkaGF0LmNvbT4KU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVm YW5oYUByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBDb2lieSBYdSA8Y29pYnkueHVAZ21haWwu Y29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUByZWRoYXQuY29tPgpS ZXZpZXdlZC1ieTogTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QHJlZGhhdC5j b20+Ck1lc3NhZ2UtaWQ6IDIwMjAwOTE4MDgwOTEyLjMyMTI5OS00LWNvaWJ5Lnh1QGdtYWlsLmNv bQpbRml4ZWQgc2l6ZV90ICVsdSAtPiAlenUgZm9ybWF0IHN0cmluZyBjb21waWxlciBlcnJvci4K LS1TdGVmYW5dClNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0 LmNvbT4KLS0tCiB1dGlsL3Zob3N0LXVzZXItc2VydmVyLmggfCAgNjUgKysrKysrCiB1dGlsL3Zo b3N0LXVzZXItc2VydmVyLmMgfCA0MjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiB1dGlsL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2Vk LCA0OTQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHV0aWwvdmhvc3QtdXNlci1z ZXJ2ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHV0aWwvdmhvc3QtdXNlci1zZXJ2ZXIuYwoKZGlm ZiAtLWdpdCBhL3V0aWwvdmhvc3QtdXNlci1zZXJ2ZXIuaCBiL3V0aWwvdmhvc3QtdXNlci1zZXJ2 ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41MjMyZjk2NzE4Ci0t LSAvZGV2L251bGwKKysrIGIvdXRpbC92aG9zdC11c2VyLXNlcnZlci5oCkBAIC0wLDAgKzEsNjUg QEAKKy8qCisgKiBTaGFyaW5nIFFFTVUgZGV2aWNlcyB2aWEgdmhvc3QtdXNlciBwcm90b2NvbAor ICoKKyAqIENvcHlyaWdodCAoYykgQ29pYnkgWHUgPGNvaWJ5Lnh1QGdtYWlsLmNvbT4uCisgKiBD b3B5cmlnaHQgKGMpIDIwMjAgUmVkIEhhdCwgSW5jLgorICoKKyAqIFRoaXMgd29yayBpcyBsaWNl bnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMiBvcgorICogbGF0 ZXIuICBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyAq LworCisjaWZuZGVmIFZIT1NUX1VTRVJfU0VSVkVSX0gKKyNkZWZpbmUgVkhPU1RfVVNFUl9TRVJW RVJfSAorCisjaW5jbHVkZSAiY29udHJpYi9saWJ2aG9zdC11c2VyL2xpYnZob3N0LXVzZXIuaCIK KyNpbmNsdWRlICJpby9jaGFubmVsLXNvY2tldC5oIgorI2luY2x1ZGUgImlvL2NoYW5uZWwtZmls ZS5oIgorI2luY2x1ZGUgImlvL25ldC1saXN0ZW5lci5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3It cmVwb3J0LmgiCisjaW5jbHVkZSAicWFwaS9lcnJvci5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhl YWRlcnMvbGludXgvdmlydGlvX2Jsay5oIgorCit0eXBlZGVmIHN0cnVjdCBWdUZkV2F0Y2ggewor ICAgIFZ1RGV2ICp2dV9kZXY7CisgICAgaW50IGZkOyAvKmtpY2sgZmQqLworICAgIHZvaWQgKnB2 dDsKKyAgICB2dV93YXRjaF9jYiBjYjsKKyAgICBib29sIHByb2Nlc3Npbmc7CisgICAgUVRBSUxR X0VOVFJZKFZ1RmRXYXRjaCkgbmV4dDsKK30gVnVGZFdhdGNoOworCit0eXBlZGVmIHN0cnVjdCBW dVNlcnZlciBWdVNlcnZlcjsKK3R5cGVkZWYgdm9pZCBEZXZpY2VQYW5pY05vdGlmaWVyRm4oVnVT ZXJ2ZXIgKnNlcnZlcik7CisKK3N0cnVjdCBWdVNlcnZlciB7CisgICAgUUlPTmV0TGlzdGVuZXIg Kmxpc3RlbmVyOworICAgIEFpb0NvbnRleHQgKmN0eDsKKyAgICBEZXZpY2VQYW5pY05vdGlmaWVy Rm4gKmRldmljZV9wYW5pY19ub3RpZmllcjsKKyAgICBpbnQgbWF4X3F1ZXVlczsKKyAgICBjb25z dCBWdURldklmYWNlICp2dV9pZmFjZTsKKyAgICBWdURldiB2dV9kZXY7CisgICAgUUlPQ2hhbm5l bCAqaW9jOyAvKiBUaGUgSS9PIGNoYW5uZWwgd2l0aCB0aGUgY2xpZW50ICovCisgICAgUUlPQ2hh bm5lbFNvY2tldCAqc2lvYzsgLyogVGhlIHVuZGVybHlpbmcgZGF0YSBjaGFubmVsIHdpdGggdGhl IGNsaWVudCAqLworICAgIC8qIElPQ2hhbm5lbCBmb3IgZmQgcHJvdmlkZWQgdmlhIFZIT1NUX1VT RVJfU0VUX1NMQVZFX1JFUV9GRCAqLworICAgIFFJT0NoYW5uZWwgKmlvY19zbGF2ZTsKKyAgICBR SU9DaGFubmVsU29ja2V0ICpzaW9jX3NsYXZlOworICAgIENvcm91dGluZSAqY29fdHJpcDsgLyog Y29yb3V0aW5lIGZvciBwcm9jZXNzaW5nIFZob3N0VXNlck1zZyAqLworICAgIFFUQUlMUV9IRUFE KCwgVnVGZFdhdGNoKSB2dV9mZF93YXRjaGVzOworICAgIC8qIHJlc3RhcnQgY29yb3V0aW5lIGNv X3RyaXAgaWYgQUlPQ29udGV4dCBpcyBjaGFuZ2VkICovCisgICAgYm9vbCBhaW9fY29udGV4dF9j aGFuZ2VkOworICAgIGJvb2wgcHJvY2Vzc2luZ19tc2c7Cit9OworCitib29sIHZob3N0X3VzZXJf c2VydmVyX3N0YXJ0KFZ1U2VydmVyICpzZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNvY2tldEFkZHJlc3MgKnVuaXhfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBaW9Db250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQx Nl90IG1heF9xdWV1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZVBhbmlj Tm90aWZpZXJGbiAqZGV2aWNlX3BhbmljX25vdGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBWdURldklmYWNlICp2dV9pZmFjZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRXJyb3IgKiplcnJwKTsKKwordm9pZCB2aG9zdF91c2VyX3NlcnZlcl9zdG9wKFZ1 U2VydmVyICpzZXJ2ZXIpOworCit2b2lkIHZob3N0X3VzZXJfc2VydmVyX3NldF9haW9fY29udGV4 dChWdVNlcnZlciAqc2VydmVyLCBBaW9Db250ZXh0ICpjdHgpOworCisjZW5kaWYgLyogVkhPU1Rf VVNFUl9TRVJWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvdXRpbC92aG9zdC11c2VyLXNlcnZlci5jIGIv dXRpbC92aG9zdC11c2VyLXNlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmIxODk5NDQ4NTYKLS0tIC9kZXYvbnVsbAorKysgYi91dGlsL3Zob3N0LXVzZXItc2Vy dmVyLmMKQEAgLTAsMCArMSw0MjggQEAKKy8qCisgKiBTaGFyaW5nIFFFTVUgZGV2aWNlcyB2aWEg dmhvc3QtdXNlciBwcm90b2NvbAorICoKKyAqIENvcHlyaWdodCAoYykgQ29pYnkgWHUgPGNvaWJ5 Lnh1QGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgUmVkIEhhdCwgSW5jLgorICoK KyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEws IHZlcnNpb24gMiBvcgorICogbGF0ZXIuICBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9w LWxldmVsIGRpcmVjdG9yeS4KKyAqLworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRl ICJxZW11L21haW4tbG9vcC5oIgorI2luY2x1ZGUgInZob3N0LXVzZXItc2VydmVyLmgiCisKK3N0 YXRpYyB2b2lkIHZtc2dfY2xvc2VfZmRzKFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBpbnQg aTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdm1zZy0+ZmRfbnVtOyBpKyspIHsKKyAgICAgICAgY2xv c2Uodm1zZy0+ZmRzW2ldKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZtc2dfdW5ibG9ja19m ZHMoVmhvc3RVc2VyTXNnICp2bXNnKQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkg PCB2bXNnLT5mZF9udW07IGkrKykgeworICAgICAgICBxZW11X3NldF9ub25ibG9jayh2bXNnLT5m ZHNbaV0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdnVfYWNjZXB0KFFJT05ldExpc3RlbmVy ICpsaXN0ZW5lciwgUUlPQ2hhbm5lbFNvY2tldCAqc2lvYywKKyAgICAgICAgICAgICAgICAgICAg ICBncG9pbnRlciBvcGFxdWUpOworCitzdGF0aWMgdm9pZCBjbG9zZV9jbGllbnQoVnVTZXJ2ZXIg KnNlcnZlcikKK3sKKyAgICAvKgorICAgICAqIEJlZm9yZSBjbG9zaW5nIHRoZSBjbGllbnQKKyAg ICAgKgorICAgICAqIDEuIExldCB2dV9jbGllbnRfdHJpcCBzdG9wIHByb2Nlc3NpbmcgbmV3IHZo b3N0LXVzZXIgbXNnCisgICAgICoKKyAgICAgKiAyLiByZW1vdmUga2lja19oYW5kbGVyCisgICAg ICoKKyAgICAgKiAzLiB3YWl0IGZvciB0aGUga2ljayBoYW5kbGVyIHRvIGJlIGZpbmlzaGVkCisg ICAgICoKKyAgICAgKiA0LiB3YWl0IGZvciB0aGUgY3VycmVudCB2aG9zdC11c2VyIG1zZyB0byBi ZSBmaW5pc2hlZCBwcm9jZXNzaW5nCisgICAgICovCisKKyAgICBRSU9DaGFubmVsU29ja2V0ICpz aW9jID0gc2VydmVyLT5zaW9jOworICAgIC8qIFdoZW4gdGhpcyBpcyBzZXQgdnVfY2xpZW50X3Ry aXAgd2lsbCBzdG9wIG5ldyBwcm9jZXNzaW5nIHZob3N0LXVzZXIgbWVzc2FnZSAqLworICAgIHNl cnZlci0+c2lvYyA9IE5VTEw7CisKKyAgICBWdUZkV2F0Y2ggKnZ1X2ZkX3dhdGNoLCAqbmV4dDsK KyAgICBRVEFJTFFfRk9SRUFDSF9TQUZFKHZ1X2ZkX3dhdGNoLCAmc2VydmVyLT52dV9mZF93YXRj aGVzLCBuZXh0LCBuZXh0KSB7CisgICAgICAgIGFpb19zZXRfZmRfaGFuZGxlcihzZXJ2ZXItPmlv Yy0+Y3R4LCB2dV9mZF93YXRjaC0+ZmQsIHRydWUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIVFUQUlMUV9F TVBUWSgmc2VydmVyLT52dV9mZF93YXRjaGVzKSkgeworICAgICAgICBRVEFJTFFfRk9SRUFDSF9T QUZFKHZ1X2ZkX3dhdGNoLCAmc2VydmVyLT52dV9mZF93YXRjaGVzLCBuZXh0LCBuZXh0KSB7Cisg ICAgICAgICAgICBpZiAoIXZ1X2ZkX3dhdGNoLT5wcm9jZXNzaW5nKSB7CisgICAgICAgICAgICAg ICAgUVRBSUxRX1JFTU9WRSgmc2VydmVyLT52dV9mZF93YXRjaGVzLCB2dV9mZF93YXRjaCwgbmV4 dCk7CisgICAgICAgICAgICAgICAgZ19mcmVlKHZ1X2ZkX3dhdGNoKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChzZXJ2ZXItPnByb2Nlc3NpbmdfbXNnKSB7 CisgICAgICAgIGlmIChzZXJ2ZXItPmlvYy0+cmVhZF9jb3JvdXRpbmUpIHsKKyAgICAgICAgICAg IHNlcnZlci0+aW9jLT5yZWFkX2Nvcm91dGluZSA9IE5VTEw7CisgICAgICAgICAgICBxaW9fY2hh bm5lbF9zZXRfYWlvX2ZkX2hhbmRsZXIoc2VydmVyLT5pb2MsIHNlcnZlci0+aW9jLT5jdHgsIE5V TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc2Vy dmVyLT5pb2MpOworICAgICAgICAgICAgc2VydmVyLT5wcm9jZXNzaW5nX21zZyA9IGZhbHNlOwor ICAgICAgICB9CisgICAgfQorCisgICAgdnVfZGVpbml0KCZzZXJ2ZXItPnZ1X2Rldik7CisgICAg b2JqZWN0X3VucmVmKE9CSkVDVChzaW9jKSk7CisgICAgb2JqZWN0X3VucmVmKE9CSkVDVChzZXJ2 ZXItPmlvYykpOworfQorCitzdGF0aWMgdm9pZCBwYW5pY19jYihWdURldiAqdnVfZGV2LCBjb25z dCBjaGFyICpidWYpCit7CisgICAgVnVTZXJ2ZXIgKnNlcnZlciA9IGNvbnRhaW5lcl9vZih2dV9k ZXYsIFZ1U2VydmVyLCB2dV9kZXYpOworCisgICAgLyogYXZvaWQgd2hpbGUgbG9vcCBpbiBjbG9z ZV9jbGllbnQgKi8KKyAgICBzZXJ2ZXItPnByb2Nlc3NpbmdfbXNnID0gZmFsc2U7CisKKyAgICBp ZiAoYnVmKSB7CisgICAgICAgIGVycm9yX3JlcG9ydCgidnVfcGFuaWM6ICVzIiwgYnVmKTsKKyAg ICB9CisKKyAgICBpZiAoc2VydmVyLT5zaW9jKSB7CisgICAgICAgIGNsb3NlX2NsaWVudChzZXJ2 ZXIpOworICAgIH0KKworICAgIGlmIChzZXJ2ZXItPmRldmljZV9wYW5pY19ub3RpZmllcikgewor ICAgICAgICBzZXJ2ZXItPmRldmljZV9wYW5pY19ub3RpZmllcihzZXJ2ZXIpOworICAgIH0KKwor ICAgIC8qCisgICAgICogU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbmV0d29yayBsaXN0 ZW5lciBzbyBhbm90aGVyCisgICAgICogdmhvc3QtdXNlciBjbGllbnQgY2FuIGNvbm5lY3QgdG8g dGhpcyBzZXJ2ZXIKKyAgICAgKi8KKyAgICBxaW9fbmV0X2xpc3RlbmVyX3NldF9jbGllbnRfZnVu YyhzZXJ2ZXItPmxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZ1X2FjY2VwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKK3N0YXRp YyBib29sIGNvcm91dGluZV9mbgordnVfbWVzc2FnZV9yZWFkKFZ1RGV2ICp2dV9kZXYsIGludCBj b25uX2ZkLCBWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgc3RydWN0IGlvdmVjIGlvdiA9IHsK KyAgICAgICAgLmlvdl9iYXNlID0gKGNoYXIgKil2bXNnLAorICAgICAgICAuaW92X2xlbiA9IFZI T1NUX1VTRVJfSERSX1NJWkUsCisgICAgfTsKKyAgICBpbnQgcmMsIHJlYWRfYnl0ZXMgPSAwOwor ICAgIEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOworICAgIC8qCisgICAgICogU3RvcmUgZmRzL25m ZHMgcmV0dXJuZWQgZnJvbSBxaW9fY2hhbm5lbF9yZWFkdl9mdWxsIGludG8KKyAgICAgKiB0ZW1w b3JhcnkgdmFyaWFibGVzLgorICAgICAqCisgICAgICogVmhvc3RVc2VyTXNnIGlzIGEgcGFja2Vk IHN0cnVjdHVyZSwgZ2NjIHdpbGwgY29tcGxhaW4gYWJvdXQgcGFzc2luZworICAgICAqIHBvaW50 ZXIgdG8gYSBwYWNrZWQgc3RydWN0dXJlIG1lbWJlciBpZiB3ZSBwYXNzICZWaG9zdFVzZXJNc2cu ZmRfbnVtCisgICAgICogYW5kICZWaG9zdFVzZXJNc2cuZmRzIGRpcmVjdGx5IHdoZW4gY2FsbGlu ZyBxaW9fY2hhbm5lbF9yZWFkdl9mdWxsLAorICAgICAqIHRodXMgdHdvIHRlbXBvcmFyeSB2YXJp YWJsZXMgbmZkcyBhbmQgZmRzIGFyZSB1c2VkIGhlcmUuCisgICAgICovCisgICAgc2l6ZV90IG5m ZHMgPSAwLCBuZmRzX3QgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhfZmRzID0gR19OX0VMRU1F TlRTKHZtc2ctPmZkcyk7CisgICAgaW50ICpmZHNfdCA9IE5VTEw7CisgICAgVnVTZXJ2ZXIgKnNl cnZlciA9IGNvbnRhaW5lcl9vZih2dV9kZXYsIFZ1U2VydmVyLCB2dV9kZXYpOworICAgIFFJT0No YW5uZWwgKmlvYyA9IHNlcnZlci0+aW9jOworCisgICAgaWYgKCFpb2MpIHsKKyAgICAgICAgZXJy b3JfcmVwb3J0X2Vycihsb2NhbF9lcnIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisg ICAgYXNzZXJ0KHFlbXVfaW5fY29yb3V0aW5lKCkpOworICAgIGRvIHsKKyAgICAgICAgLyoKKyAg ICAgICAgICogcWlvX2NoYW5uZWxfcmVhZHZfZnVsbCBtYXkgaGF2ZSBzaG9ydCByZWFkcywga2Vl cGluZyBjYWxsaW5nIGl0CisgICAgICAgICAqIHVudGlsIGdldHRpbmcgVkhPU1RfVVNFUl9IRFJf U0laRSBvciAwIGJ5dGVzIGluIHRvdGFsCisgICAgICAgICAqLworICAgICAgICByYyA9IHFpb19j aGFubmVsX3JlYWR2X2Z1bGwoaW9jLCAmaW92LCAxLCAmZmRzX3QsICZuZmRzX3QsICZsb2NhbF9l cnIpOworICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBpZiAocmMgPT0gUUlPX0NI QU5ORUxfRVJSX0JMT0NLKSB7CisgICAgICAgICAgICAgICAgcWlvX2NoYW5uZWxfeWllbGQoaW9j LCBHX0lPX0lOKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0X2Vycihsb2NhbF9lcnIpOworICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICByZWFkX2J5dGVzICs9IHJjOworICAgICAgICBpZiAobmZkc190ID4gMCkgeworICAgICAgICAg ICAgaWYgKG5mZHMgKyBuZmRzX3QgPiBtYXhfZmRzKSB7CisgICAgICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJBIG1heGltdW0gb2YgJXp1IGZkcyBhcmUgYWxsb3dlZCwgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiaG93ZXZlciBnb3QgJXp1IGZkcyBub3ciLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXhfZmRzLCBuZmRzICsgbmZkc190KTsKKyAgICAgICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkodm1zZy0+ZmRz ICsgbmZkcywgZmRzX3QsCisgICAgICAgICAgICAgICAgICAgbmZkc190ICpzaXplb2Yodm1zZy0+ ZmRzWzBdKSk7CisgICAgICAgICAgICBuZmRzICs9IG5mZHNfdDsKKyAgICAgICAgICAgIGdfZnJl ZShmZHNfdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRfYnl0ZXMgPT0gVkhPU1RfVVNF Ul9IRFJfU0laRSB8fCByYyA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgICAgICBpb3YuaW92X2Jhc2UgPSAoY2hhciAqKXZtc2cgKyByZWFkX2J5dGVzOworICAgICAg ICBpb3YuaW92X2xlbiA9IFZIT1NUX1VTRVJfSERSX1NJWkUgLSByZWFkX2J5dGVzOworICAgIH0g d2hpbGUgKHRydWUpOworCisgICAgdm1zZy0+ZmRfbnVtID0gbmZkczsKKyAgICAvKiBxaW9fY2hh bm5lbF9yZWFkdl9mdWxsIHdpbGwgbWFrZSBzb2NrZXQgZmRzIGJsb2NraW5nLCB1bmJsb2NrIHRo ZW0gKi8KKyAgICB2bXNnX3VuYmxvY2tfZmRzKHZtc2cpOworICAgIGlmICh2bXNnLT5zaXplID4g c2l6ZW9mKHZtc2ctPnBheWxvYWQpKSB7CisgICAgICAgIGVycm9yX3JlcG9ydCgiRXJyb3I6IHRv byBiaWcgbWVzc2FnZSByZXF1ZXN0OiAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgInNpemU6 IHZtc2ctPnNpemU6ICV1LCAiCisgICAgICAgICAgICAgICAgICAgICAid2hpbGUgc2l6ZW9mKHZt c2ctPnBheWxvYWQpID0gJXp1IiwKKyAgICAgICAgICAgICAgICAgICAgIHZtc2ctPnJlcXVlc3Qs IHZtc2ctPnNpemUsIHNpemVvZih2bXNnLT5wYXlsb2FkKSk7CisgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92X3BheWxvYWQgPSB7CisgICAgICAgIC5pb3Zf YmFzZSA9IChjaGFyICopJnZtc2ctPnBheWxvYWQsCisgICAgICAgIC5pb3ZfbGVuID0gdm1zZy0+ c2l6ZSwKKyAgICB9OworICAgIGlmICh2bXNnLT5zaXplKSB7CisgICAgICAgIHJjID0gcWlvX2No YW5uZWxfcmVhZHZfYWxsX2VvZihpb2MsICZpb3ZfcGF5bG9hZCwgMSwgJmxvY2FsX2Vycik7Cisg ICAgICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0X2Vycihsb2Nh bF9lcnIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAg cmV0dXJuIHRydWU7CisKK2ZhaWw6CisgICAgdm1zZ19jbG9zZV9mZHModm1zZyk7CisKKyAgICBy ZXR1cm4gZmFsc2U7Cit9CisKKworc3RhdGljIHZvaWQgdnVfY2xpZW50X3N0YXJ0KFZ1U2VydmVy ICpzZXJ2ZXIpOworc3RhdGljIGNvcm91dGluZV9mbiB2b2lkIHZ1X2NsaWVudF90cmlwKHZvaWQg Km9wYXF1ZSkKK3sKKyAgICBWdVNlcnZlciAqc2VydmVyID0gb3BhcXVlOworCisgICAgd2hpbGUg KCFzZXJ2ZXItPmFpb19jb250ZXh0X2NoYW5nZWQgJiYgc2VydmVyLT5zaW9jKSB7CisgICAgICAg IHNlcnZlci0+cHJvY2Vzc2luZ19tc2cgPSB0cnVlOworICAgICAgICB2dV9kaXNwYXRjaCgmc2Vy dmVyLT52dV9kZXYpOworICAgICAgICBzZXJ2ZXItPnByb2Nlc3NpbmdfbXNnID0gZmFsc2U7Cisg ICAgfQorCisgICAgaWYgKHNlcnZlci0+YWlvX2NvbnRleHRfY2hhbmdlZCAmJiBzZXJ2ZXItPnNp b2MpIHsKKyAgICAgICAgc2VydmVyLT5haW9fY29udGV4dF9jaGFuZ2VkID0gZmFsc2U7CisgICAg ICAgIHZ1X2NsaWVudF9zdGFydChzZXJ2ZXIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdnVf Y2xpZW50X3N0YXJ0KFZ1U2VydmVyICpzZXJ2ZXIpCit7CisgICAgc2VydmVyLT5jb190cmlwID0g cWVtdV9jb3JvdXRpbmVfY3JlYXRlKHZ1X2NsaWVudF90cmlwLCBzZXJ2ZXIpOworICAgIGFpb19j b19lbnRlcihzZXJ2ZXItPmN0eCwgc2VydmVyLT5jb190cmlwKTsKK30KKworLyoKKyAqIGEgd3Jh cHBlciBmb3IgdnVfa2lja19jYgorICoKKyAqIHNpbmNlIGFpb19kaXNwYXRjaCBjYW4gb25seSBw YXNzIG9uZSB1c2VyIGRhdGEgcG9pbnRlciB0byB0aGUKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uLCBw YWNrIFZ1RGV2IGFuZCBwdnQgaW50byBhIHN0cnVjdC4gVGhlbiB1bnBhY2sgaXQKKyAqIGFuZCBw YXNzIHRoZW0gdG8gdnVfa2lja19jYgorICovCitzdGF0aWMgdm9pZCBraWNrX2hhbmRsZXIodm9p ZCAqb3BhcXVlKQoreworICAgIFZ1RmRXYXRjaCAqdnVfZmRfd2F0Y2ggPSBvcGFxdWU7CisgICAg dnVfZmRfd2F0Y2gtPnByb2Nlc3NpbmcgPSB0cnVlOworICAgIHZ1X2ZkX3dhdGNoLT5jYih2dV9m ZF93YXRjaC0+dnVfZGV2LCAwLCB2dV9mZF93YXRjaC0+cHZ0KTsKKyAgICB2dV9mZF93YXRjaC0+ cHJvY2Vzc2luZyA9IGZhbHNlOworfQorCisKK3N0YXRpYyBWdUZkV2F0Y2ggKmZpbmRfdnVfZmRf d2F0Y2goVnVTZXJ2ZXIgKnNlcnZlciwgaW50IGZkKQoreworCisgICAgVnVGZFdhdGNoICp2dV9m ZF93YXRjaCwgKm5leHQ7CisgICAgUVRBSUxRX0ZPUkVBQ0hfU0FGRSh2dV9mZF93YXRjaCwgJnNl cnZlci0+dnVfZmRfd2F0Y2hlcywgbmV4dCwgbmV4dCkgeworICAgICAgICBpZiAodnVfZmRfd2F0 Y2gtPmZkID09IGZkKSB7CisgICAgICAgICAgICByZXR1cm4gdnVfZmRfd2F0Y2g7CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfd2F0Y2go VnVEZXYgKnZ1X2RldiwgaW50IGZkLCBpbnQgdnVfZXZ0LAorICAgICAgICAgIHZ1X3dhdGNoX2Ni IGNiLCB2b2lkICpwdnQpCit7CisKKyAgICBWdVNlcnZlciAqc2VydmVyID0gY29udGFpbmVyX29m KHZ1X2RldiwgVnVTZXJ2ZXIsIHZ1X2Rldik7CisgICAgZ19hc3NlcnQodnVfZGV2KTsKKyAgICBn X2Fzc2VydChmZCA+PSAwKTsKKyAgICBnX2Fzc2VydChjYik7CisKKyAgICBWdUZkV2F0Y2ggKnZ1 X2ZkX3dhdGNoID0gZmluZF92dV9mZF93YXRjaChzZXJ2ZXIsIGZkKTsKKworICAgIGlmICghdnVf ZmRfd2F0Y2gpIHsKKyAgICAgICAgVnVGZFdhdGNoICp2dV9mZF93YXRjaCA9IGdfbmV3MChWdUZk V2F0Y2gsIDEpOworCisgICAgICAgIFFUQUlMUV9JTlNFUlRfVEFJTCgmc2VydmVyLT52dV9mZF93 YXRjaGVzLCB2dV9mZF93YXRjaCwgbmV4dCk7CisKKyAgICAgICAgdnVfZmRfd2F0Y2gtPmZkID0g ZmQ7CisgICAgICAgIHZ1X2ZkX3dhdGNoLT5jYiA9IGNiOworICAgICAgICBxZW11X3NldF9ub25i bG9jayhmZCk7CisgICAgICAgIGFpb19zZXRfZmRfaGFuZGxlcihzZXJ2ZXItPmlvYy0+Y3R4LCBm ZCwgdHJ1ZSwga2lja19oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg TlVMTCwgdnVfZmRfd2F0Y2gpOworICAgICAgICB2dV9mZF93YXRjaC0+dnVfZGV2ID0gdnVfZGV2 OworICAgICAgICB2dV9mZF93YXRjaC0+cHZ0ID0gcHZ0OworICAgIH0KK30KKworCitzdGF0aWMg dm9pZCByZW1vdmVfd2F0Y2goVnVEZXYgKnZ1X2RldiwgaW50IGZkKQoreworICAgIFZ1U2VydmVy ICpzZXJ2ZXI7CisgICAgZ19hc3NlcnQodnVfZGV2KTsKKyAgICBnX2Fzc2VydChmZCA+PSAwKTsK KworICAgIHNlcnZlciA9IGNvbnRhaW5lcl9vZih2dV9kZXYsIFZ1U2VydmVyLCB2dV9kZXYpOwor CisgICAgVnVGZFdhdGNoICp2dV9mZF93YXRjaCA9IGZpbmRfdnVfZmRfd2F0Y2goc2VydmVyLCBm ZCk7CisKKyAgICBpZiAoIXZ1X2ZkX3dhdGNoKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg ICAgYWlvX3NldF9mZF9oYW5kbGVyKHNlcnZlci0+aW9jLT5jdHgsIGZkLCB0cnVlLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsKKworICAgIFFUQUlMUV9SRU1PVkUoJnNlcnZlci0+dnVfZmRfd2F0 Y2hlcywgdnVfZmRfd2F0Y2gsIG5leHQpOworICAgIGdfZnJlZSh2dV9mZF93YXRjaCk7Cit9CisK Kworc3RhdGljIHZvaWQgdnVfYWNjZXB0KFFJT05ldExpc3RlbmVyICpsaXN0ZW5lciwgUUlPQ2hh bm5lbFNvY2tldCAqc2lvYywKKyAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBvcGFxdWUp Cit7CisgICAgVnVTZXJ2ZXIgKnNlcnZlciA9IG9wYXF1ZTsKKworICAgIGlmIChzZXJ2ZXItPnNp b2MpIHsKKyAgICAgICAgd2Fybl9yZXBvcnQoIk9ubHkgb25lIHZob3N0LXVzZXIgY2xpZW50IGlz IGFsbG93ZWQgdG8gIgorICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCB0aGUgc2VydmVyIG9u ZSB0aW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZ1X2luaXQoJnNl cnZlci0+dnVfZGV2LCBzZXJ2ZXItPm1heF9xdWV1ZXMsIHNpb2MtPmZkLCBwYW5pY19jYiwKKyAg ICAgICAgICAgICAgICAgdnVfbWVzc2FnZV9yZWFkLCBzZXRfd2F0Y2gsIHJlbW92ZV93YXRjaCwg c2VydmVyLT52dV9pZmFjZSkpIHsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJGYWlsZWQgdG8gaW5p dGlhbGl6ZSBsaWJ2aG9zdC11c2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv KgorICAgICAqIFVuc2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbmV0d29yayBsaXN0ZW5l ciB0byBtYWtlIGFub3RoZXIKKyAgICAgKiB2aG9zdC11c2VyIGNsaWVudCBrZWVwaW5nIHdhaXRp bmcgdW50aWwgdGhpcyBjbGllbnQgZGlzY29ubmVjdHMKKyAgICAgKi8KKyAgICBxaW9fbmV0X2xp c3RlbmVyX3NldF9jbGllbnRfZnVuYyhzZXJ2ZXItPmxpc3RlbmVyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM KTsKKyAgICBzZXJ2ZXItPnNpb2MgPSBzaW9jOworICAgIC8qCisgICAgICogSW5jcmVhc2UgdGhl IG9iamVjdCByZWZlcmVuY2UsIHNvIHNpb2Mgd2lsbCBub3QgZnJlZWQgYnkKKyAgICAgKiBxaW9f bmV0X2xpc3RlbmVyX2NoYW5uZWxfZnVuYyB3aGljaCB3aWxsIGNhbGwgb2JqZWN0X3VucmVmKE9C SkVDVChzaW9jKSkKKyAgICAgKi8KKyAgICBvYmplY3RfcmVmKE9CSkVDVChzZXJ2ZXItPnNpb2Mp KTsKKyAgICBxaW9fY2hhbm5lbF9zZXRfbmFtZShRSU9fQ0hBTk5FTChzaW9jKSwgInZob3N0LXVz ZXIgY2xpZW50Iik7CisgICAgc2VydmVyLT5pb2MgPSBRSU9fQ0hBTk5FTChzaW9jKTsKKyAgICBv YmplY3RfcmVmKE9CSkVDVChzZXJ2ZXItPmlvYykpOworICAgIHFpb19jaGFubmVsX2F0dGFjaF9h aW9fY29udGV4dChzZXJ2ZXItPmlvYywgc2VydmVyLT5jdHgpOworICAgIHFpb19jaGFubmVsX3Nl dF9ibG9ja2luZyhRSU9fQ0hBTk5FTChzZXJ2ZXItPnNpb2MpLCBmYWxzZSwgTlVMTCk7CisgICAg dnVfY2xpZW50X3N0YXJ0KHNlcnZlcik7Cit9CisKKwordm9pZCB2aG9zdF91c2VyX3NlcnZlcl9z dG9wKFZ1U2VydmVyICpzZXJ2ZXIpCit7CisgICAgaWYgKHNlcnZlci0+c2lvYykgeworICAgICAg ICBjbG9zZV9jbGllbnQoc2VydmVyKTsKKyAgICB9CisKKyAgICBpZiAoc2VydmVyLT5saXN0ZW5l cikgeworICAgICAgICBxaW9fbmV0X2xpc3RlbmVyX2Rpc2Nvbm5lY3Qoc2VydmVyLT5saXN0ZW5l cik7CisgICAgICAgIG9iamVjdF91bnJlZihPQkpFQ1Qoc2VydmVyLT5saXN0ZW5lcikpOworICAg IH0KKworfQorCit2b2lkIHZob3N0X3VzZXJfc2VydmVyX3NldF9haW9fY29udGV4dChWdVNlcnZl ciAqc2VydmVyLCBBaW9Db250ZXh0ICpjdHgpCit7CisgICAgVnVGZFdhdGNoICp2dV9mZF93YXRj aCwgKm5leHQ7CisgICAgdm9pZCAqb3BhcXVlID0gTlVMTDsKKyAgICBJT0hhbmRsZXIgKmlvX3Jl YWQgPSBOVUxMOworICAgIGJvb2wgYXR0YWNoOworCisgICAgc2VydmVyLT5jdHggPSBjdHggPyBj dHggOiBxZW11X2dldF9haW9fY29udGV4dCgpOworCisgICAgaWYgKCFzZXJ2ZXItPnNpb2MpIHsK KyAgICAgICAgLyogbm90IHlldCBzZXJ2aW5nIGFueSBjbGllbnQqLworICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgaWYgKGN0eCkgeworICAgICAgICBxaW9fY2hhbm5lbF9hdHRhY2hfYWlv X2NvbnRleHQoc2VydmVyLT5pb2MsIGN0eCk7CisgICAgICAgIHNlcnZlci0+YWlvX2NvbnRleHRf Y2hhbmdlZCA9IHRydWU7CisgICAgICAgIGlvX3JlYWQgPSBraWNrX2hhbmRsZXI7CisgICAgICAg IGF0dGFjaCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcWlvX2NoYW5uZWxfZGV0YWNo X2Fpb19jb250ZXh0KHNlcnZlci0+aW9jKTsKKyAgICAgICAgLyogc2VydmVyLT5pb2MtPmN0eCBr ZWVwcyB0aGUgb2xkIEFpb0NvbmV4dCAqLworICAgICAgICBjdHggPSBzZXJ2ZXItPmlvYy0+Y3R4 OworICAgICAgICBhdHRhY2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICBRVEFJTFFfRk9SRUFDSF9T QUZFKHZ1X2ZkX3dhdGNoLCAmc2VydmVyLT52dV9mZF93YXRjaGVzLCBuZXh0LCBuZXh0KSB7Cisg ICAgICAgIGlmICh2dV9mZF93YXRjaC0+Y2IpIHsKKyAgICAgICAgICAgIG9wYXF1ZSA9IGF0dGFj aCA/IHZ1X2ZkX3dhdGNoIDogTlVMTDsKKyAgICAgICAgICAgIGFpb19zZXRfZmRfaGFuZGxlcihj dHgsIHZ1X2ZkX3dhdGNoLT5mZCwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb19yZWFkLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w YXF1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworYm9vbCB2aG9zdF91c2VyX3NlcnZlcl9z dGFydChWdVNlcnZlciAqc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Nr ZXRBZGRyZXNzICpzb2NrZXRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlv Q29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBtYXhf cXVldWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VQYW5pY05vdGlmaWVy Rm4gKmRldmljZV9wYW5pY19ub3RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVnVEZXZJZmFjZSAqdnVfaWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVycm9yICoqZXJycCkKK3sKKyAgICBRSU9OZXRMaXN0ZW5lciAqbGlzdGVuZXIgPSBxaW9fbmV0 X2xpc3RlbmVyX25ldygpOworICAgIGlmIChxaW9fbmV0X2xpc3RlbmVyX29wZW5fc3luYyhsaXN0 ZW5lciwgc29ja2V0X2FkZHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVycnApIDwgMCkgeworICAgICAgICBvYmplY3RfdW5yZWYoT0JKRUNUKGxpc3RlbmVyKSk7Cisg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiB6ZXJvIG91dCB1bnNwZWNpZmll ZCBmaWxlZHMgKi8KKyAgICAqc2VydmVyID0gKFZ1U2VydmVyKSB7CisgICAgICAgIC5saXN0ZW5l ciAgICAgICAgICAgICAgPSBsaXN0ZW5lciwKKyAgICAgICAgLnZ1X2lmYWNlICAgICAgICAgICAg ICA9IHZ1X2lmYWNlLAorICAgICAgICAubWF4X3F1ZXVlcyAgICAgICAgICAgID0gbWF4X3F1ZXVl cywKKyAgICAgICAgLmN0eCAgICAgICAgICAgICAgICAgICA9IGN0eCwKKyAgICAgICAgLmRldmlj ZV9wYW5pY19ub3RpZmllciA9IGRldmljZV9wYW5pY19ub3RpZmllciwKKyAgICB9OworCisgICAg cWlvX25ldF9saXN0ZW5lcl9zZXRfbmFtZShzZXJ2ZXItPmxpc3RlbmVyLCAidmhvc3QtdXNlci1i YWNrZW5kLWxpc3RlbmVyIik7CisKKyAgICBxaW9fbmV0X2xpc3RlbmVyX3NldF9jbGllbnRfZnVu YyhzZXJ2ZXItPmxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZ1X2FjY2VwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBRVEFJ TFFfSU5JVCgmc2VydmVyLT52dV9mZF93YXRjaGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlm ZiAtLWdpdCBhL3V0aWwvbWVzb24uYnVpbGQgYi91dGlsL21lc29uLmJ1aWxkCmluZGV4IGU2YjIw N2E5OWUuLjM5MjE5ODFjY2YgMTAwNjQ0Ci0tLSBhL3V0aWwvbWVzb24uYnVpbGQKKysrIGIvdXRp bC9tZXNvbi5idWlsZApAQCAtNjYsNiArNjYsNyBAQCBpZiBoYXZlX2Jsb2NrCiAgIHV0aWxfc3Mu YWRkKGZpbGVzKCdtYWluLWxvb3AuYycpKQogICB1dGlsX3NzLmFkZChmaWxlcygnbnZkaW1tLXV0 aWxzLmMnKSkKICAgdXRpbF9zcy5hZGQoZmlsZXMoJ3FlbXUtY29yb3V0aW5lLmMnLCAncWVtdS1j b3JvdXRpbmUtbG9jay5jJywgJ3FlbXUtY29yb3V0aW5lLWlvLmMnKSkKKyAgdXRpbF9zcy5hZGQo d2hlbjogJ0NPTkZJR19MSU5VWCcsIGlmX3RydWU6IGZpbGVzKCd2aG9zdC11c2VyLXNlcnZlci5j JykpCiAgIHV0aWxfc3MuYWRkKGZpbGVzKCdxZW11LWNvcm91dGluZS1zbGVlcC5jJykpCiAgIHV0 aWxfc3MuYWRkKGZpbGVzKCdxZW11LWNvLXNoYXJlZC1yZXNvdXJjZS5jJykpCiAgIHV0aWxfc3Mu YWRkKGZpbGVzKCd0aHJlYWQtcG9vbC5jJywgJ3FlbXUtdGltZXIuYycpKQotLSAKMi4yNi4yCgo=