From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH 1/4] ALSA: usb-audio: More validations of descriptor units Date: Thu, 22 Aug 2019 10:52:28 +0200 Message-ID: References: <20190822073207.8696-1-tiwai@suse.de> <20190822073207.8696-3-tiwai@suse.de> <20190822105118.55e5c134@xxx> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id CF5DCF80147 for ; Thu, 22 Aug 2019 10:52:29 +0200 (CEST) In-Reply-To: <20190822105118.55e5c134@xxx> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" To: Amadeusz =?UTF-8?B?U8WCYXdpxYRza2k=?= Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org T24gVGh1LCAyMiBBdWcgMjAxOSAxMDo1MToxOCArMDIwMCwKQW1hZGV1c3ogU8WCYXdpxYRza2kg d3JvdGU6Cj4gCj4gT24gVGh1LCAyMiBBdWcgMjAxOSAwOTozMjowNCArMDIwMAo+IFRha2FzaGkg SXdhaSA8dGl3YWlAc3VzZS5kZT4gd3JvdGU6Cj4gCj4gPiBJbnRyb2R1Y2UgYSBuZXcgaGVscGVy IHRvIHZhbGlkYXRlIGVhY2ggYXVkaW8gZGVzY3JpcHRvciB1bml0IGJlZm9yZQo+ID4gYW5kIGNo ZWNrIHRoZSB1bml0IGJlZm9yZSBhY3R1YWxseSBhY2Nlc3NpbmcgaXQuICBUaGlzIHNob3VsZCBo YXJkZW4KPiA+IGFnYWluc3QgdGhlIE9PQiBhY2Nlc3MgY2FzZXMgd2l0aCBtYWxmb3JtZWQgZGVz Y3JpcHRvcnMgdGhhdCBoYXZlIGJlZW4KPiA+IHJlY2VudGx5IGZyZXF1ZW50bHkgcmVwb3J0ZWQg YnkgZnV6emVycy4KPiA+IAo+ID4gVGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IgY2hlY2tzIGFyZSBz dGlsbCBrZXB0IGFsdGhvdWdoIHRoZXkgYmVjb21lCj4gPiBzdXBlcmZsdW91cyBhZnRlciB0aGlz IHBhdGNoLiAgVGhleSdsbCBiZSBjbGVhbmVkIHVwIGV2ZW50dWFsbHkKPiA+IGxhdGVyLgo+ID4g Cj4gPiBTaWduZWQtb2ZmLWJ5OiBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Cj4gPiAtLS0K PiA+ICBzb3VuZC91c2IvTWFrZWZpbGUgICB8ICAgMyArLQo+ID4gIHNvdW5kL3VzYi9oZWxwZXIu aCAgIHwgICA0ICsKPiA+ICBzb3VuZC91c2IvbWl4ZXIuYyAgICB8ICAxMCArKwo+ID4gIHNvdW5k L3VzYi9wb3dlci5jICAgIHwgICAyICsKPiA+ICBzb3VuZC91c2IvcXVpcmtzLmMgICB8ICAgMyAr Cj4gPiAgc291bmQvdXNiL3N0cmVhbS5jICAgfCAgMjUgKystLQo+ID4gIHNvdW5kL3VzYi92YWxp ZGF0ZS5jIHwgMzMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMzY2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0 aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC91c2IvdmFsaWRhdGUuYwo+ID4g Cj4gPiBkaWZmIC0tZ2l0IGEvc291bmQvdXNiL01ha2VmaWxlIGIvc291bmQvdXNiL01ha2VmaWxl Cj4gPiBpbmRleCBlMWNlMjU3YWI3MDUuLmQyN2EyMWIwZmY5YyAxMDA2NDQKPiA+IC0tLSBhL3Nv dW5kL3VzYi9NYWtlZmlsZQo+ID4gKysrIGIvc291bmQvdXNiL01ha2VmaWxlCj4gPiBAQCAtMTYs NyArMTYsOCBAQCBzbmQtdXNiLWF1ZGlvLW9ianMgOj0gCWNhcmQubyBcCj4gPiAgCQkJcG93ZXIu byBcCj4gPiAgCQkJcHJvYy5vIFwKPiA+ICAJCQlxdWlya3MubyBcCj4gPiAtCQkJc3RyZWFtLm8K PiA+ICsJCQlzdHJlYW0ubyBcCj4gPiArCQkJdmFsaWRhdGUubwo+ID4gIAo+ID4gIHNuZC11c2It YXVkaW8tJChDT05GSUdfU05EX1VTQl9BVURJT19VU0VfTUVESUFfQ09OVFJPTExFUikgKz0gbWVk aWEubwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9oZWxwZXIuaCBiL3NvdW5kL3Vz Yi9oZWxwZXIuaAo+ID4gaW5kZXggNmFmYjcwMTU2ZWM0Li41ZThhMThiNGU3YjkgMTAwNjQ0Cj4g PiAtLS0gYS9zb3VuZC91c2IvaGVscGVyLmgKPiA+ICsrKyBiL3NvdW5kL3VzYi9oZWxwZXIuaAo+ ID4gQEAgLTMxLDQgKzMxLDggQEAgc3RhdGljIGlubGluZSBpbnQgc25kX3VzYl9jdHJsX2ludGYo c3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXApCj4gPiAgCXJldHVybiBnZXRfaWZhY2VfZGVzYyhj aGlwLT5jdHJsX2ludGYpLT5iSW50ZXJmYWNlTnVtYmVyOwo+ID4gIH0KPiA+ICAKPiA+ICsvKiBp biB2YWxpZGF0ZS5jICovCj4gPiArYm9vbCBzbmRfdXNiX3ZhbGlkYXRlX2F1ZGlvX2Rlc2Modm9p ZCAqcCwgaW50IHByb3RvY29sKTsKPiA+ICtib29sIHNuZF91c2JfdmFsaWRhdGVfbWlkaV9kZXNj KHZvaWQgKnApOwo+ID4gKwo+ID4gICNlbmRpZiAvKiBfX1VTQkFVRElPX0hFTFBFUl9IICovCj4g PiBkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmMgYi9zb3VuZC91c2IvbWl4ZXIuYwo+ID4g aW5kZXggMjdlZTY4YTUwN2EyLi5iNGJlMjI2ZTA3ZjMgMTAwNjQ0Cj4gPiAtLS0gYS9zb3VuZC91 c2IvbWl4ZXIuYwo+ID4gKysrIGIvc291bmQvdXNiL21peGVyLmMKPiA+IEBAIC03ODUsNiArNzg1 LDggQEAgc3RhdGljIGludCBfX2NoZWNrX2lucHV0X3Rlcm0oc3RydWN0IG1peGVyX2J1aWxkICpz dGF0ZSwgaW50IGlkLAo+ID4gIAkJcDEgPSBmaW5kX2F1ZGlvX2NvbnRyb2xfdW5pdChzdGF0ZSwg aWQpOwo+ID4gIAkJaWYgKCFwMSkKPiA+ICAJCQlicmVhazsKPiA+ICsJCWlmICghc25kX3VzYl92 YWxpZGF0ZV9hdWRpb19kZXNjKHAxLCBwcm90b2NvbCkpCj4gPiArCQkJYnJlYWs7IC8qIGJhZCBk ZXNjcmlwdG9yICovCj4gPiAgCj4gPiAgCQloZHIgPSBwMTsKPiA+ICAJCXRlcm0tPmlkID0gaWQ7 Cj4gPiBAQCAtMjc3Myw2ICsyNzc1LDExIEBAIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fdW5pdChz dHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCBpbnQgdW5pdGlkKQo+ID4gIAkJcmV0dXJuIC1FSU5W QUw7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJaWYgKCFzbmRfdXNiX3ZhbGlkYXRlX2F1ZGlvX2Rlc2Mo cDEsIHByb3RvY29sKSkgewo+ID4gKwkJdXNiX2F1ZGlvX2RiZyhzdGF0ZS0+Y2hpcCwgImludmFs aWQgdW5pdCAlZFxuIiwgdW5pdGlkKTsKPiA+ICsJCXJldHVybiAwOyAvKiBza2lwIGludmFsaWQg dW5pdCAqLwo+ID4gKwl9Cj4gPiArCj4gPiAgCWlmIChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8x IHx8IHByb3RvY29sID09IFVBQ19WRVJTSU9OXzIpIHsKPiA+ICAJCXN3aXRjaCAocDFbMl0pIHsK PiA+ICAJCWNhc2UgVUFDX0lOUFVUX1RFUk1JTkFMOgo+ID4gQEAgLTMxNDMsNiArMzE1MCw5IEBA IHN0YXRpYyBpbnQgc25kX3VzYl9taXhlcl9jb250cm9scyhzdHJ1Y3QgdXNiX21peGVyX2ludGVy ZmFjZSAqbWl4ZXIpCj4gPiAgCXdoaWxlICgocCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKG1p eGVyLT5ob3N0aWYtPmV4dHJhLAo+ID4gIAkJCQkJICAgIG1peGVyLT5ob3N0aWYtPmV4dHJhbGVu LAo+ID4gIAkJCQkJICAgIHAsIFVBQ19PVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7Cj4gPiAr CQlpZiAoIXNuZF91c2JfdmFsaWRhdGVfYXVkaW9fZGVzYyhwLCBtaXhlci0+cHJvdG9jb2wpKQo+ ID4gKwkJCWNvbnRpbnVlOyAvKiBza2lwIGludmFsaWQgZGVzY3JpcHRvciAqLwo+ID4gKwo+ID4g IAkJaWYgKG1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSB7Cj4gPiAgCQkJc3RydWN0 IHVhYzFfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgKmRlc2MgPSBwOwo+ID4gIAo+ID4gZGlm ZiAtLWdpdCBhL3NvdW5kL3VzYi9wb3dlci5jIGIvc291bmQvdXNiL3Bvd2VyLmMKPiA+IGluZGV4 IGJkMzAzYTFiYTFiNy4uNjA2YTJjYjIzZWFiIDEwMDY0NAo+ID4gLS0tIGEvc291bmQvdXNiL3Bv d2VyLmMKPiA+ICsrKyBiL3NvdW5kL3VzYi9wb3dlci5jCj4gPiBAQCAtMzEsNiArMzEsOCBAQCBz bmRfdXNiX2ZpbmRfcG93ZXJfZG9tYWluKHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmN0cmxf aWZhY2UsCj4gPiAgCQlzdHJ1Y3QgdWFjM19wb3dlcl9kb21haW5fZGVzY3JpcHRvciAqcGRfZGVz YyA9IHA7Cj4gPiAgCQlpbnQgaTsKPiA+ICAKPiA+ICsJCWlmICghc25kX3VzYl92YWxpZGF0ZV9h dWRpb19kZXNjKHAsIFVBQ19WRVJTSU9OXzMpKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gIAkJZm9y IChpID0gMDsgaSA8IHBkX2Rlc2MtPmJOckVudGl0aWVzOyBpKyspIHsKPiA+ICAJCQlpZiAocGRf ZGVzYy0+YmFFbnRpdHlJRFtpXSA9PSBpZCkgewo+ID4gIAkJCQlwZC0+cGRfaWQgPSBwZF9kZXNj LT5iUG93ZXJEb21haW5JRDsKPiA+IGRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9z b3VuZC91c2IvcXVpcmtzLmMKPiA+IGluZGV4IDc4ODU4OTE4Y2JjMS4uN2U5NzM1YWE3YWM5IDEw MDY0NAo+ID4gLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCj4gPiArKysgYi9zb3VuZC91c2IvcXVp cmtzLmMKPiA+IEBAIC0yNDgsNiArMjQ4LDkgQEAgc3RhdGljIGludCBjcmVhdGVfeWFtYWhhX21p ZGlfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCj4gPiAgCQkJCQlOVUxMLCBVU0Jf TVNfTUlESV9PVVRfSkFDSyk7Cj4gPiAgCWlmICghaW5qZCAmJiAhb3V0amQpCj4gPiAgCQlyZXR1 cm4gLUVOT0RFVjsKPiA+ICsJaWYgKCFzbmRfdXNiX3ZhbGlkYXRlX21pZGlfZGVzYyhpbmpkKSB8 fAo+ID4gKwkgICAgIXNuZF91c2JfdmFsaWRhdGVfbWlkaV9kZXNjKG91dGpkKSkKPiA+ICsJCXJl dHVybiAtRU5PREVWOwo+ID4gIAlpZiAoaW5qZCAmJiAoaW5qZC0+Ykxlbmd0aCA8IDUgfHwKPiA+ ICAJCSAgICAgKGluamQtPmJKYWNrVHlwZSAhPSBVU0JfTVNfRU1CRURERUQgJiYKPiA+ICAJCSAg ICAgIGluamQtPmJKYWNrVHlwZSAhPSBVU0JfTVNfRVhURVJOQUwpKSkKPiA+IGRpZmYgLS1naXQg YS9zb3VuZC91c2Ivc3RyZWFtLmMgYi9zb3VuZC91c2Ivc3RyZWFtLmMKPiA+IGluZGV4IGU4NTJj N2ZkNjEwOS4uYTA2NDljOGFlNDYwIDEwMDY0NAo+ID4gLS0tIGEvc291bmQvdXNiL3N0cmVhbS5j Cj4gPiArKysgYi9zb3VuZC91c2Ivc3RyZWFtLmMKPiA+IEBAIC02MjcsMTYgKzYyNywxNCBAQCBz dGF0aWMgaW50IHBhcnNlX3VhY19lbmRwb2ludF9hdHRyaWJ1dGVzKHN0cnVjdCBzbmRfdXNiX2F1 ZGlvICpjaGlwLAo+ID4gICAqLwo+ID4gIHN0YXRpYyB2b2lkICoKPiA+ICBzbmRfdXNiX2ZpbmRf aW5wdXRfdGVybWluYWxfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdHJs X2lmYWNlLAo+ID4gLQkJCQkgICAgICAgaW50IHRlcm1pbmFsX2lkLCBib29sIHVhYzIzKQo+ID4g KwkJCQkgICAgICAgaW50IHRlcm1pbmFsX2lkLCBpbnQgcHJvdG9jb2wpCj4gPiAgewo+ID4gIAlz dHJ1Y3QgdWFjMl9pbnB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yICp0ZXJtID0gTlVMTDsKPiA+IC0J c2l6ZV90IG1pbmxlbiA9IHVhYzIzID8gc2l6ZW9mKHN0cnVjdCB1YWMyX2lucHV0X3Rlcm1pbmFs X2Rlc2NyaXB0b3IpIDoKPiA+IC0JCXNpemVvZihzdHJ1Y3QgdWFjX2lucHV0X3Rlcm1pbmFsX2Rl c2NyaXB0b3IpOwo+ID4gIAo+ID4gIAl3aGlsZSAoKHRlcm0gPSBzbmRfdXNiX2ZpbmRfY3NpbnRf ZGVzYyhjdHJsX2lmYWNlLT5leHRyYSwKPiA+ICAJCQkJCSAgICAgICBjdHJsX2lmYWNlLT5leHRy YWxlbiwKPiA+ICAJCQkJCSAgICAgICB0ZXJtLCBVQUNfSU5QVVRfVEVSTUlOQUwpKSkgewo+ID4g LQkJaWYgKHRlcm0tPmJMZW5ndGggPCBtaW5sZW4pCj4gPiArCQlpZiAoIXNuZF91c2JfdmFsaWRh dGVfYXVkaW9fZGVzYyh0ZXJtLCBwcm90b2NvbCkpCj4gPiAgCQkJY29udGludWU7Cj4gPiAgCQlp ZiAodGVybS0+YlRlcm1pbmFsSUQgPT0gdGVybWluYWxfaWQpCj4gPiAgCQkJcmV0dXJuIHRlcm07 Cj4gPiBAQCAtNjQ3LDcgKzY0NSw3IEBAIHNuZF91c2JfZmluZF9pbnB1dF90ZXJtaW5hbF9kZXNj cmlwdG9yKHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmN0cmxfaWZhY2UsCj4gPiAgCj4gPiAg c3RhdGljIHZvaWQgKgo+ID4gIHNuZF91c2JfZmluZF9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRv cihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpjdHJsX2lmYWNlLAo+ID4gLQkJCQkJaW50IHRl cm1pbmFsX2lkKQo+ID4gKwkJCQkJaW50IHRlcm1pbmFsX2lkLCBpbnQgcHJvdG9jb2wpCj4gPiAg ewo+ID4gIAkvKiBPSyB0byB1c2Ugd2l0aCBib3RoIFVBQzIgYW5kIFVBQzMgKi8KPiA+ICAJc3Ry dWN0IHVhYzJfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgKnRlcm0gPSBOVUxMOwo+ID4gQEAg LTY1NSw4ICs2NTMsOSBAQCBzbmRfdXNiX2ZpbmRfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Io c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqY3RybF9pZmFjZSwKPiA+ICAJd2hpbGUgKCh0ZXJt ID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoY3RybF9pZmFjZS0+ZXh0cmEsCj4gPiAgCQkJCQkg ICAgICAgY3RybF9pZmFjZS0+ZXh0cmFsZW4sCj4gPiAgCQkJCQkgICAgICAgdGVybSwgVUFDX09V VFBVVF9URVJNSU5BTCkpKSB7Cj4gPiAtCQlpZiAodGVybS0+Ykxlbmd0aCA+PSBzaXplb2YoKnRl cm0pICYmCj4gPiAtCQkgICAgdGVybS0+YlRlcm1pbmFsSUQgPT0gdGVybWluYWxfaWQpCj4gPiAr CQlpZiAoIXNuZF91c2JfdmFsaWRhdGVfYXVkaW9fZGVzYyh0ZXJtLCBwcm90b2NvbCkpCj4gPiAr CQkJY29udGludWU7Cj4gPiArCQlpZiAodGVybS0+YlRlcm1pbmFsSUQgPT0gdGVybWluYWxfaWQp Cj4gPiAgCQkJcmV0dXJuIHRlcm07Cj4gPiAgCX0KPiA+ICAKPiA+IEBAIC03MzEsNyArNzMwLDcg QEAgc25kX3VzYl9nZXRfYXVkaW9mb3JtYXRfdWFjMTIoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNo aXAsCj4gPiAgCj4gPiAgCQlpdGVybSA9IHNuZF91c2JfZmluZF9pbnB1dF90ZXJtaW5hbF9kZXNj cmlwdG9yKGNoaXAtPmN0cmxfaW50ZiwKPiA+ICAJCQkJCQkJICAgICAgIGFzLT5iVGVybWluYWxM aW5rLAo+ID4gLQkJCQkJCQkgICAgICAgZmFsc2UpOwo+ID4gKwkJCQkJCQkgICAgICAgcHJvdG9j b2wpOwo+ID4gIAkJaWYgKGl0ZXJtKSB7Cj4gPiAgCQkJbnVtX2NoYW5uZWxzID0gaXRlcm0tPmJO ckNoYW5uZWxzOwo+ID4gIAkJCWNoY29uZmlnID0gbGUxNl90b19jcHUoaXRlcm0tPndDaGFubmVs Q29uZmlnKTsKPiA+IEBAIC03NjcsNyArNzY2LDcgQEAgc25kX3VzYl9nZXRfYXVkaW9mb3JtYXRf dWFjMTIoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCj4gPiAgCQkgKi8KPiA+ICAJCWlucHV0 X3Rlcm0gPSBzbmRfdXNiX2ZpbmRfaW5wdXRfdGVybWluYWxfZGVzY3JpcHRvcihjaGlwLT5jdHJs X2ludGYsCj4gPiAgCQkJCQkJCQkgICAgYXMtPmJUZXJtaW5hbExpbmssCj4gPiAtCQkJCQkJCQkg ICAgdHJ1ZSk7Cj4gPiArCQkJCQkJCQkgICAgcHJvdG9jb2wpOwo+ID4gIAkJaWYgKGlucHV0X3Rl cm0pIHsKPiA+ICAJCQljbG9jayA9IGlucHV0X3Rlcm0tPmJDU291cmNlSUQ7Cj4gPiAgCQkJaWYg KCFjaGNvbmZpZyAmJiAobnVtX2NoYW5uZWxzID09IGlucHV0X3Rlcm0tPmJOckNoYW5uZWxzKSkK PiA+IEBAIC03NzYsNyArNzc1LDggQEAgc25kX3VzYl9nZXRfYXVkaW9mb3JtYXRfdWFjMTIoc3Ry dWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCj4gPiAgCQl9Cj4gPiAgCj4gPiAgCQlvdXRwdXRfdGVy bSA9IHNuZF91c2JfZmluZF9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcihjaGlwLT5jdHJsX2lu dGYsCj4gPiAtCQkJCQkJCQkgICAgICBhcy0+YlRlcm1pbmFsTGluayk7Cj4gPiArCQkJCQkJCQkg ICAgICBhcy0+YlRlcm1pbmFsTGluaywKPiA+ICsJCQkJCQkJCSAgICAgIHByb3RvY29sKTsKPiA+ ICAJCWlmIChvdXRwdXRfdGVybSkgewo+ID4gIAkJCWNsb2NrID0gb3V0cHV0X3Rlcm0tPmJDU291 cmNlSUQ7Cj4gPiAgCQkJZ290byBmb3VuZF9jbG9jazsKPiA+IEBAIC0xMDAyLDE0ICsxMDAyLDE1 IEBAIHNuZF91c2JfZ2V0X2F1ZGlvZm9ybWF0X3VhYzMoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNo aXAsCj4gPiAgCSAqLwo+ID4gIAlpbnB1dF90ZXJtID0gc25kX3VzYl9maW5kX2lucHV0X3Rlcm1p bmFsX2Rlc2NyaXB0b3IoY2hpcC0+Y3RybF9pbnRmLAo+ID4gIAkJCQkJCQkgICAgYXMtPmJUZXJt aW5hbExpbmssCj4gPiAtCQkJCQkJCSAgICB0cnVlKTsKPiA+ICsJCQkJCQkJICAgIFVBQ19WRVJT SU9OXzMpOwo+ID4gIAlpZiAoaW5wdXRfdGVybSkgewo+ID4gIAkJY2xvY2sgPSBpbnB1dF90ZXJt LT5iQ1NvdXJjZUlEOwo+ID4gIAkJZ290byBmb3VuZF9jbG9jazsKPiA+ICAJfQo+ID4gIAo+ID4g IAlvdXRwdXRfdGVybSA9IHNuZF91c2JfZmluZF9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcihj aGlwLT5jdHJsX2ludGYsCj4gPiAtCQkJCQkJCSAgICAgYXMtPmJUZXJtaW5hbExpbmspOwo+ID4g KwkJCQkJCQkgICAgICBhcy0+YlRlcm1pbmFsTGluaywKPiA+ICsJCQkJCQkJICAgICAgVUFDX1ZF UlNJT05fMyk7Cj4gPiAgCWlmIChvdXRwdXRfdGVybSkgewo+ID4gIAkJY2xvY2sgPSBvdXRwdXRf dGVybS0+YkNTb3VyY2VJRDsKPiA+ICAJCWdvdG8gZm91bmRfY2xvY2s7Cj4gPiBkaWZmIC0tZ2l0 IGEvc291bmQvdXNiL3ZhbGlkYXRlLmMgYi9zb3VuZC91c2IvdmFsaWRhdGUuYwo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uM2M4ZjczYTBlYjEyCj4gPiAt LS0gL2Rldi9udWxsCj4gPiArKysgYi9zb3VuZC91c2IvdmFsaWRhdGUuYwo+ID4gQEAgLTAsMCAr MSwzMzIgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl cgo+ID4gKy8vCj4gPiArLy8gVmFsaWRhdGlvbiBvZiBVU0ItYXVkaW8gY2xhc3MgZGVzY3JpcHRv cnMKPiA+ICsvLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L3VzYi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLXYyLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3VzYi9h dWRpby12My5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC91c2IvbWlkaS5oPgo+ID4gKyNpbmNsdWRl ICJ1c2JhdWRpby5oIgo+ID4gKyNpbmNsdWRlICJoZWxwZXIuaCIKPiA+ICsKPiA+ICtzdHJ1Y3Qg dXNiX2Rlc2NfdmFsaWRhdG9yIHsKPiA+ICsJdW5zaWduZWQgY2hhciBwcm90b2NvbDsKPiA+ICsJ dW5zaWduZWQgY2hhciB0eXBlOwo+ID4gKwlib29sICgqZnVuYykoY29uc3Qgdm9pZCAqcCwgY29u c3Qgc3RydWN0IHVzYl9kZXNjX3ZhbGlkYXRvciAqdik7Cj4gPiArCXNpemVfdCBzaXplOwo+ID4g K307Cj4gPiArCj4gPiArI2RlZmluZSBVQUNfVkVSU0lPTl9BTEwJCSh1bnNpZ25lZCBjaGFyKSgt MSkKPiA+ICsKPiA+ICsvKiBVQUMxIG9ubHkgKi8KPiA+ICtzdGF0aWMgYm9vbCB2YWxpZGF0ZV91 YWMxX2hlYWRlcihjb25zdCB2b2lkICpwLAo+ID4gKwkJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXNj X3ZhbGlkYXRvciAqdikKPiA+ICt7Cj4gPiArCWNvbnN0IHN0cnVjdCB1YWMxX2FjX2hlYWRlcl9k ZXNjcmlwdG9yICpkID0gcDsKPiA+ICsKPiA+ICsJcmV0dXJuIGQtPmJMZW5ndGggPj0gc2l6ZW9m KCpkKSAmJgo+ID4gKwkJZC0+Ykxlbmd0aCA+PSBzaXplb2YoKmQpICsgZC0+YkluQ29sbGVjdGlv bjsKPiAKPiBJZiBteSBsb2dpYyBpcyBub3QgZmFpbGluZyBtZSBpbiB0aGUgbW9ybmluZywgY2Fu J3QgdGhpcyBiZSBzaW1wbGlmaWVkCj4gdG8ganVzdDoKPiByZXR1cm4gZC0+Ykxlbmd0aCA+PSBz aXplb2YoKmQpICsgZC0+YkluQ29sbGVjdGlvbjsKPiA/CgpObywgaXQncyBub3Qgc2FtZS4gIFRo ZSBwb2ludCBvZiB0aGUgZmlyc3QgY2hlY2sgaXMgYXNzdXJlIHRoYXQgdGhlCmRlc2NyaXB0b3Ig aGFzIGVub3VnaCBzaXplIGZvciByZWFkaW5nIGl0cyBiSW5Db2xsZWN0aW9uIGZpZWxkLgoKCj4g PiArfQo+ID4gKwo+ID4gKy8qIGZvciBtaXhlciB1bml0OyBjb3ZlcmluZyBhbGwgVUFDcyAqLwo+ ID4gK3N0YXRpYyBib29sIHZhbGlkYXRlX21peGVyX3VuaXQoY29uc3Qgdm9pZCAqcCwKPiA+ICsJ CQkJY29uc3Qgc3RydWN0IHVzYl9kZXNjX3ZhbGlkYXRvciAqdikKPiA+ICt7Cj4gPiArCWNvbnN0 IHN0cnVjdCB1YWNfbWl4ZXJfdW5pdF9kZXNjcmlwdG9yICpkID0gcDsKPiA+ICsJc2l6ZV90IGxl bjsKPiA+ICsKPiA+ICsJaWYgKGQtPmJMZW5ndGggPCBzaXplb2YoKmQpIHx8ICFkLT5iTnJJblBp bnMpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCWxlbiA9IHNpemVvZigqZCkgKyBkLT5iTnJJ blBpbnM7Cj4gPiArCS8qIFdlIGNhbid0IGRldGVybWluZSB0aGUgYml0bWFwIHNpemUgb25seSBm cm9tIHRoaXMgdW5pdCBkZXNjcmlwdG9yLAo+ID4gKwkgKiBzbyBqdXN0IGNoZWNrIHdpdGggdGhl IHJlbWFpbmluZyBsZW5ndGguCj4gPiArCSAqIFRoZSBhY3R1YWwgYml0bWFwIGlzIGNoZWNrZWQg YXQgbWl4ZXIgdW5pdCBwYXJzZXIuCj4gPiArCSAqLwo+ID4gKwlzd2l0Y2ggKHYtPnByb3RvY29s KSB7Cj4gPiArCWNhc2UgVUFDX1ZFUlNJT05fMToKPiA+ICsJZGVmYXVsdDoKPiAKPiBJbXBsaWNp dCBmYWxsIHRocm91Z2g/CgpOb3QgcmVhbGx5LiAgVGhlIGZhbGwtdGhyb3VnaCBub3Rpb24gaXNu J3QgbmVlZGVkIGZvciB0aGlzIGtpbmQgb2YgdXNlCmNhc2VzLiAgSXQncyBuZWVkZWQgb25seSBm b3IgdGhlIGNhc2UgbGlrZQoKCXN3aXRjaCAoZm9vKSB7CgljYXNlIDA6CgkJZG9fc29tZXRoaW5n KCk7CgljYXNlIDE6CgkJZG9fbW9yZSgpOwoJCWJyZWFrOwoJfQoKCnRoYW5rcywKClRha2FzaGkK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZl bCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHBzOi8vbWFpbG1h bi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo=