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 206D2C433E7 for ; Mon, 12 Oct 2020 18:34:49 +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 73DD520797 for ; Mon, 12 Oct 2020 18:34:48 +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="MrNWstCi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 73DD520797 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]:55500 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kS2el-0001EV-Ip for qemu-devel@archiver.kernel.org; Mon, 12 Oct 2020 14:34:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kS2Ys-0003Uy-Od for qemu-devel@nongnu.org; Mon, 12 Oct 2020 14:28:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:30636) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kS2Yl-000483-PR for qemu-devel@nongnu.org; Mon, 12 Oct 2020 14:28:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602527305; 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=SDfUleljk6ozj0Op8HCqLyK/3fCAilp2Ih6ib6gj5u4=; b=MrNWstCiKo193SYhlxuPKwPrvxjbgSNwuQBrd6WdTV8whsJFgntsE3Czf2jtksQlQphafn Xx4rGjEp7cFM19pDJ6N2DZ/XSxst/oGftMEB9riKUen+0scXyIsknVLm65a39YW1V5ZN8P p75ptpzE9lVMQJVYaOc6qhQVdUSN19Q= 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-312-_NJSxBT6P4yjbFXujX02Yg-1; Mon, 12 Oct 2020 14:28:23 -0400 X-MC-Unique: _NJSxBT6P4yjbFXujX02Yg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 186B71062720; Mon, 12 Oct 2020 18:28:22 +0000 (UTC) Received: from localhost (ovpn-115-4.ams2.redhat.com [10.36.115.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 80A3155760; Mon, 12 Oct 2020 18:28:21 +0000 (UTC) From: Stefan Hajnoczi To: Peter Maydell , qemu-devel@nongnu.org Subject: [PULL v2 04/30] util/vhost-user-server: generic vhost user server Date: Mon, 12 Oct 2020 19:27:34 +0100 Message-Id: <20201012182800.157697-5-stefanha@redhat.com> In-Reply-To: <20201012182800.157697-1-stefanha@redhat.com> References: <20201012182800.157697-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 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=63.128.21.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/12 02:58:41 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable 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 , Laurent Vivier , Thomas Huth , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , qemu-block@nongnu.org, Markus Armbruster , Coiby Xu , Max Reitz , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Stefan Hajnoczi , Cleber Rosa , Paolo Bonzini , Fam Zheng , "Dr. David Alan Gilbert" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" RnJvbTogQ29pYnkgWHUgPGNvaWJ5Lnh1QGdtYWlsLmNvbT4KClNoYXJpbmcgUUVNVSBkZXZpY2Vz IHZpYSB2aG9zdC11c2VyIHByb3RvY29sLgoKT25seSBvbmUgdmhvc3QtdXNlciBjbGllbnQgY2Fu IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBvbmUgdGltZS4KClN1Z2dlc3RlZC1ieTogS2V2aW4gV29s ZiA8a3dvbGZAcmVkaGF0LmNvbT4KU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVm YW5oYUByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBDb2lieSBYdSA8Y29pYnkueHVAZ21haWwu Y29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUByZWRoYXQuY29tPgpS ZXZpZXdlZC1ieTogTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QHJlZGhhdC5j b20+Ck1lc3NhZ2UtaWQ6IDIwMjAwOTE4MDgwOTEyLjMyMTI5OS00LWNvaWJ5Lnh1QGdtYWlsLmNv bQpTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQHJlZGhhdC5jb20+Ci0t LQogdXRpbC92aG9zdC11c2VyLXNlcnZlci5oIHwgIDY1ICsrKysrKwogdXRpbC92aG9zdC11c2Vy LXNlcnZlci5jIHwgNDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog dXRpbC9tZXNvbi5idWlsZCAgICAgICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNDk0IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB1dGlsL3Zob3N0LXVzZXItc2VydmVyLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCB1dGlsL3Zob3N0LXVzZXItc2VydmVyLmMKCmRpZmYgLS1naXQg YS91dGlsL3Zob3N0LXVzZXItc2VydmVyLmggYi91dGlsL3Zob3N0LXVzZXItc2VydmVyLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTIzMmY5NjcxOAotLS0gL2Rldi9u dWxsCisrKyBiL3V0aWwvdmhvc3QtdXNlci1zZXJ2ZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgor ICogU2hhcmluZyBRRU1VIGRldmljZXMgdmlhIHZob3N0LXVzZXIgcHJvdG9jb2wKKyAqCisgKiBD b3B5cmlnaHQgKGMpIENvaWJ5IFh1IDxjb2lieS54dUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0 IChjKSAyMDIwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIgb3IKKyAqIGxhdGVyLiAgU2Vl IHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2lm bmRlZiBWSE9TVF9VU0VSX1NFUlZFUl9ICisjZGVmaW5lIFZIT1NUX1VTRVJfU0VSVkVSX0gKKwor I2luY2x1ZGUgImNvbnRyaWIvbGlidmhvc3QtdXNlci9saWJ2aG9zdC11c2VyLmgiCisjaW5jbHVk ZSAiaW8vY2hhbm5lbC1zb2NrZXQuaCIKKyNpbmNsdWRlICJpby9jaGFubmVsLWZpbGUuaCIKKyNp bmNsdWRlICJpby9uZXQtbGlzdGVuZXIuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5o IgorI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xp bnV4L3ZpcnRpb19ibGsuaCIKKwordHlwZWRlZiBzdHJ1Y3QgVnVGZFdhdGNoIHsKKyAgICBWdURl diAqdnVfZGV2OworICAgIGludCBmZDsgLypraWNrIGZkKi8KKyAgICB2b2lkICpwdnQ7CisgICAg dnVfd2F0Y2hfY2IgY2I7CisgICAgYm9vbCBwcm9jZXNzaW5nOworICAgIFFUQUlMUV9FTlRSWShW dUZkV2F0Y2gpIG5leHQ7Cit9IFZ1RmRXYXRjaDsKKwordHlwZWRlZiBzdHJ1Y3QgVnVTZXJ2ZXIg VnVTZXJ2ZXI7Cit0eXBlZGVmIHZvaWQgRGV2aWNlUGFuaWNOb3RpZmllckZuKFZ1U2VydmVyICpz ZXJ2ZXIpOworCitzdHJ1Y3QgVnVTZXJ2ZXIgeworICAgIFFJT05ldExpc3RlbmVyICpsaXN0ZW5l cjsKKyAgICBBaW9Db250ZXh0ICpjdHg7CisgICAgRGV2aWNlUGFuaWNOb3RpZmllckZuICpkZXZp Y2VfcGFuaWNfbm90aWZpZXI7CisgICAgaW50IG1heF9xdWV1ZXM7CisgICAgY29uc3QgVnVEZXZJ ZmFjZSAqdnVfaWZhY2U7CisgICAgVnVEZXYgdnVfZGV2OworICAgIFFJT0NoYW5uZWwgKmlvYzsg LyogVGhlIEkvTyBjaGFubmVsIHdpdGggdGhlIGNsaWVudCAqLworICAgIFFJT0NoYW5uZWxTb2Nr ZXQgKnNpb2M7IC8qIFRoZSB1bmRlcmx5aW5nIGRhdGEgY2hhbm5lbCB3aXRoIHRoZSBjbGllbnQg Ki8KKyAgICAvKiBJT0NoYW5uZWwgZm9yIGZkIHByb3ZpZGVkIHZpYSBWSE9TVF9VU0VSX1NFVF9T TEFWRV9SRVFfRkQgKi8KKyAgICBRSU9DaGFubmVsICppb2Nfc2xhdmU7CisgICAgUUlPQ2hhbm5l bFNvY2tldCAqc2lvY19zbGF2ZTsKKyAgICBDb3JvdXRpbmUgKmNvX3RyaXA7IC8qIGNvcm91dGlu ZSBmb3IgcHJvY2Vzc2luZyBWaG9zdFVzZXJNc2cgKi8KKyAgICBRVEFJTFFfSEVBRCgsIFZ1RmRX YXRjaCkgdnVfZmRfd2F0Y2hlczsKKyAgICAvKiByZXN0YXJ0IGNvcm91dGluZSBjb190cmlwIGlm IEFJT0NvbnRleHQgaXMgY2hhbmdlZCAqLworICAgIGJvb2wgYWlvX2NvbnRleHRfY2hhbmdlZDsK KyAgICBib29sIHByb2Nlc3NpbmdfbXNnOworfTsKKworYm9vbCB2aG9zdF91c2VyX3NlcnZlcl9z dGFydChWdVNlcnZlciAqc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Nr ZXRBZGRyZXNzICp1bml4X3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlv Q29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBtYXhf cXVldWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VQYW5pY05vdGlmaWVy Rm4gKmRldmljZV9wYW5pY19ub3RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVnVEZXZJZmFjZSAqdnVfaWZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVycm9yICoqZXJycCk7CisKK3ZvaWQgdmhvc3RfdXNlcl9zZXJ2ZXJfc3RvcChWdVNlcnZlciAq c2VydmVyKTsKKwordm9pZCB2aG9zdF91c2VyX3NlcnZlcl9zZXRfYWlvX2NvbnRleHQoVnVTZXJ2 ZXIgKnNlcnZlciwgQWlvQ29udGV4dCAqY3R4KTsKKworI2VuZGlmIC8qIFZIT1NUX1VTRVJfU0VS VkVSX0ggKi8KZGlmZiAtLWdpdCBhL3V0aWwvdmhvc3QtdXNlci1zZXJ2ZXIuYyBiL3V0aWwvdmhv c3QtdXNlci1zZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43 YjUwYTJiMWZkCi0tLSAvZGV2L251bGwKKysrIGIvdXRpbC92aG9zdC11c2VyLXNlcnZlci5jCkBA IC0wLDAgKzEsNDI4IEBACisvKgorICogU2hhcmluZyBRRU1VIGRldmljZXMgdmlhIHZob3N0LXVz ZXIgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKGMpIENvaWJ5IFh1IDxjb2lieS54dUBnbWFp bC5jb20+LgorICogQ29weXJpZ2h0IChjKSAyMDIwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBUaGlz IHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9u IDIgb3IKKyAqIGxhdGVyLiAgU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBk aXJlY3RvcnkuCisgKi8KKyNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9t YWluLWxvb3AuaCIKKyNpbmNsdWRlICJ2aG9zdC11c2VyLXNlcnZlci5oIgorCitzdGF0aWMgdm9p ZCB2bXNnX2Nsb3NlX2ZkcyhWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgaW50IGk7CisgICAg Zm9yIChpID0gMDsgaSA8IHZtc2ctPmZkX251bTsgaSsrKSB7CisgICAgICAgIGNsb3NlKHZtc2ct PmZkc1tpXSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2bXNnX3VuYmxvY2tfZmRzKFZob3N0 VXNlck1zZyAqdm1zZykKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdm1zZy0+ ZmRfbnVtOyBpKyspIHsKKyAgICAgICAgcWVtdV9zZXRfbm9uYmxvY2sodm1zZy0+ZmRzW2ldKTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ1X2FjY2VwdChRSU9OZXRMaXN0ZW5lciAqbGlzdGVu ZXIsIFFJT0NoYW5uZWxTb2NrZXQgKnNpb2MsCisgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50 ZXIgb3BhcXVlKTsKKworc3RhdGljIHZvaWQgY2xvc2VfY2xpZW50KFZ1U2VydmVyICpzZXJ2ZXIp Cit7CisgICAgLyoKKyAgICAgKiBCZWZvcmUgY2xvc2luZyB0aGUgY2xpZW50CisgICAgICoKKyAg ICAgKiAxLiBMZXQgdnVfY2xpZW50X3RyaXAgc3RvcCBwcm9jZXNzaW5nIG5ldyB2aG9zdC11c2Vy IG1zZworICAgICAqCisgICAgICogMi4gcmVtb3ZlIGtpY2tfaGFuZGxlcgorICAgICAqCisgICAg ICogMy4gd2FpdCBmb3IgdGhlIGtpY2sgaGFuZGxlciB0byBiZSBmaW5pc2hlZAorICAgICAqCisg ICAgICogNC4gd2FpdCBmb3IgdGhlIGN1cnJlbnQgdmhvc3QtdXNlciBtc2cgdG8gYmUgZmluaXNo ZWQgcHJvY2Vzc2luZworICAgICAqLworCisgICAgUUlPQ2hhbm5lbFNvY2tldCAqc2lvYyA9IHNl cnZlci0+c2lvYzsKKyAgICAvKiBXaGVuIHRoaXMgaXMgc2V0IHZ1X2NsaWVudF90cmlwIHdpbGwg c3RvcCBuZXcgcHJvY2Vzc2luZyB2aG9zdC11c2VyIG1lc3NhZ2UgKi8KKyAgICBzZXJ2ZXItPnNp b2MgPSBOVUxMOworCisgICAgVnVGZFdhdGNoICp2dV9mZF93YXRjaCwgKm5leHQ7CisgICAgUVRB SUxRX0ZPUkVBQ0hfU0FGRSh2dV9mZF93YXRjaCwgJnNlcnZlci0+dnVfZmRfd2F0Y2hlcywgbmV4 dCwgbmV4dCkgeworICAgICAgICBhaW9fc2V0X2ZkX2hhbmRsZXIoc2VydmVyLT5pb2MtPmN0eCwg dnVfZmRfd2F0Y2gtPmZkLCB0cnVlLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgICAgd2hpbGUgKCFRVEFJTFFfRU1QVFkoJnNl cnZlci0+dnVfZmRfd2F0Y2hlcykpIHsKKyAgICAgICAgUVRBSUxRX0ZPUkVBQ0hfU0FGRSh2dV9m ZF93YXRjaCwgJnNlcnZlci0+dnVfZmRfd2F0Y2hlcywgbmV4dCwgbmV4dCkgeworICAgICAgICAg ICAgaWYgKCF2dV9mZF93YXRjaC0+cHJvY2Vzc2luZykgeworICAgICAgICAgICAgICAgIFFUQUlM UV9SRU1PVkUoJnNlcnZlci0+dnVfZmRfd2F0Y2hlcywgdnVfZmRfd2F0Y2gsIG5leHQpOworICAg ICAgICAgICAgICAgIGdfZnJlZSh2dV9mZF93YXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICB3aGlsZSAoc2VydmVyLT5wcm9jZXNzaW5nX21zZykgeworICAgICAg ICBpZiAoc2VydmVyLT5pb2MtPnJlYWRfY29yb3V0aW5lKSB7CisgICAgICAgICAgICBzZXJ2ZXIt PmlvYy0+cmVhZF9jb3JvdXRpbmUgPSBOVUxMOworICAgICAgICAgICAgcWlvX2NoYW5uZWxfc2V0 X2Fpb19mZF9oYW5kbGVyKHNlcnZlci0+aW9jLCBzZXJ2ZXItPmlvYy0+Y3R4LCBOVUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHNlcnZlci0+aW9j KTsKKyAgICAgICAgICAgIHNlcnZlci0+cHJvY2Vzc2luZ19tc2cgPSBmYWxzZTsKKyAgICAgICAg fQorICAgIH0KKworICAgIHZ1X2RlaW5pdCgmc2VydmVyLT52dV9kZXYpOworICAgIG9iamVjdF91 bnJlZihPQkpFQ1Qoc2lvYykpOworICAgIG9iamVjdF91bnJlZihPQkpFQ1Qoc2VydmVyLT5pb2Mp KTsKK30KKworc3RhdGljIHZvaWQgcGFuaWNfY2IoVnVEZXYgKnZ1X2RldiwgY29uc3QgY2hhciAq YnVmKQoreworICAgIFZ1U2VydmVyICpzZXJ2ZXIgPSBjb250YWluZXJfb2YodnVfZGV2LCBWdVNl cnZlciwgdnVfZGV2KTsKKworICAgIC8qIGF2b2lkIHdoaWxlIGxvb3AgaW4gY2xvc2VfY2xpZW50 ICovCisgICAgc2VydmVyLT5wcm9jZXNzaW5nX21zZyA9IGZhbHNlOworCisgICAgaWYgKGJ1Zikg eworICAgICAgICBlcnJvcl9yZXBvcnQoInZ1X3BhbmljOiAlcyIsIGJ1Zik7CisgICAgfQorCisg ICAgaWYgKHNlcnZlci0+c2lvYykgeworICAgICAgICBjbG9zZV9jbGllbnQoc2VydmVyKTsKKyAg ICB9CisKKyAgICBpZiAoc2VydmVyLT5kZXZpY2VfcGFuaWNfbm90aWZpZXIpIHsKKyAgICAgICAg c2VydmVyLT5kZXZpY2VfcGFuaWNfbm90aWZpZXIoc2VydmVyKTsKKyAgICB9CisKKyAgICAvKgor ICAgICAqIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5ldHdvcmsgbGlzdGVuZXIgc28g YW5vdGhlcgorICAgICAqIHZob3N0LXVzZXIgY2xpZW50IGNhbiBjb25uZWN0IHRvIHRoaXMgc2Vy dmVyCisgICAgICovCisgICAgcWlvX25ldF9saXN0ZW5lcl9zZXRfY2xpZW50X2Z1bmMoc2VydmVy LT5saXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dV9hY2Nl cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfQorCitzdGF0aWMgYm9vbCBj b3JvdXRpbmVfZm4KK3Z1X21lc3NhZ2VfcmVhZChWdURldiAqdnVfZGV2LCBpbnQgY29ubl9mZCwg Vmhvc3RVc2VyTXNnICp2bXNnKQoreworICAgIHN0cnVjdCBpb3ZlYyBpb3YgPSB7CisgICAgICAg IC5pb3ZfYmFzZSA9IChjaGFyICopdm1zZywKKyAgICAgICAgLmlvdl9sZW4gPSBWSE9TVF9VU0VS X0hEUl9TSVpFLAorICAgIH07CisgICAgaW50IHJjLCByZWFkX2J5dGVzID0gMDsKKyAgICBFcnJv ciAqbG9jYWxfZXJyID0gTlVMTDsKKyAgICAvKgorICAgICAqIFN0b3JlIGZkcy9uZmRzIHJldHVy bmVkIGZyb20gcWlvX2NoYW5uZWxfcmVhZHZfZnVsbCBpbnRvCisgICAgICogdGVtcG9yYXJ5IHZh cmlhYmxlcy4KKyAgICAgKgorICAgICAqIFZob3N0VXNlck1zZyBpcyBhIHBhY2tlZCBzdHJ1Y3R1 cmUsIGdjYyB3aWxsIGNvbXBsYWluIGFib3V0IHBhc3NpbmcKKyAgICAgKiBwb2ludGVyIHRvIGEg cGFja2VkIHN0cnVjdHVyZSBtZW1iZXIgaWYgd2UgcGFzcyAmVmhvc3RVc2VyTXNnLmZkX251bQor ICAgICAqIGFuZCAmVmhvc3RVc2VyTXNnLmZkcyBkaXJlY3RseSB3aGVuIGNhbGxpbmcgcWlvX2No YW5uZWxfcmVhZHZfZnVsbCwKKyAgICAgKiB0aHVzIHR3byB0ZW1wb3JhcnkgdmFyaWFibGVzIG5m ZHMgYW5kIGZkcyBhcmUgdXNlZCBoZXJlLgorICAgICAqLworICAgIHNpemVfdCBuZmRzID0gMCwg bmZkc190ID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4X2ZkcyA9IEdfTl9FTEVNRU5UUyh2bXNn LT5mZHMpOworICAgIGludCAqZmRzX3QgPSBOVUxMOworICAgIFZ1U2VydmVyICpzZXJ2ZXIgPSBj b250YWluZXJfb2YodnVfZGV2LCBWdVNlcnZlciwgdnVfZGV2KTsKKyAgICBRSU9DaGFubmVsICpp b2MgPSBzZXJ2ZXItPmlvYzsKKworICAgIGlmICghaW9jKSB7CisgICAgICAgIGVycm9yX3JlcG9y dF9lcnIobG9jYWxfZXJyKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGFzc2Vy dChxZW11X2luX2Nvcm91dGluZSgpKTsKKyAgICBkbyB7CisgICAgICAgIC8qCisgICAgICAgICAq IHFpb19jaGFubmVsX3JlYWR2X2Z1bGwgbWF5IGhhdmUgc2hvcnQgcmVhZHMsIGtlZXBpbmcgY2Fs bGluZyBpdAorICAgICAgICAgKiB1bnRpbCBnZXR0aW5nIFZIT1NUX1VTRVJfSERSX1NJWkUgb3Ig MCBieXRlcyBpbiB0b3RhbAorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBxaW9fY2hhbm5lbF9y ZWFkdl9mdWxsKGlvYywgJmlvdiwgMSwgJmZkc190LCAmbmZkc190LCAmbG9jYWxfZXJyKTsKKyAg ICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgaWYgKHJjID09IFFJT19DSEFOTkVMX0VS Ul9CTE9DSykgeworICAgICAgICAgICAgICAgIHFpb19jaGFubmVsX3lpZWxkKGlvYywgR19JT19J Tik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGVycm9yX3JlcG9ydF9lcnIobG9jYWxfZXJyKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVhZF9i eXRlcyArPSByYzsKKyAgICAgICAgaWYgKG5mZHNfdCA+IDApIHsKKyAgICAgICAgICAgIGlmIChu ZmRzICsgbmZkc190ID4gbWF4X2ZkcykgeworICAgICAgICAgICAgICAgIGVycm9yX3JlcG9ydCgi QSBtYXhpbXVtIG9mICV6dSBmZHMgYXJlIGFsbG93ZWQsICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImhvd2V2ZXIgZ290ICVsdSBmZHMgbm93IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWF4X2ZkcywgbmZkcyArIG5mZHNfdCk7CisgICAgICAgICAgICAgICAgZ290byBm YWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHZtc2ctPmZkcyArIG5mZHMs IGZkc190LAorICAgICAgICAgICAgICAgICAgIG5mZHNfdCAqc2l6ZW9mKHZtc2ctPmZkc1swXSkp OworICAgICAgICAgICAgbmZkcyArPSBuZmRzX3Q7CisgICAgICAgICAgICBnX2ZyZWUoZmRzX3Qp OworICAgICAgICB9CisgICAgICAgIGlmIChyZWFkX2J5dGVzID09IFZIT1NUX1VTRVJfSERSX1NJ WkUgfHwgcmMgPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg aW92Lmlvdl9iYXNlID0gKGNoYXIgKil2bXNnICsgcmVhZF9ieXRlczsKKyAgICAgICAgaW92Lmlv dl9sZW4gPSBWSE9TVF9VU0VSX0hEUl9TSVpFIC0gcmVhZF9ieXRlczsKKyAgICB9IHdoaWxlICh0 cnVlKTsKKworICAgIHZtc2ctPmZkX251bSA9IG5mZHM7CisgICAgLyogcWlvX2NoYW5uZWxfcmVh ZHZfZnVsbCB3aWxsIG1ha2Ugc29ja2V0IGZkcyBibG9ja2luZywgdW5ibG9jayB0aGVtICovCisg ICAgdm1zZ191bmJsb2NrX2Zkcyh2bXNnKTsKKyAgICBpZiAodm1zZy0+c2l6ZSA+IHNpemVvZih2 bXNnLT5wYXlsb2FkKSkgeworICAgICAgICBlcnJvcl9yZXBvcnQoIkVycm9yOiB0b28gYmlnIG1l c3NhZ2UgcmVxdWVzdDogJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICJzaXplOiB2bXNnLT5z aXplOiAldSwgIgorICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHNpemVvZih2bXNnLT5wYXls b2FkKSA9ICV6dSIsCisgICAgICAgICAgICAgICAgICAgICB2bXNnLT5yZXF1ZXN0LCB2bXNnLT5z aXplLCBzaXplb2Yodm1zZy0+cGF5bG9hZCkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgICAgc3RydWN0IGlvdmVjIGlvdl9wYXlsb2FkID0geworICAgICAgICAuaW92X2Jhc2UgPSAo Y2hhciAqKSZ2bXNnLT5wYXlsb2FkLAorICAgICAgICAuaW92X2xlbiA9IHZtc2ctPnNpemUsCisg ICAgfTsKKyAgICBpZiAodm1zZy0+c2l6ZSkgeworICAgICAgICByYyA9IHFpb19jaGFubmVsX3Jl YWR2X2FsbF9lb2YoaW9jLCAmaW92X3BheWxvYWQsIDEsICZsb2NhbF9lcnIpOworICAgICAgICBp ZiAocmMgPT0gLTEpIHsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydF9lcnIobG9jYWxfZXJyKTsK KyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0 cnVlOworCitmYWlsOgorICAgIHZtc2dfY2xvc2VfZmRzKHZtc2cpOworCisgICAgcmV0dXJuIGZh bHNlOworfQorCisKK3N0YXRpYyB2b2lkIHZ1X2NsaWVudF9zdGFydChWdVNlcnZlciAqc2VydmVy KTsKK3N0YXRpYyBjb3JvdXRpbmVfZm4gdm9pZCB2dV9jbGllbnRfdHJpcCh2b2lkICpvcGFxdWUp Cit7CisgICAgVnVTZXJ2ZXIgKnNlcnZlciA9IG9wYXF1ZTsKKworICAgIHdoaWxlICghc2VydmVy LT5haW9fY29udGV4dF9jaGFuZ2VkICYmIHNlcnZlci0+c2lvYykgeworICAgICAgICBzZXJ2ZXIt PnByb2Nlc3NpbmdfbXNnID0gdHJ1ZTsKKyAgICAgICAgdnVfZGlzcGF0Y2goJnNlcnZlci0+dnVf ZGV2KTsKKyAgICAgICAgc2VydmVyLT5wcm9jZXNzaW5nX21zZyA9IGZhbHNlOworICAgIH0KKwor ICAgIGlmIChzZXJ2ZXItPmFpb19jb250ZXh0X2NoYW5nZWQgJiYgc2VydmVyLT5zaW9jKSB7Cisg ICAgICAgIHNlcnZlci0+YWlvX2NvbnRleHRfY2hhbmdlZCA9IGZhbHNlOworICAgICAgICB2dV9j bGllbnRfc3RhcnQoc2VydmVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ1X2NsaWVudF9z dGFydChWdVNlcnZlciAqc2VydmVyKQoreworICAgIHNlcnZlci0+Y29fdHJpcCA9IHFlbXVfY29y b3V0aW5lX2NyZWF0ZSh2dV9jbGllbnRfdHJpcCwgc2VydmVyKTsKKyAgICBhaW9fY29fZW50ZXIo c2VydmVyLT5jdHgsIHNlcnZlci0+Y29fdHJpcCk7Cit9CisKKy8qCisgKiBhIHdyYXBwZXIgZm9y IHZ1X2tpY2tfY2IKKyAqCisgKiBzaW5jZSBhaW9fZGlzcGF0Y2ggY2FuIG9ubHkgcGFzcyBvbmUg dXNlciBkYXRhIHBvaW50ZXIgdG8gdGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiwgcGFjayBWdURl diBhbmQgcHZ0IGludG8gYSBzdHJ1Y3QuIFRoZW4gdW5wYWNrIGl0CisgKiBhbmQgcGFzcyB0aGVt IHRvIHZ1X2tpY2tfY2IKKyAqLworc3RhdGljIHZvaWQga2lja19oYW5kbGVyKHZvaWQgKm9wYXF1 ZSkKK3sKKyAgICBWdUZkV2F0Y2ggKnZ1X2ZkX3dhdGNoID0gb3BhcXVlOworICAgIHZ1X2ZkX3dh dGNoLT5wcm9jZXNzaW5nID0gdHJ1ZTsKKyAgICB2dV9mZF93YXRjaC0+Y2IodnVfZmRfd2F0Y2gt PnZ1X2RldiwgMCwgdnVfZmRfd2F0Y2gtPnB2dCk7CisgICAgdnVfZmRfd2F0Y2gtPnByb2Nlc3Np bmcgPSBmYWxzZTsKK30KKworCitzdGF0aWMgVnVGZFdhdGNoICpmaW5kX3Z1X2ZkX3dhdGNoKFZ1 U2VydmVyICpzZXJ2ZXIsIGludCBmZCkKK3sKKworICAgIFZ1RmRXYXRjaCAqdnVfZmRfd2F0Y2gs ICpuZXh0OworICAgIFFUQUlMUV9GT1JFQUNIX1NBRkUodnVfZmRfd2F0Y2gsICZzZXJ2ZXItPnZ1 X2ZkX3dhdGNoZXMsIG5leHQsIG5leHQpIHsKKyAgICAgICAgaWYgKHZ1X2ZkX3dhdGNoLT5mZCA9 PSBmZCkgeworICAgICAgICAgICAgcmV0dXJuIHZ1X2ZkX3dhdGNoOworICAgICAgICB9CisgICAg fQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc2V0X3dhdGNoKFZ1RGV2ICp2 dV9kZXYsIGludCBmZCwgaW50IHZ1X2V2dCwKKyAgICAgICAgICB2dV93YXRjaF9jYiBjYiwgdm9p ZCAqcHZ0KQoreworCisgICAgVnVTZXJ2ZXIgKnNlcnZlciA9IGNvbnRhaW5lcl9vZih2dV9kZXYs IFZ1U2VydmVyLCB2dV9kZXYpOworICAgIGdfYXNzZXJ0KHZ1X2Rldik7CisgICAgZ19hc3NlcnQo ZmQgPj0gMCk7CisgICAgZ19hc3NlcnQoY2IpOworCisgICAgVnVGZFdhdGNoICp2dV9mZF93YXRj aCA9IGZpbmRfdnVfZmRfd2F0Y2goc2VydmVyLCBmZCk7CisKKyAgICBpZiAoIXZ1X2ZkX3dhdGNo KSB7CisgICAgICAgIFZ1RmRXYXRjaCAqdnVfZmRfd2F0Y2ggPSBnX25ldzAoVnVGZFdhdGNoLCAx KTsKKworICAgICAgICBRVEFJTFFfSU5TRVJUX1RBSUwoJnNlcnZlci0+dnVfZmRfd2F0Y2hlcywg dnVfZmRfd2F0Y2gsIG5leHQpOworCisgICAgICAgIHZ1X2ZkX3dhdGNoLT5mZCA9IGZkOworICAg ICAgICB2dV9mZF93YXRjaC0+Y2IgPSBjYjsKKyAgICAgICAgcWVtdV9zZXRfbm9uYmxvY2soZmQp OworICAgICAgICBhaW9fc2V0X2ZkX2hhbmRsZXIoc2VydmVyLT5pb2MtPmN0eCwgZmQsIHRydWUs IGtpY2tfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIHZ1 X2ZkX3dhdGNoKTsKKyAgICAgICAgdnVfZmRfd2F0Y2gtPnZ1X2RldiA9IHZ1X2RldjsKKyAgICAg ICAgdnVfZmRfd2F0Y2gtPnB2dCA9IHB2dDsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgcmVt b3ZlX3dhdGNoKFZ1RGV2ICp2dV9kZXYsIGludCBmZCkKK3sKKyAgICBWdVNlcnZlciAqc2VydmVy OworICAgIGdfYXNzZXJ0KHZ1X2Rldik7CisgICAgZ19hc3NlcnQoZmQgPj0gMCk7CisKKyAgICBz ZXJ2ZXIgPSBjb250YWluZXJfb2YodnVfZGV2LCBWdVNlcnZlciwgdnVfZGV2KTsKKworICAgIFZ1 RmRXYXRjaCAqdnVfZmRfd2F0Y2ggPSBmaW5kX3Z1X2ZkX3dhdGNoKHNlcnZlciwgZmQpOworCisg ICAgaWYgKCF2dV9mZF93YXRjaCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFpb19z ZXRfZmRfaGFuZGxlcihzZXJ2ZXItPmlvYy0+Y3R4LCBmZCwgdHJ1ZSwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCk7CisKKyAgICBRVEFJTFFfUkVNT1ZFKCZzZXJ2ZXItPnZ1X2ZkX3dhdGNoZXMsIHZ1 X2ZkX3dhdGNoLCBuZXh0KTsKKyAgICBnX2ZyZWUodnVfZmRfd2F0Y2gpOworfQorCisKK3N0YXRp YyB2b2lkIHZ1X2FjY2VwdChRSU9OZXRMaXN0ZW5lciAqbGlzdGVuZXIsIFFJT0NoYW5uZWxTb2Nr ZXQgKnNpb2MsCisgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgb3BhcXVlKQoreworICAg IFZ1U2VydmVyICpzZXJ2ZXIgPSBvcGFxdWU7CisKKyAgICBpZiAoc2VydmVyLT5zaW9jKSB7Cisg ICAgICAgIHdhcm5fcmVwb3J0KCJPbmx5IG9uZSB2aG9zdC11c2VyIGNsaWVudCBpcyBhbGxvd2Vk IHRvICIKKyAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QgdGhlIHNlcnZlciBvbmUgdGltZSIp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2dV9pbml0KCZzZXJ2ZXItPnZ1 X2Rldiwgc2VydmVyLT5tYXhfcXVldWVzLCBzaW9jLT5mZCwgcGFuaWNfY2IsCisgICAgICAgICAg ICAgICAgIHZ1X21lc3NhZ2VfcmVhZCwgc2V0X3dhdGNoLCByZW1vdmVfd2F0Y2gsIHNlcnZlci0+ dnVfaWZhY2UpKSB7CisgICAgICAgIGVycm9yX3JlcG9ydCgiRmFpbGVkIHRvIGluaXRpYWxpemUg bGlidmhvc3QtdXNlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAg KiBVbnNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5ldHdvcmsgbGlzdGVuZXIgdG8gbWFr ZSBhbm90aGVyCisgICAgICogdmhvc3QtdXNlciBjbGllbnQga2VlcGluZyB3YWl0aW5nIHVudGls IHRoaXMgY2xpZW50IGRpc2Nvbm5lY3RzCisgICAgICovCisgICAgcWlvX25ldF9saXN0ZW5lcl9z ZXRfY2xpZW50X2Z1bmMoc2VydmVyLT5saXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAg c2VydmVyLT5zaW9jID0gc2lvYzsKKyAgICAvKgorICAgICAqIEluY3JlYXNlIHRoZSBvYmplY3Qg cmVmZXJlbmNlLCBzbyBzaW9jIHdpbGwgbm90IGZyZWVkIGJ5CisgICAgICogcWlvX25ldF9saXN0 ZW5lcl9jaGFubmVsX2Z1bmMgd2hpY2ggd2lsbCBjYWxsIG9iamVjdF91bnJlZihPQkpFQ1Qoc2lv YykpCisgICAgICovCisgICAgb2JqZWN0X3JlZihPQkpFQ1Qoc2VydmVyLT5zaW9jKSk7CisgICAg cWlvX2NoYW5uZWxfc2V0X25hbWUoUUlPX0NIQU5ORUwoc2lvYyksICJ2aG9zdC11c2VyIGNsaWVu dCIpOworICAgIHNlcnZlci0+aW9jID0gUUlPX0NIQU5ORUwoc2lvYyk7CisgICAgb2JqZWN0X3Jl ZihPQkpFQ1Qoc2VydmVyLT5pb2MpKTsKKyAgICBxaW9fY2hhbm5lbF9hdHRhY2hfYWlvX2NvbnRl eHQoc2VydmVyLT5pb2MsIHNlcnZlci0+Y3R4KTsKKyAgICBxaW9fY2hhbm5lbF9zZXRfYmxvY2tp bmcoUUlPX0NIQU5ORUwoc2VydmVyLT5zaW9jKSwgZmFsc2UsIE5VTEwpOworICAgIHZ1X2NsaWVu dF9zdGFydChzZXJ2ZXIpOworfQorCisKK3ZvaWQgdmhvc3RfdXNlcl9zZXJ2ZXJfc3RvcChWdVNl cnZlciAqc2VydmVyKQoreworICAgIGlmIChzZXJ2ZXItPnNpb2MpIHsKKyAgICAgICAgY2xvc2Vf Y2xpZW50KHNlcnZlcik7CisgICAgfQorCisgICAgaWYgKHNlcnZlci0+bGlzdGVuZXIpIHsKKyAg ICAgICAgcWlvX25ldF9saXN0ZW5lcl9kaXNjb25uZWN0KHNlcnZlci0+bGlzdGVuZXIpOworICAg ICAgICBvYmplY3RfdW5yZWYoT0JKRUNUKHNlcnZlci0+bGlzdGVuZXIpKTsKKyAgICB9CisKK30K Kwordm9pZCB2aG9zdF91c2VyX3NlcnZlcl9zZXRfYWlvX2NvbnRleHQoVnVTZXJ2ZXIgKnNlcnZl ciwgQWlvQ29udGV4dCAqY3R4KQoreworICAgIFZ1RmRXYXRjaCAqdnVfZmRfd2F0Y2gsICpuZXh0 OworICAgIHZvaWQgKm9wYXF1ZSA9IE5VTEw7CisgICAgSU9IYW5kbGVyICppb19yZWFkID0gTlVM TDsKKyAgICBib29sIGF0dGFjaDsKKworICAgIHNlcnZlci0+Y3R4ID0gY3R4ID8gY3R4IDogcWVt dV9nZXRfYWlvX2NvbnRleHQoKTsKKworICAgIGlmICghc2VydmVyLT5zaW9jKSB7CisgICAgICAg IC8qIG5vdCB5ZXQgc2VydmluZyBhbnkgY2xpZW50Ki8KKyAgICAgICAgcmV0dXJuOworICAgIH0K KworICAgIGlmIChjdHgpIHsKKyAgICAgICAgcWlvX2NoYW5uZWxfYXR0YWNoX2Fpb19jb250ZXh0 KHNlcnZlci0+aW9jLCBjdHgpOworICAgICAgICBzZXJ2ZXItPmFpb19jb250ZXh0X2NoYW5nZWQg PSB0cnVlOworICAgICAgICBpb19yZWFkID0ga2lja19oYW5kbGVyOworICAgICAgICBhdHRhY2gg PSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHFpb19jaGFubmVsX2RldGFjaF9haW9fY29u dGV4dChzZXJ2ZXItPmlvYyk7CisgICAgICAgIC8qIHNlcnZlci0+aW9jLT5jdHgga2VlcHMgdGhl IG9sZCBBaW9Db25leHQgKi8KKyAgICAgICAgY3R4ID0gc2VydmVyLT5pb2MtPmN0eDsKKyAgICAg ICAgYXR0YWNoID0gZmFsc2U7CisgICAgfQorCisgICAgUVRBSUxRX0ZPUkVBQ0hfU0FGRSh2dV9m ZF93YXRjaCwgJnNlcnZlci0+dnVfZmRfd2F0Y2hlcywgbmV4dCwgbmV4dCkgeworICAgICAgICBp ZiAodnVfZmRfd2F0Y2gtPmNiKSB7CisgICAgICAgICAgICBvcGFxdWUgPSBhdHRhY2ggPyB2dV9m ZF93YXRjaCA6IE5VTEw7CisgICAgICAgICAgICBhaW9fc2V0X2ZkX2hhbmRsZXIoY3R4LCB2dV9m ZF93YXRjaC0+ZmQsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fcmVh ZCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWUpOwor ICAgICAgICB9CisgICAgfQorfQorCisKK2Jvb2wgdmhvc3RfdXNlcl9zZXJ2ZXJfc3RhcnQoVnVT ZXJ2ZXIgKnNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0QWRkcmVz cyAqc29ja2V0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpb0NvbnRleHQg KmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbWF4X3F1ZXVlcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlUGFuaWNOb3RpZmllckZuICpkZXZp Y2VfcGFuaWNfbm90aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZ1 RGV2SWZhY2UgKnZ1X2lmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciAq KmVycnApCit7CisgICAgUUlPTmV0TGlzdGVuZXIgKmxpc3RlbmVyID0gcWlvX25ldF9saXN0ZW5l cl9uZXcoKTsKKyAgICBpZiAocWlvX25ldF9saXN0ZW5lcl9vcGVuX3N5bmMobGlzdGVuZXIsIHNv Y2tldF9hZGRyLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwKSA8 IDApIHsKKyAgICAgICAgb2JqZWN0X3VucmVmKE9CSkVDVChsaXN0ZW5lcikpOworICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogemVybyBvdXQgdW5zcGVjaWZpZWQgZmlsZWRz ICovCisgICAgKnNlcnZlciA9IChWdVNlcnZlcikgeworICAgICAgICAubGlzdGVuZXIgICAgICAg ICAgICAgID0gbGlzdGVuZXIsCisgICAgICAgIC52dV9pZmFjZSAgICAgICAgICAgICAgPSB2dV9p ZmFjZSwKKyAgICAgICAgLm1heF9xdWV1ZXMgICAgICAgICAgICA9IG1heF9xdWV1ZXMsCisgICAg ICAgIC5jdHggICAgICAgICAgICAgICAgICAgPSBjdHgsCisgICAgICAgIC5kZXZpY2VfcGFuaWNf bm90aWZpZXIgPSBkZXZpY2VfcGFuaWNfbm90aWZpZXIsCisgICAgfTsKKworICAgIHFpb19uZXRf bGlzdGVuZXJfc2V0X25hbWUoc2VydmVyLT5saXN0ZW5lciwgInZob3N0LXVzZXItYmFja2VuZC1s aXN0ZW5lciIpOworCisgICAgcWlvX25ldF9saXN0ZW5lcl9zZXRfY2xpZW50X2Z1bmMoc2VydmVy LT5saXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dV9hY2Nl cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgUVRBSUxRX0lOSVQo JnNlcnZlci0+dnVfZmRfd2F0Y2hlcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQg YS91dGlsL21lc29uLmJ1aWxkIGIvdXRpbC9tZXNvbi5idWlsZAppbmRleCBlNmIyMDdhOTllLi4z OTIxOTgxY2NmIDEwMDY0NAotLS0gYS91dGlsL21lc29uLmJ1aWxkCisrKyBiL3V0aWwvbWVzb24u YnVpbGQKQEAgLTY2LDYgKzY2LDcgQEAgaWYgaGF2ZV9ibG9jawogICB1dGlsX3NzLmFkZChmaWxl cygnbWFpbi1sb29wLmMnKSkKICAgdXRpbF9zcy5hZGQoZmlsZXMoJ252ZGltbS11dGlscy5jJykp CiAgIHV0aWxfc3MuYWRkKGZpbGVzKCdxZW11LWNvcm91dGluZS5jJywgJ3FlbXUtY29yb3V0aW5l LWxvY2suYycsICdxZW11LWNvcm91dGluZS1pby5jJykpCisgIHV0aWxfc3MuYWRkKHdoZW46ICdD T05GSUdfTElOVVgnLCBpZl90cnVlOiBmaWxlcygndmhvc3QtdXNlci1zZXJ2ZXIuYycpKQogICB1 dGlsX3NzLmFkZChmaWxlcygncWVtdS1jb3JvdXRpbmUtc2xlZXAuYycpKQogICB1dGlsX3NzLmFk ZChmaWxlcygncWVtdS1jby1zaGFyZWQtcmVzb3VyY2UuYycpKQogICB1dGlsX3NzLmFkZChmaWxl cygndGhyZWFkLXBvb2wuYycsICdxZW11LXRpbWVyLmMnKSkKLS0gCjIuMjYuMgoK