From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yonghong Song Subject: Re: [PATCH bpf-next 05/13] bpf: get better bpf_prog ksyms based on btf func type_id Date: Wed, 17 Oct 2018 00:32:13 +0000 Message-ID: <9de47216-e2e2-9e21-3171-dbcf9a61648d@fb.com> References: <20181012185446.2379289-1-yhs@fb.com> <20181015231223.cwe3zblnh4wt7xds@kafai-mbp.dhcp.thefacebook.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Alexei Starovoitov , "daniel@iogearbox.net" , "netdev@vger.kernel.org" , Kernel Team To: Martin Lau Return-path: Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:44986 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727214AbeJQIZk (ORCPT ); Wed, 17 Oct 2018 04:25:40 -0400 In-Reply-To: <20181015231223.cwe3zblnh4wt7xds@kafai-mbp.dhcp.thefacebook.com> Content-Language: en-US Content-ID: Sender: netdev-owner@vger.kernel.org List-ID: DQoNCk9uIDEwLzE1LzE4IDQ6MTIgUE0sIE1hcnRpbiBMYXUgd3JvdGU6DQo+IE9uIEZyaSwgT2N0 IDEyLCAyMDE4IGF0IDExOjU0OjQyQU0gLTA3MDAsIFlvbmdob25nIFNvbmcgd3JvdGU6DQo+PiBU aGlzIHBhdGNoIGFkZGVkIGludGVyZmFjZSB0byBsb2FkIGEgcHJvZ3JhbSB3aXRoIHRoZSBmb2xs b3dpbmcNCj4+IGFkZGl0aW9uYWwgaW5mb3JtYXRpb246DQo+PiAgICAgLiBwcm9nX2J0Zl9mZA0K Pj4gICAgIC4gZnVuY19pbmZvIGFuZCBmdW5jX2luZm9fbGVuDQo+PiB3aGVyZSBmdW5jX2luZm8g d2lsbCBwcm92aWRlcyBmdW5jdGlvbiByYW5nZSBhbmQgdHlwZV9pZA0KPj4gY29ycmVzcG9uZGlu ZyB0byBlYWNoIGZ1bmN0aW9uLg0KPj4NCj4+IElmIHZlcmlmaWVyIGFncmVlcyB3aXRoIGZ1bmN0 aW9uIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLA0KPj4gdGhlIGJwZl9wcm9nIGtzeW0gZm9y IGVhY2ggZnVuY3Rpb24gd2lsbCB1c2UgdGhlIGZ1bmMgbmFtZQ0KPj4gcHJvdmlkZWQgaW4gdGhl IHR5cGVfaWQsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIHByb3ZpZGUgYmV0dGVyDQo+PiBlbmNvZGlu ZyBhcyBpdCBpcyBub3QgbGltaXRlZCBieSAxNiBieXRlcyBwcm9ncmFtIG5hbWUNCj4+IGxpbWl0 YXRpb24gYW5kIHRoaXMgaXMgYmV0dGVyIGZvciBicGYgcHJvZ3JhbSB3aGljaCBjb250YWlucw0K Pj4gbXVsdGlwbGUgc3VicHJvZ3JhbXMuDQo+Pg0KPj4gVGhlIGJwZl9wcm9nX2luZm8gaW50ZXJm YWNlIGlzIGFsc28gZXh0ZW5kZWQgdG8NCj4+IHJldHVybiBidGZfaWQgYW5kIGppdGVkX2Z1bmNf dHlwZXMsIHNvIHVzZXIgc3BhY2VzIGNhbg0KPj4gcHJpbnQgb3V0IHRoZSBmdW5jdGlvbiBwcm90 b3R5cGUgZm9yIGVhY2ggaml0ZWQgZnVuY3Rpb24uDQo+IFNvbWUgbml0cy4NCj4gDQo+Pg0KPj4g U2lnbmVkLW9mZi1ieTogWW9uZ2hvbmcgU29uZyA8eWhzQGZiLmNvbT4NCj4+IC0tLQ0KPj4gICBp bmNsdWRlL2xpbnV4L2JwZi5oICAgICAgICAgIHwgIDIgKw0KPj4gICBpbmNsdWRlL2xpbnV4L2Jw Zl92ZXJpZmllci5oIHwgIDEgKw0KPj4gICBpbmNsdWRlL2xpbnV4L2J0Zi5oICAgICAgICAgIHwg IDIgKw0KPj4gICBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmggICAgIHwgMTEgKysrKysNCj4+ICAg a2VybmVsL2JwZi9idGYuYyAgICAgICAgICAgICB8IDE2ICsrKysrKysNCj4+ICAga2VybmVsL2Jw Zi9jb3JlLmMgICAgICAgICAgICB8ICA5ICsrKysNCj4+ICAga2VybmVsL2JwZi9zeXNjYWxsLmMg ICAgICAgICB8IDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPj4gICBr ZXJuZWwvYnBmL3ZlcmlmaWVyLmMgICAgICAgIHwgNTAgKysrKysrKysrKysrKysrKysrKysrDQo+ PiAgIDggZmlsZXMgY2hhbmdlZCwgMTc2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4+ DQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBm LmgNCj4+IGluZGV4IDliNTU4NzEzNDQ3Zi4uZTljNjNmZmEwMWFmIDEwMDY0NA0KPj4gLS0tIGEv aW5jbHVkZS9saW51eC9icGYuaA0KPj4gKysrIGIvaW5jbHVkZS9saW51eC9icGYuaA0KPj4gQEAg LTMwOCw2ICszMDgsOCBAQCBzdHJ1Y3QgYnBmX3Byb2dfYXV4IHsNCj4+ICAgCXZvaWQgKnNlY3Vy aXR5Ow0KPj4gICAjZW5kaWYNCj4+ICAgCXN0cnVjdCBicGZfcHJvZ19vZmZsb2FkICpvZmZsb2Fk Ow0KPj4gKwlzdHJ1Y3QgYnRmICpidGY7DQo+PiArCXUzMiB0eXBlX2lkOyAvKiB0eXBlIGlkIGZv ciB0aGlzIHByb2cvZnVuYyAqLw0KPj4gICAJdW5pb24gew0KPj4gICAJCXN0cnVjdCB3b3JrX3N0 cnVjdCB3b3JrOw0KPj4gICAJCXN0cnVjdCByY3VfaGVhZAlyY3U7DQo+PiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVy LmgNCj4+IGluZGV4IDllODA1NmVjMjBmYS4uZTg0NzgyZWM1MGFjIDEwMDY0NA0KPj4gLS0tIGEv aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaA0KPj4gKysrIGIvaW5jbHVkZS9saW51eC9icGZf dmVyaWZpZXIuaA0KPj4gQEAgLTIwMSw2ICsyMDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBm X3ZlcmlmaWVyX2xvZ19uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZykN Cj4+ICAgc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gew0KPj4gICAJdTMyIHN0YXJ0OyAvKiBpbnNu IGlkeCBvZiBmdW5jdGlvbiBlbnRyeSBwb2ludCAqLw0KPj4gICAJdTE2IHN0YWNrX2RlcHRoOyAv KiBtYXguIHN0YWNrIGRlcHRoIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiAqLw0KPj4gKwl1MzIgdHlw ZV9pZDsgLyogYnRmIHR5cGVfaWQgZm9yIHRoaXMgc3VicHJvZyAqLw0KPj4gICB9Ow0KPj4gICAN Cj4+ICAgLyogc2luZ2xlIGNvbnRhaW5lciBmb3IgYWxsIHN0cnVjdHMNCj4+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2xpbnV4L2J0Zi5oIGIvaW5jbHVkZS9saW51eC9idGYuaA0KPj4gaW5kZXggZTA3 NmM0Njk3MDQ5Li45MGU5MWI1MmFhOTAgMTAwNjQ0DQo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2J0 Zi5oDQo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2J0Zi5oDQo+PiBAQCAtNDYsNSArNDYsNyBAQCB2 b2lkIGJ0Zl90eXBlX3NlcV9zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQs IHZvaWQgKm9iaiwNCj4+ICAgCQkgICAgICAgc3RydWN0IHNlcV9maWxlICptKTsNCj4+ICAgaW50 IGJ0Zl9nZXRfZmRfYnlfaWQodTMyIGlkKTsNCj4+ICAgdTMyIGJ0Zl9pZChjb25zdCBzdHJ1Y3Qg YnRmICpidGYpOw0KPj4gK2Jvb2wgaXNfYnRmX2Z1bmNfdHlwZShjb25zdCBzdHJ1Y3QgYnRmICpi dGYsIHUzMiB0eXBlX2lkKTsNCj4+ICtjb25zdCBjaGFyICpidGZfZ2V0X25hbWVfYnlfaWQoY29u c3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCk7DQo+PiAgIA0KPj4gICAjZW5kaWYNCj4+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGlu dXgvYnBmLmgNCj4+IGluZGV4IGY5MTg3YjQxZGZmNi4uN2ViYmY0ZjA2YTY1IDEwMDY0NA0KPj4g LS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGlu dXgvYnBmLmgNCj4+IEBAIC0zMzIsNiArMzMyLDkgQEAgdW5pb24gYnBmX2F0dHIgew0KPj4gICAJ CSAqIChjb250ZXh0IGFjY2Vzc2VzLCBhbGxvd2VkIGhlbHBlcnMsIGV0YykuDQo+PiAgIAkJICov DQo+PiAgIAkJX191MzIJCWV4cGVjdGVkX2F0dGFjaF90eXBlOw0KPj4gKwkJX191MzIJCXByb2df YnRmX2ZkOwkvKiBmZCBwb2ludGluZyB0byBCVEYgdHlwZSBkYXRhICovDQo+PiArCQlfX3UzMgkJ ZnVuY19pbmZvX2xlbjsJLyogZnVuY19pbmZvIGxlbmd0aCAqLw0KPj4gKwkJX19hbGlnbmVkX3U2 NAlmdW5jX2luZm87CS8qIGZ1bmMgdHlwZSBpbmZvICovDQo+PiAgIAl9Ow0KPj4gICANCj4+ICAg CXN0cnVjdCB7IC8qIGFub255bW91cyBzdHJ1Y3QgdXNlZCBieSBCUEZfT0JKXyogY29tbWFuZHMg Ki8NCj4+IEBAIC0yNTg1LDYgKzI1ODgsOSBAQCBzdHJ1Y3QgYnBmX3Byb2dfaW5mbyB7DQo+PiAg IAlfX3UzMiBucl9qaXRlZF9mdW5jX2xlbnM7DQo+PiAgIAlfX2FsaWduZWRfdTY0IGppdGVkX2tz eW1zOw0KPj4gICAJX19hbGlnbmVkX3U2NCBqaXRlZF9mdW5jX2xlbnM7DQo+PiArCV9fdTMyIGJ0 Zl9pZDsNCj4+ICsJX191MzIgbnJfaml0ZWRfZnVuY190eXBlczsNCj4+ICsJX19hbGlnbmVkX3U2 NCBqaXRlZF9mdW5jX3R5cGVzOw0KPj4gICB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsN Cj4+ICAgDQo+PiAgIHN0cnVjdCBicGZfbWFwX2luZm8gew0KPj4gQEAgLTI4OTYsNCArMjkwMiw5 IEBAIHN0cnVjdCBicGZfZmxvd19rZXlzIHsNCj4+ICAgCX07DQo+PiAgIH07DQo+PiAgIA0KPj4g K3N0cnVjdCBicGZfZnVuY19pbmZvIHsNCj4+ICsJX191MzIJaW5zbl9vZmZzZXQ7DQo+PiArCV9f dTMyCXR5cGVfaWQ7DQo+PiArfTsNCj4+ICsNCj4+ICAgI2VuZGlmIC8qIF9VQVBJX19MSU5VWF9C UEZfSF9fICovDQo+PiBkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYv YnRmLmMNCj4+IGluZGV4IDc5NGExODVmMTFiZi4uODViOGVlY2NkZGJkIDEwMDY0NA0KPj4gLS0t IGEva2VybmVsL2JwZi9idGYuYw0KPj4gKysrIGIva2VybmVsL2JwZi9idGYuYw0KPj4gQEAgLTQ4 Niw2ICs0ODYsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYnRmX3R5cGVfYnlf aWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCkNCj4+ICAgCXJldHVybiBidGYt PnR5cGVzW3R5cGVfaWRdOw0KPj4gICB9DQo+PiAgIA0KPj4gK2Jvb2wgaXNfYnRmX2Z1bmNfdHlw ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkKQ0KPj4gK3sNCj4+ICsJY29uc3Qg c3RydWN0IGJ0Zl90eXBlICp0eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0eXBlX2lkKTsNCj4+ ICsNCj4+ICsJaWYgKCF0eXBlIHx8IEJURl9JTkZPX0tJTkQodHlwZS0+aW5mbykgIT0gQlRGX0tJ TkRfRlVOQykNCj4+ICsJCXJldHVybiBmYWxzZTsNCj4+ICsJcmV0dXJuIHRydWU7DQo+PiArfQ0K PiBDYW4gYnRmX3R5cGVfaXNfZnVuYygpIChmcm9tIHBhdGNoIDIpIGJlIHJldXNlZD8NCj4gVGhl IGJ0Zl90eXBlX2J5X2lkKCkgY2FuIGJlIGRvbmUgYnkgdGhlIGNhbGxlci4NCj4gSSBkb24ndCB0 aGluayBpdCB3b3J0aHMgdG8gYWRkIGEgc2ltaWxhciBoZWxwZXINCj4gZm9yIGp1c3Qgb25lIHVz ZXIgZm9yIG5vdy4NCg0KQ3VycmVudGx5LCBidGZfdHlwZV9ieV9pZCgpIGlzIG5vdCBleHBvc2Vk Lg0KDQpicGYvYnRmLmM6DQpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpidGZfdHlwZV9i eV9pZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiANCnR5cGVfaWQpDQoNCkRvIHlvdSB3YW50 IHRvIGV4cG9zZSB0aGlzIGZ1bmN0aW9uIGFzIGdsb2JhbCBvbmU/DQpXZSBjYW5ub3QgcHV0IHRo ZSB3aG9sZSBkZWZpbml0aW9uIGluIHRoZSBoZWFkZXIgYXMgaXQgdG91Y2hlcw0KYnRmIGludGVy bmFscy4NCg0KPiANCj4gVGhlICF0eXBlIGNoZWNrIGNhbiBiZSBhZGRlZCB0byBidGZfdHlwZV9p c19mdW5jKCkgaWYNCj4gaXQgaXMgbmVlZGVkLg0KPiANCj4+ICsNCj4+ICAgLyoNCj4+ICAgICog UmVndWxhciBpbnQgaXMgbm90IGEgYml0IGZpZWxkIGFuZCBpdCBtdXN0IGJlIGVpdGhlcg0KPj4g ICAgKiB1OC91MTYvdTMyL3U2NC4NCj4+IEBAIC0yNTc5LDMgKzI1ODgsMTAgQEAgdTMyIGJ0Zl9p ZChjb25zdCBzdHJ1Y3QgYnRmICpidGYpDQo+PiAgIHsNCj4+ICAgCXJldHVybiBidGYtPmlkOw0K Pj4gICB9DQo+PiArDQo+PiArY29uc3QgY2hhciAqYnRmX2dldF9uYW1lX2J5X2lkKGNvbnN0IHN0 cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQpDQo+PiArew0KPj4gKwljb25zdCBzdHJ1Y3QgYnRm X3R5cGUgKnQgPSBidGZfdHlwZV9ieV9pZChidGYsIHR5cGVfaWQpOw0KPj4gKw0KPj4gKwlyZXR1 cm4gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC0+bmFtZV9vZmYpOw0KPj4gK30NCj4+IGRpZmYg LS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jDQo+PiBpbmRleCAz ZjViZjFhZjA4MjYuLmFkZDM4NjZhMTIwZSAxMDA2NDQNCj4+IC0tLSBhL2tlcm5lbC9icGYvY29y ZS5jDQo+PiArKysgYi9rZXJuZWwvYnBmL2NvcmUuYw0KPj4gQEAgLTI3LDYgKzI3LDcgQEANCj4+ ICAgI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPg0KPj4gICAjaW5jbHVkZSA8bGludXgvbW9kdWxl bG9hZGVyLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9icGYuaD4NCj4+ICsjaW5jbHVkZSA8bGlu dXgvYnRmLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9mcmFtZS5oPg0KPj4gICAjaW5jbHVkZSA8 bGludXgvcmJ0cmVlX2xhdGNoLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPg0K Pj4gQEAgLTM4Nyw2ICszODgsNyBAQCBicGZfZ2V0X3Byb2dfYWRkcl9yZWdpb24oY29uc3Qgc3Ry dWN0IGJwZl9wcm9nICpwcm9nLA0KPj4gICBzdGF0aWMgdm9pZCBicGZfZ2V0X3Byb2dfbmFtZShj b25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNoYXIgKnN5bSkNCj4+ICAgew0KPj4gICAJY29u c3QgY2hhciAqZW5kID0gc3ltICsgS1NZTV9OQU1FX0xFTjsNCj4+ICsJY29uc3QgY2hhciAqZnVu Y19uYW1lOw0KPj4gICANCj4+ICAgCUJVSUxEX0JVR19PTihzaXplb2YoImJwZl9wcm9nXyIpICsN Cj4+ICAgCQkgICAgIHNpemVvZihwcm9nLT50YWcpICogMiArDQo+PiBAQCAtNDAxLDYgKzQwMywx MyBAQCBzdGF0aWMgdm9pZCBicGZfZ2V0X3Byb2dfbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cg KnByb2csIGNoYXIgKnN5bSkNCj4+ICAgDQo+PiAgIAlzeW0gKz0gc25wcmludGYoc3ltLCBLU1lN X05BTUVfTEVOLCAiYnBmX3Byb2dfIik7DQo+PiAgIAlzeW0gID0gYmluMmhleChzeW0sIHByb2ct PnRhZywgc2l6ZW9mKHByb2ctPnRhZykpOw0KPj4gKw0KPj4gKwlpZiAocHJvZy0+YXV4LT5idGYp IHsNCj4+ICsJCWZ1bmNfbmFtZSA9IGJ0Zl9nZXRfbmFtZV9ieV9pZChwcm9nLT5hdXgtPmJ0Ziwg cHJvZy0+YXV4LT50eXBlX2lkKTsNCj4+ICsJCXNucHJpbnRmKHN5bSwgKHNpemVfdCkoZW5kIC0g c3ltKSwgIl8lcyIsIGZ1bmNfbmFtZSk7DQo+PiArCQlyZXR1cm47DQo+PiArCX0NCj4+ICsNCj4+ ICAgCWlmIChwcm9nLT5hdXgtPm5hbWVbMF0pDQo+PiAgIAkJc25wcmludGYoc3ltLCAoc2l6ZV90 KShlbmQgLSBzeW0pLCAiXyVzIiwgcHJvZy0+YXV4LT5uYW1lKTsNCj4+ICAgCWVsc2UNCj4+IGRp ZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jDQo+ PiBpbmRleCA0ZjQxNjIzNDI1MWYuLmFhNDY4OGExYTEzNyAxMDA2NDQNCj4+IC0tLSBhL2tlcm5l bC9icGYvc3lzY2FsbC5jDQo+PiArKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYw0KPj4gQEAgLTEx MjAsNiArMTEyMCw3IEBAIHN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0KHN0cnVjdCBicGZfcHJv ZyAqcHJvZywgYm9vbCBkb19pZHJfbG9jaykNCj4+ICAgCQkvKiBicGZfcHJvZ19mcmVlX2lkKCkg bXVzdCBiZSBjYWxsZWQgZmlyc3QgKi8NCj4+ICAgCQlicGZfcHJvZ19mcmVlX2lkKHByb2csIGRv X2lkcl9sb2NrKTsNCj4+ICAgCQlicGZfcHJvZ19rYWxsc3ltc19kZWxfYWxsKHByb2cpOw0KPj4g KwkJYnRmX3B1dChwcm9nLT5hdXgtPmJ0Zik7DQo+PiAgIA0KPj4gICAJCWNhbGxfcmN1KCZwcm9n LT5hdXgtPnJjdSwgX19icGZfcHJvZ19wdXRfcmN1KTsNCj4+ICAgCX0NCj4+IEBAIC0xMzQzLDgg KzEzNDQsNDUgQEAgYnBmX3Byb2dfbG9hZF9jaGVja19hdHRhY2hfdHlwZShlbnVtIGJwZl9wcm9n X3R5cGUgcHJvZ190eXBlLA0KPj4gICAJfQ0KPj4gICB9DQo+PiAgIA0KPj4gK3N0YXRpYyBpbnQg cHJvZ19jaGVja19idGYoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCBzdHJ1Y3Qg YnRmICpidGYsDQo+PiArCQkJICB1bmlvbiBicGZfYXR0ciAqYXR0cikNCj4+ICt7DQo+PiArCXN0 cnVjdCBicGZfZnVuY19pbmZvIF9fdXNlciAqdWluZm8sIGluZm87DQo+PiArCWludCBpLCBuZnVu Y3MsIHVzaXplOw0KPj4gKwl1MzIgcHJldl9vZmZzZXQ7DQo+PiArDQo+PiArCXVzaXplID0gc2l6 ZW9mKHN0cnVjdCBicGZfZnVuY19pbmZvKTsNCj4+ICsJaWYgKGF0dHItPmZ1bmNfaW5mb19sZW4g JSB1c2l6ZSkNCj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwkvKiBmdW5jX2luZm8g c2VjdGlvbiBzaG91bGQgaGF2ZSBpbmNyZWFzaW5nIGFuZCB2YWxpZCBpbnNuX29mZnNldA0KPj4g KwkgKiBhbmQgdHlwZSBzaG91bGQgYmUgQlRGX0tJTkRfRlVOQy4NCj4+ICsJICovDQo+PiArCW5m dW5jcyA9IGF0dHItPmZ1bmNfaW5mb19sZW4gLyB1c2l6ZTsNCj4+ICsJdWluZm8gPSB1NjRfdG9f dXNlcl9wdHIoYXR0ci0+ZnVuY19pbmZvKTsNCj4+ICsJZm9yIChpID0gMDsgaSA8IG5mdW5jczsg aSsrKSB7DQo+PiArCQlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIHVpbmZvLCB1c2l6ZSkpDQo+ PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArDQo+PiArCQlpZiAoIWlzX2J0Zl9mdW5jX3R5cGUo YnRmLCBpbmZvLnR5cGVfaWQpKQ0KPj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPj4gKw0KPj4gKwkJ aWYgKGkgPT0gMCkgew0KPj4gKwkJCWlmIChpbmZvLmluc25fb2Zmc2V0KQ0KPj4gKwkJCQlyZXR1 cm4gLUVJTlZBTDsNCj4+ICsJCQlwcmV2X29mZnNldCA9IDA7DQo+PiArCQl9IGVsc2UgaWYgKGlu Zm8uaW5zbl9vZmZzZXQgPCBwcmV2X29mZnNldCkgew0KPj4gKwkJCXJldHVybiAtRUlOVkFMOw0K Pj4gKwkJfQ0KPj4gKw0KPj4gKwkJcHJldl9vZmZzZXQgPSBpbmZvLmluc25fb2Zmc2V0Ow0KPj4g Kwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICAgLyogbGFzdCBmaWVs ZCBpbiAndW5pb24gYnBmX2F0dHInIHVzZWQgYnkgdGhpcyBjb21tYW5kICovDQo+PiAtI2RlZmlu ZQlCUEZfUFJPR19MT0FEX0xBU1RfRklFTEQgZXhwZWN0ZWRfYXR0YWNoX3R5cGUNCj4+ICsjZGVm aW5lCUJQRl9QUk9HX0xPQURfTEFTVF9GSUVMRCBmdW5jX2luZm8NCj4+ICAgDQo+PiAgIHN0YXRp YyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0cikNCj4+ICAgew0KPj4gQEAg LTE0MzEsNiArMTQ2OSwyNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0 dHIgKmF0dHIpDQo+PiAgIAlpZiAoZXJyKQ0KPj4gICAJCWdvdG8gZnJlZV9wcm9nOw0KPj4gICAN Cj4+ICsJLyogY29weSBmdW5jX2luZm8gYmVmb3JlIHZlcmlmaWVyIHdoaWNoIG1heSBtYWtlDQo+ PiArCSAqIHNvbWUgYWRqdXN0bWVudC4NCj4+ICsJICovDQo+IElzIGl0IGEgbGVmdCBvdmVyIGNv bW1lbnQ/ICBJIGRvbid0IHNlZSB0aGUgaW50ZW50aW9uIG9mDQo+IGNvcHlpbmcgZnVuY19pbmZv IHRvIGF2b2lkIHZlcmlmaWVyIG1vZGlmaWNhdGlvbiBmcm9tIGJlbG93Lg0KPiBJIGNvdWxkIGJl IG1pc3Npbmcgc29tZXRoaW5nLg0KPiANCj4gb3Igc2hvdWxkIHRoZSBjb21tZW50cyBiZSBtb3Zl ZCB0byB0aGUgbmV3ICJjaGVja19idGZfZnVuYygpIiBiZWxvdz8NCj4gDQo+PiArCWlmIChhdHRy LT5mdW5jX2luZm9fbGVuKSB7DQo+PiArCQlzdHJ1Y3QgYnRmICpidGY7DQo+PiArDQo+PiArCQli dGYgPSBidGZfZ2V0X2J5X2ZkKGF0dHItPnByb2dfYnRmX2ZkKTsNCj4+ICsJCWlmIChJU19FUlIo YnRmKSkgew0KPj4gKwkJCWVyciA9IFBUUl9FUlIoYnRmKTsNCj4+ICsJCQlnb3RvIGZyZWVfcHJv ZzsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCWVyciA9IHByb2dfY2hlY2tfYnRmKHByb2csIGJ0Ziwg YXR0cik7DQo+PiArCQlpZiAoZXJyKSB7DQo+PiArCQkJYnRmX3B1dChidGYpOw0KPj4gKwkJCWdv dG8gZnJlZV9wcm9nOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJcHJvZy0+YXV4LT5idGYgPSBidGY7 DQo+PiArCX0NCj4+ICsNCj4+ICAgCS8qIHJ1biBlQlBGIHZlcmlmaWVyICovDQo+PiAgIAllcnIg PSBicGZfY2hlY2soJnByb2csIGF0dHIpOw0KPj4gICAJaWYgKGVyciA8IDApDQo+PiBAQCAtMTQ2 Myw2ICsxNTIyLDcgQEAgc3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICph dHRyKQ0KPj4gICAJYnBmX3Byb2dfa2FsbHN5bXNfZGVsX3N1YnByb2dzKHByb2cpOw0KPj4gICAJ ZnJlZV91c2VkX21hcHMocHJvZy0+YXV4KTsNCj4+ICAgZnJlZV9wcm9nOg0KPj4gKwlidGZfcHV0 KHByb2ctPmF1eC0+YnRmKTsNCj4+ICAgCWJwZl9wcm9nX3VuY2hhcmdlX21lbWxvY2socHJvZyk7 DQo+PiAgIGZyZWVfcHJvZ19zZWM6DQo+PiAgIAlzZWN1cml0eV9icGZfcHJvZ19mcmVlKHByb2ct PmF1eCk7DQo+PiBAQCAtMjEwOCw2ICsyMTY4LDMwIEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfZ2V0 X2luZm9fYnlfZmQoc3RydWN0IGJwZl9wcm9nICpwcm9nLA0KPj4gICAJCX0NCj4+ICAgCX0NCj4+ ICAgDQo+PiArCWlmIChwcm9nLT5hdXgtPmJ0Zikgew0KPj4gKwkJaW5mby5idGZfaWQgPSBidGZf aWQocHJvZy0+YXV4LT5idGYpOw0KPj4gKw0KPj4gKwkJdWxlbiA9IGluZm8ubnJfaml0ZWRfZnVu Y190eXBlczsNCj4+ICsJCWluZm8ubnJfaml0ZWRfZnVuY190eXBlcyA9IHByb2ctPmF1eC0+ZnVu Y19jbnQ7DQo+PiArCQlpZiAoaW5mby5ucl9qaXRlZF9mdW5jX3R5cGVzICYmIHVsZW4pIHsNCj4+ ICsJCQlpZiAoYnBmX2R1bXBfcmF3X29rKCkpIHsNCj4+ICsJCQkJdTMyIF9fdXNlciAqdXNlcl90 eXBlczsNCj4+ICsJCQkJdTMyIGZ1bmNfdHlwZSwgaTsNCj4+ICsNCj4+ICsJCQkJdWxlbiA9IG1p bl90KHUzMiwgaW5mby5ucl9qaXRlZF9mdW5jX3R5cGVzLA0KPj4gKwkJCQkJICAgICB1bGVuKTsN Cj4+ICsJCQkJdXNlcl90eXBlcyA9IHU2NF90b191c2VyX3B0cihpbmZvLmppdGVkX2Z1bmNfdHlw ZXMpOw0KPj4gKwkJCQlmb3IgKGkgPSAwOyBpIDwgdWxlbjsgaSsrKSB7DQo+PiArCQkJCQlmdW5j X3R5cGUgPSBwcm9nLT5hdXgtPmZ1bmNbaV0tPmF1eC0+dHlwZV9pZDsNCj4+ICsJCQkJCWlmIChw dXRfdXNlcihmdW5jX3R5cGUsICZ1c2VyX3R5cGVzW2ldKSkNCj4+ICsJCQkJCQlyZXR1cm4gLUVG QVVMVDsNCj4+ICsJCQkJfQ0KPj4gKwkJCX0gZWxzZSB7DQo+PiArCQkJCWluZm8uaml0ZWRfZnVu Y190eXBlcyA9IDA7DQo+PiArCQkJfQ0KPj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiAgIGRvbmU6 DQo+PiAgIAlpZiAoY29weV90b191c2VyKHVpbmZvLCAmaW5mbywgaW5mb19sZW4pIHx8DQo+PiAg IAkgICAgcHV0X3VzZXIoaW5mb19sZW4sICZ1YXR0ci0+aW5mby5pbmZvX2xlbikpDQo+PiBkaWZm IC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jDQo+ PiBpbmRleCAzZjkzYTU0OGE2NDIuLjk3YzQwOGU4NDMyMiAxMDA2NDQNCj4+IC0tLSBhL2tlcm5l bC9icGYvdmVyaWZpZXIuYw0KPj4gKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jDQo+PiBAQCAt NDU4OSw2ICs0NTg5LDUwIEBAIHN0YXRpYyBpbnQgY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZp ZXJfZW52ICplbnYpDQo+PiAgIAlyZXR1cm4gcmV0Ow0KPj4gICB9DQo+PiAgIA0KPj4gK3N0YXRp YyBpbnQgY2hlY2tfYnRmX2Z1bmMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3Zl cmlmaWVyX2VudiAqZW52LA0KPj4gKwkJCSAgdW5pb24gYnBmX2F0dHIgKmF0dHIpDQo+PiArew0K Pj4gKwlzdHJ1Y3QgYnBmX2Z1bmNfaW5mbyAqZGF0YTsNCj4+ICsJaW50IGksIG5mdW5jcywgcmV0 ID0gMDsNCj4+ICsNCj4+ICsJaWYgKCFhdHRyLT5mdW5jX2luZm9fbGVuKQ0KPj4gKwkJcmV0dXJu IDA7DQo+PiArDQo+PiArCW5mdW5jcyA9IGF0dHItPmZ1bmNfaW5mb19sZW4gLyBzaXplb2Yoc3Ry dWN0IGJwZl9mdW5jX2luZm8pOw0KPj4gKwlpZiAoZW52LT5zdWJwcm9nX2NudCAhPSBuZnVuY3Mp IHsNCj4+ICsJCXZlcmJvc2UoZW52LCAibnVtYmVyIG9mIGZ1bmNzIGluIGZ1bmNfaW5mbyBkb2Vz IG5vdCBtYXRjaCB2ZXJpZmllclxuIik7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0K Pj4gKw0KPj4gKwlkYXRhID0ga3ZtYWxsb2MoYXR0ci0+ZnVuY19pbmZvX2xlbiwgR0ZQX0tFUk5F TCB8IF9fR0ZQX05PV0FSTik7DQo+PiArCWlmICghZGF0YSkgew0KPj4gKwkJdmVyYm9zZShlbnYs ICJubyBtZW1vcnkgdG8gYWxsb2NhdGUgYXR0ciBmdW5jX2luZm9cbiIpOw0KPj4gKwkJcmV0dXJu IC1FTk9NRU07DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHU2 NF90b191c2VyX3B0cihhdHRyLT5mdW5jX2luZm8pLA0KPj4gKwkJCSAgIGF0dHItPmZ1bmNfaW5m b19sZW4pKSB7DQo+PiArCQl2ZXJib3NlKGVudiwgIm1lbW9yeSBjb3B5IGVycm9yIGZvciBhdHRy IGZ1bmNfaW5mb1xuIik7DQo+PiArCQlyZXQgPSAtRUZBVUxUOw0KPj4gKwkJZ290byBjbGVhbnVw Ow0KPj4gKwkJfQ0KPiBFeHRyYSBpbmRlbnRhdGlvbi4NCj4gDQo+PiArDQo+PiArCWZvciAoaSA9 IDA7IGkgPCBuZnVuY3M7IGkrKykgew0KPj4gKwkJaWYgKGVudi0+c3VicHJvZ19pbmZvW2ldLnN0 YXJ0ICE9IGRhdGFbaV0uaW5zbl9vZmZzZXQpIHsNCj4+ICsJCQl2ZXJib3NlKGVudiwgImZ1bmNf aW5mbyBzdWJwcm9nIHN0YXJ0ICglZCkgZG9lcyBub3QgbWF0Y2ggdmVyaWZpZXIgKCVkKVxuIiwN Cj4+ICsJCQkJZW52LT5zdWJwcm9nX2luZm9baV0uc3RhcnQsIGRhdGFbaV0uaW5zbl9vZmZzZXQp Ow0KPiBUaGUgcHJpbnRpbmcgYXJncyBhcmUgc3dhcHBlZD8gZW52LT5zdWJwcm9nX2luZm9baV0u c3RhcnQgc2hvdWxkDQo+IGdvIHRvIHRoZSAidmVyaWZpZXIgKCVkKSI/DQo+IA0KPiBhbmQgcy8l ZC8ldS8NCj4gDQo+PiArCQkJcmV0ID0gLUVJTlZBTDsNCj4+ICsJCQlnb3RvIGNsZWFudXA7DQo+ PiArCQl9DQo+PiArCQllbnYtPnN1YnByb2dfaW5mb1tpXS50eXBlX2lkID0gZGF0YVtpXS50eXBl X2lkOw0KPj4gKwl9DQo+PiArDQo+PiArCXByb2ctPmF1eC0+dHlwZV9pZCA9IGRhdGFbMF0udHlw ZV9pZDsNCj4+ICtjbGVhbnVwOg0KPj4gKwlrdmZyZWUoZGF0YSk7DQo+PiArCXJldHVybiByZXQ7 DQo+PiArfQ0KPj4gKw0KPj4gICAvKiBjaGVjayAlY3VyJ3MgcmFuZ2Ugc2F0aXNmaWVzICVvbGQn cyAqLw0KPj4gICBzdGF0aWMgYm9vbCByYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZWdfc3RhdGUg Km9sZCwNCj4+ICAgCQkJIHN0cnVjdCBicGZfcmVnX3N0YXRlICpjdXIpDQo+PiBAQCAtNTg3Myw2 ICs1OTE3LDggQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9l bnYgKmVudikNCj4+ICAgCQlmdW5jW2ldLT5hdXgtPm5hbWVbMF0gPSAnRic7DQo+PiAgIAkJZnVu Y1tpXS0+YXV4LT5zdGFja19kZXB0aCA9IGVudi0+c3VicHJvZ19pbmZvW2ldLnN0YWNrX2RlcHRo Ow0KPj4gICAJCWZ1bmNbaV0tPmppdF9yZXF1ZXN0ZWQgPSAxOw0KPj4gKwkJZnVuY1tpXS0+YXV4 LT5idGYgPSBwcm9nLT5hdXgtPmJ0ZjsNCj4+ICsJCWZ1bmNbaV0tPmF1eC0+dHlwZV9pZCA9IGVu di0+c3VicHJvZ19pbmZvW2ldLnR5cGVfaWQ7DQo+PiAgIAkJZnVuY1tpXSA9IGJwZl9pbnRfaml0 X2NvbXBpbGUoZnVuY1tpXSk7DQo+PiAgIAkJaWYgKCFmdW5jW2ldLT5qaXRlZCkgew0KPj4gICAJ CQllcnIgPSAtRU5PVFNVUFA7DQo+PiBAQCAtNjMwNyw2ICs2MzUzLDEwIEBAIGludCBicGZfY2hl Y2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIpDQo+PiAgIAlp ZiAocmV0IDwgMCkNCj4+ICAgCQlnb3RvIHNraXBfZnVsbF9jaGVjazsNCj4+ICAgDQo+PiArCXJl dCA9IGNoZWNrX2J0Zl9mdW5jKGVudi0+cHJvZywgZW52LCBhdHRyKTsNCj4+ICsJaWYgKHJldCA8 IDApDQo+PiArCQlnb3RvIHNraXBfZnVsbF9jaGVjazsNCj4+ICsNCj4+ICAgCXJldCA9IGRvX2No ZWNrKGVudik7DQo+PiAgIAlpZiAoZW52LT5jdXJfc3RhdGUpIHsNCj4+ICAgCQlmcmVlX3Zlcmlm aWVyX3N0YXRlKGVudi0+Y3VyX3N0YXRlLCB0cnVlKTsNCj4+IC0tIA0KPj4gMi4xNy4xDQo+Pg0K