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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 4F3ADC43381 for ; Tue, 19 Feb 2019 19:42:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0BED02146F for ; Tue, 19 Feb 2019 19:42:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726225AbfBSTm4 (ORCPT ); Tue, 19 Feb 2019 14:42:56 -0500 Received: from mga05.intel.com ([192.55.52.43]:51286 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725963AbfBSTm4 (ORCPT ); Tue, 19 Feb 2019 14:42:56 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Feb 2019 11:42:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,388,1544515200"; d="scan'208";a="139914269" Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8]) by orsmga001.jf.intel.com with ESMTP; 19 Feb 2019 11:42:55 -0800 Received: from orsmsx152.amr.corp.intel.com (10.22.226.39) by ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 19 Feb 2019 11:42:54 -0800 Received: from orsmsx112.amr.corp.intel.com ([169.254.3.70]) by ORSMSX152.amr.corp.intel.com ([169.254.8.92]) with mapi id 14.03.0415.000; Tue, 19 Feb 2019 11:42:54 -0800 From: "Edgecombe, Rick P" To: "ard.biesheuvel@linaro.org" , "bp@alien8.de" , "will.deacon@arm.com" CC: "linux-kernel@vger.kernel.org" , "peterz@infradead.org" , "linux-integrity@vger.kernel.org" , "Dock, Deneen T" , "tglx@linutronix.de" , "linux-mm@kvack.org" , "dave.hansen@linux.intel.com" , "nadav.amit@gmail.com" , "linux-security-module@vger.kernel.org" , "x86@kernel.org" , "akpm@linux-foundation.org" , "hpa@zytor.com" , "kristen@linux.intel.com" , "mingo@redhat.com" , "linux_dti@icloud.com" , "luto@kernel.org" , "kernel-hardening@lists.openwall.com" Subject: Re: [PATCH v2 15/20] vmalloc: New flags for safe vfree on special perms Thread-Topic: [PATCH v2 15/20] vmalloc: New flags for safe vfree on special perms Thread-Index: AQHUt2sVIDeraVIrikW4LTMW3ui3JqXnujWAgABzsYA= Date: Tue, 19 Feb 2019 19:42:53 +0000 Message-ID: References: <20190129003422.9328-1-rick.p.edgecombe@intel.com> <20190129003422.9328-16-rick.p.edgecombe@intel.com> <20190219124853.GB19514@zn.tnic> In-Reply-To: <20190219124853.GB19514@zn.tnic> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.54.75.11] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: VGhhbmtzIEJvcmlzLg0KDQpBcmQsIFdpbGw6IEFuIGFybSBxdWVzdGlvbiBjYW1lIHVwIGJlbG93 LiBBbnkgdGhvdWdodHM/DQoNCk9uIFR1ZSwgMjAxOS0wMi0xOSBhdCAxMzo0OCArMDEwMCwgQm9y aXNsYXYgUGV0a292IHdyb3RlOg0KPiBPbiBNb24sIEphbiAyOCwgMjAxOSBhdCAwNDozNDoxN1BN IC0wODAwLCBSaWNrIEVkZ2Vjb21iZSB3cm90ZToNCj4gPiBUaGlzIGFkZHMgYSBuZXcgZmxhZ3Mg Vk1fSEFTX1NQRUNJQUxfUEVSTVMsIGZvciBlbmFibGluZyB2ZnJlZSBvcGVyYXRpb25zDQo+IA0K PiBzL1RoaXMgYWRkcy9hZGQvIC0geW91IGdldCB0aGUgaWRlYS4gOikNClllcywgdGhhbmtzLiBG aXhlZCBhZnRlciB5b3VyIGNvbW1lbnRzIG9uIG90aGVyIHBhdGNoZXMuDQoNCj4gcy9mbGFncy9m bGFnLw0KPiANCj4gPiB0byBpbW1lZGlhdGVseSBjbGVhciBleGVjdXRhYmxlIFRMQiBlbnRyaWVz IHRvIGZyZWVkIHBhZ2VzLCBhbmQgaGFuZGxlDQo+ID4gZnJlZWluZyBtZW1vcnkgd2l0aCBzcGVj aWFsIHBlcm1pc3Npb25zLiBJdCBhbHNvIHRha2VzIGNhcmUgb2YgcmVzZXR0aW5nDQo+ID4gdGhl IGRpcmVjdCBtYXAgcGVybWlzc2lvbnMgZm9yIHRoZSBwYWdlcyBiZWluZyB1bm1hcHBlZC4gU28g dGhpcyBmbGFnIGlzDQo+ID4gdXNlZnVsIGZvciBhbnkga2luZCBvZiBtZW1vcnkgd2l0aCBlbGV2 YXRlZCBwZXJtaXNzaW9ucywgb3Igd2hlcmUgdGhlcmUgY2FuDQo+ID4gYmUgcmVsYXRlZCBwZXJt aXNzaW9ucyBjaGFuZ2VzIG9uIHRoZSBkaXJlY3RtYXAuIFRvZGF5IHRoaXMgaXMgUk8rWCBhbmQg Uk8NCj4gPiBtZW1vcnkuDQo+ID4gDQo+ID4gQWx0aG91Z2ggdGhpcyBlbmFibGVzIGRpcmVjdGx5 IHZmcmVlaW5nIFJPIG1lbW9yeSBub3csIFJPIG1lbW9yeSBjYW5ub3QgYmUNCj4gPiBmcmVlZCBp biBhbiBpbnRlcnJ1cHQgYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBpdHNlbGYgaXMgdXNlZCBhcyBh IG5vZGUgb24NCj4gPiBkZWZlcnJlZCBmcmVlIGxpc3QuIFNvIHdoZW4gUk8gbWVtb3J5IG5lZWRz IHRvIGJlIGZyZWVkIGluIGFuIGludGVycnVwdA0KPiA+IHRoZSBjb2RlIGRvaW5nIHRoZSB2ZnJl ZSBuZWVkcyB0byBoYXZlIGl0cyBvd24gd29yayBxdWV1ZSwgYXMgd2FzIHRoZSBjYXNlDQo+ID4g YmVmb3JlIHRoZSBkZWZlcnJlZCB2ZnJlZSBsaXN0IGhhbmRsaW5nIHdhcyBhZGRlZC4gVG9kYXkg dGhlcmUgaXMgb25seSBvbmUNCj4gPiBjYXNlIHdoZXJlIHRoaXMgaGFwcGVucy4NCj4gPiANCj4g PiBGb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIHNldF9hbGlhc18gaW1wbGVtZW50YXRpb25zIHRoaXMg d2hvbGUgb3BlcmF0aW9uDQo+ID4gY2FuIGJlIGRvbmUgd2l0aCBvbmUgVExCIGZsdXNoIHdoZW4g Y2VudHJhbGl6ZWQgbGlrZSB0aGlzLiBGb3Igb3RoZXJzIHdpdGgNCj4gPiBkaXJlY3RtYXAgcGVy bWlzc2lvbnMsIGN1cnJlbnRseSBvbmx5IGFybTY0LCBhIGJhY2t1cCBtZXRob2QgdXNpbmcNCj4g PiBzZXRfbWVtb3J5IGZ1bmN0aW9ucyBpcyB1c2VkIHRvIHJlc2V0IHRoZSBkaXJlY3RtYXAuIFdo ZW4gYXJtNjQgYWRkcw0KPiA+IHNldF9hbGlhc18gZnVuY3Rpb25zLCB0aGlzIGJhY2t1cCBjYW4g YmUgcmVtb3ZlZC4NCj4gPiANCj4gPiBXaGVuIHRoZSBUTEIgaXMgZmx1c2hlZCB0byBib3RoIHJl bW92ZSBUTEIgZW50cmllcyBmb3IgdGhlIHZtYWxsb2MgcmFuZ2UNCj4gPiBtYXBwaW5nIGFuZCB0 aGUgZGlyZWN0IG1hcCBwZXJtaXNzaW9ucywgdGhlIGxhenkgcHVyZ2Ugb3BlcmF0aW9uIGNvdWxk IGJlDQo+ID4gZG9uZSB0byB0cnkgdG8gc2F2ZSBhIFRMQiBmbHVzaCBsYXRlci4gSG93ZXZlciB0 b2RheSB2bV91bm1hcF9hbGlhc2VzDQo+ID4gY291bGQgZmx1c2ggYSBUTEIgcmFuZ2UgdGhhdCBk b2VzIG5vdCBpbmNsdWRlIHRoZSBkaXJlY3RtYXAuIFNvIGEgaGVscGVyDQo+ID4gaXMgYWRkZWQg d2l0aCBleHRyYSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGFsbG93IGJvdGggdGhlIHZtYWxsb2MgYWRk cmVzcyBhbmQNCj4gPiB0aGUgZGlyZWN0IG1hcHBpbmcgdG8gYmUgZmx1c2hlZCBkdXJpbmcgdGhp cyBvcGVyYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUNCj4gPiBub3JtYWwgdm1fdW5tYXBfYWxp YXNlcyBmdW5jdGlvbiBpcyB1bmNoYW5nZWQuDQo+ID4gDQo+ID4gU3VnZ2VzdGVkLWJ5OiBEYXZl IEhhbnNlbiA8ZGF2ZS5oYW5zZW5AaW50ZWwuY29tPg0KPiA+IFN1Z2dlc3RlZC1ieTogQW5keSBM dXRvbWlyc2tpIDxsdXRvQGtlcm5lbC5vcmc+DQo+ID4gU3VnZ2VzdGVkLWJ5OiBXaWxsIERlYWNv biA8d2lsbC5kZWFjb25AYXJtLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBSaWNrIEVkZ2Vjb21i ZSA8cmljay5wLmVkZ2Vjb21iZUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGluY2x1ZGUvbGlu dXgvdm1hbGxvYy5oIHwgIDEzICsrKysrDQo+ID4gIG1tL3ZtYWxsb2MuYyAgICAgICAgICAgIHwg MTIyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0NCj4gPiAgMiBmaWxl cyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pDQo+ID4gDQo+ID4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFs bG9jLmgNCj4gPiBpbmRleCAzOThlOWM5NWNkNjEuLjlmNjQzZjkxNzM2MCAxMDA2NDQNCj4gPiAt LS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvdm1h bGxvYy5oDQo+ID4gQEAgLTIxLDYgKzIxLDExIEBAIHN0cnVjdCBub3RpZmllcl9ibG9jazsJCS8q IGluIG5vdGlmaWVyLmggKi8NCj4gPiAgI2RlZmluZSBWTV9VTklOSVRJQUxJWkVECTB4MDAwMDAw MjAJLyogdm1fc3RydWN0IGlzIG5vdCBmdWxseQ0KPiA+IGluaXRpYWxpemVkICovDQo+ID4gICNk ZWZpbmUgVk1fTk9fR1VBUkQJCTB4MDAwMDAwNDAgICAgICAvKiBkb24ndCBhZGQgZ3VhcmQgcGFn ZQ0KPiA+ICovDQo+ID4gICNkZWZpbmUgVk1fS0FTQU4JCTB4MDAwMDAwODAgICAgICAvKiBoYXMg YWxsb2NhdGVkIGthc2FuIHNoYWRvdw0KPiA+IG1lbW9yeSAqLw0KPiA+ICsvKg0KPiA+ICsgKiBN ZW1vcnkgd2l0aCBWTV9IQVNfU1BFQ0lBTF9QRVJNUyBjYW5ub3QgYmUgZnJlZWQgaW4gYW4gaW50 ZXJydXB0IG9yIHdpdGgNCj4gPiArICogdmZyZWVfYXRvbWljLg0KPiANCj4gUGxlYXNlIGVuZCBm dW5jdGlvbiBuYW1lcyB3aXRoIHBhcmVudGhlc2VzLiBZb3Ugc2hvdWxkIGdvIG92ZXIgdGhlIHdo b2xlDQo+IHBhdGNoc2V0IC0gdGhlcmUgYXJlIGEgYnVuY2ggb2YgcGxhY2VzLg0KT2suDQoNCj4g PiArICovDQo+ID4gKyNkZWZpbmUgVk1fSEFTX1NQRUNJQUxfUEVSTVMJMHgwMDAwMDIwMCAgICAg IC8qIFJlc2V0IGRpcmVjdG1hcCBhbmQNCj4gPiBmbHVzaCBUTEIgb24gdW5tYXAgKi8NCj4gDQo+ IEFmdGVyIDB4MDAwMDAwODAgY29tZXMgMHgwMDAwMDEwMC4gMHgwMDAwMDAxMCBpcyBmcmVlIHRv by4gV2hhdCdzIHVwPw0KSSB3YXMganVzdCB0cnlpbmcgdG8gZm9sbG93IHRoZSBwYXR0ZXJuIG5v dGljZWQgZnJvbSB0aGUgZ2FwIGF0IDB4MDAwMDAwMTAuIEknbGwNCmFkZCBpdCBhdCAweDAwMDAw MTAwIGluIGNhc2UgdGhlcmUgaXMgc29tZSByZWFzb24gZm9yIHRoZSBvdGhlciBnYXAuDQoNCj4g PiAgLyogYml0cyBbMjAuLjMyXSByZXNlcnZlZCBmb3IgYXJjaCBzcGVjaWZpYyBpb3JlbWFwIGlu dGVybmFscyAqLw0KPiA+ICANCj4gPiAgLyoNCj4gPiBAQCAtMTM1LDYgKzE0MCwxNCBAQCBleHRl cm4gc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQNCj4gPiBs b25nIHNpemUsDQo+ID4gIGV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShj b25zdCB2b2lkICphZGRyKTsNCj4gPiAgZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1f YXJlYShjb25zdCB2b2lkICphZGRyKTsNCj4gPiAgDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBz ZXRfdm1fc3BlY2lhbCh2b2lkICphZGRyKQ0KPiANCj4gWW91IG5lZWQgYSBkaWZmZXJlbnQgbmFt ZSB0aGFuICJzcGVjaWFsIiBmb3IgYSB2bSB3aGljaCBuZWVkcyB0byBmbHVzaA0KPiBhbmQgY2xl YXIgbWFwcGluZyBwZXJtcyBvbiByZW1vdmFsLiBWTV9SRVNFVF9QRVJNUyBvciB3aGF0ZXZlciBp cyBtb3JlDQo+IHRvIHRoZSBwb2ludCB0aGFuICJzcGVjaWFsIiwgZm9yIGV4YW1wbGUsIHdoaWNo IGNvdWxkIG1lYW4gYSBsb3Qgb2YNCj4gdGhpbmdzLg0KSSBkb24ndCBoYXZlIGEgc3Ryb25nIG9w aW5pb24gYWJvdXQgdGhlIG5hbWUsIGJ1dCBpdCBoYXMgZ29uZSB0aHJvdWdoIHNvbWUNCnJldmlz aW9ucywgc28gSSdsbCBzdW1tYXJpemUgdGhlIGhpc3RvcnkuDQoNClRoZXJlIGFyZSB0d28gaW50 ZW50aW9ucyAtIG5vdCBsZWF2aW5nIGEgc3RhbGUgVExCIGVudHJ5IHRvIGEgZnJlZWQgcGFnZSwg YW5kDQp0aGVuIHJlc2V0dGluZyB0aGUgZGlyZWN0IG1hcCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0 IG5lZWQgaXQuIEFuZHkgaGFkIHBvaW50ZWQNCm91dCB0aGF0IHlvdSBjYW4gZG8gdGhpcyB3aXRo IG9ubHkgb25lIFRMQiBmbHVzaCBpZiBhbGwgdGhlIGNsZWFudXAgaXMNCmNlbnRyYWxpemVkIGhl cmUuIFRoZSBvcmlnaW5hbCBwb2ludCBvZiB0aGlzIGZsYWcgd2FzIHRoZSBUTEIgZmx1c2ggb2Yg dGhlDQp2bWFsbG9jIGFsaWFzLCBhbmQgaXQncyBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBm b3IgYWxsIGFyY2hpdGVjdHVyZXMgdGhhdA0KaGF2ZSBzb21ldGhpbmcgbGlrZSBOWCwgcmVnYXJk bGVzcyBvZiB3aGF0IHRoZXkgYXJlIGRvaW5nIHdpdGggdGhlaXIgZGlyZWN0IG1hcC4NCg0KQXQg b25lIHBvaW50IHRoZXJlIHdlcmUgdHdvIGZsYWdzLCBvbmUgZm9yICJpbW1lZGlhdGUgZmx1c2gi IGFuZCBvbmUgZm9yICJyZXNldA0KZGlyZWN0IG1hcCIsIGJ1dCBBbmR5IGhhZCBhbHNvIHBvaW50 ZWQgb3V0IHRoYXQgeW91IHdvdWxkIG1vc3RseSB1c2UgdGhlbQ0KdG9nZXRoZXIsIHNvIHdoeSBj b21wbGljYXRlIHRoaW5ncy4NCg0KU28gdG8gY2FwdHVyZSBib3RoIG9mIHRob3NlIGludGVudGlv bnMsIG1heWJlIEknbGwgc2xpZ2h0bHkgdHdlYWsgeW91cg0Kc3VnZ2VzdGlvbiB0byBWTV9GTFVT SF9SRVNFVF9QRVJNUz8NCg0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgdm1fc3RydWN0ICp2bSA9IGZp bmRfdm1fYXJlYShhZGRyKTsNCj4gPiArDQo+ID4gKwlpZiAodm0pDQo+ID4gKwkJdm0tPmZsYWdz IHw9IFZNX0hBU19TUEVDSUFMX1BFUk1TOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBleHRlcm4gaW50 IG1hcF92bV9hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIHBncHJvdF90IHByb3QsDQo+ID4g IAkJCXN0cnVjdCBwYWdlICoqcGFnZXMpOw0KPiA+ICAjaWZkZWYgQ09ORklHX01NVQ0KPiA+IGRp ZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMNCj4gPiBpbmRleCA4NzFlNDFj NTVlMjMuLmQ0NTliNWI5NjQ5YiAxMDA2NDQNCj4gPiAtLS0gYS9tbS92bWFsbG9jLmMNCj4gPiAr KysgYi9tbS92bWFsbG9jLmMNCj4gPiBAQCAtMTgsNiArMTgsNyBAQA0KPiA+ICAjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+DQo+ID4g ICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2V0X21l bW9yeS5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+DQo+ID4gICNpbmNs dWRlIDxsaW51eC9rYWxsc3ltcy5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KPiA+ IEBAIC0xMDU1LDI0ICsxMDU2LDExIEBAIHN0YXRpYyB2b2lkIHZiX2ZyZWUoY29uc3Qgdm9pZCAq YWRkciwgdW5zaWduZWQgbG9uZw0KPiA+IHNpemUpDQo+ID4gIAkJc3Bpbl91bmxvY2soJnZiLT5s b2NrKTsNCj4gPiAgfQ0KPiA+ICANCj4gPiAtLyoqDQo+ID4gLSAqIHZtX3VubWFwX2FsaWFzZXMg LSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXINCj4gPiAt ICoNCj4gPiAtICogVGhlIHZtYXAvdm1hbGxvYyBsYXllciBsYXppbHkgZmx1c2hlcyBrZXJuZWwg dmlydHVhbCBtYXBwaW5ncyBwcmltYXJpbHkNCj4gPiAtICogdG8gYW1vcnRpemUgVExCIGZsdXNo aW5nIG92ZXJoZWFkcy4gV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgYW55IHBhZ2UgeW91DQo+ID4g LSAqIGhhdmUgbm93LCBtYXksIGluIGEgZm9ybWVyIGxpZmUsIGhhdmUgYmVlbiBtYXBwZWQgaW50 byBrZXJuZWwgdmlydHVhbA0KPiA+IC0gKiBhZGRyZXNzIGJ5IHRoZSB2bWFwIGxheWVyIGFuZCBz byB0aGVyZSBtaWdodCBiZSBzb21lIENQVXMgd2l0aCBUTEINCj4gPiBlbnRyaWVzDQo+ID4gLSAq IHN0aWxsIHJlZmVyZW5jaW5nIHRoYXQgcGFnZSAoYWRkaXRpb25hbCB0byB0aGUgcmVndWxhciAx OjEga2VybmVsDQo+ID4gbWFwcGluZykuDQo+ID4gLSAqDQo+ID4gLSAqIHZtX3VubWFwX2FsaWFz ZXMgZmx1c2hlcyBhbGwgc3VjaCBsYXp5IG1hcHBpbmdzLiBBZnRlciBpdCByZXR1cm5zLCB3ZQ0K PiA+IGNhbg0KPiA+IC0gKiBiZSBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgcGFnZXMgd2UgaGF2ZSBj b250cm9sIG92ZXIgd2lsbCBoYXZlIGFueQ0KPiA+IGFsaWFzZXMNCj4gPiAtICogZnJvbSB0aGUg dm1hcCBsYXllci4NCj4gPiAtICovDQo+ID4gLXZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2b2lkKQ0K PiA+ICtzdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1 bnNpZ25lZCBsb25nIGVuZCwNCj4gPiArCQkJCWludCBtdXN0X2ZsdXNoKQ0KPiANCj4gQWxpZ24g YXJndW1lbnRzIG9uIHRoZSBvcGVuaW5nIGJyYWNlLiBUaGVyZSdzIG1vcmUgcGxhY2VzIGJlbG93 LCBwbHMgZml4DQo+IHRoZW0gYWxsLg0KT2suDQoNCj4gPiAgew0KPiA+IC0JdW5zaWduZWQgbG9u ZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsNCj4gPiAgCWludCBjcHU7DQo+ID4gLQlpbnQg Zmx1c2ggPSAwOw0KPiA+ICsJaW50IGZsdXNoID0gbXVzdF9mbHVzaDsNCj4gDQo+IFlvdSBjYW4n dCB1c2UgbXVzdF9mbHVzaCBkaXJlY3RseSBiZWNhdXNlLi4uPw0KPiANCj4gZ2NjIHByb2R1Y2Vz IHRoZSBzYW1lIGFzbSBoZXJlLCB3aXRoIG9yIHdpdGhvdXQgdGhlIGxvY2FsICJmbHVzaCIgdmFy Lg0KSSBoYWQgdGhvdWdodCBpdCB3YXMgZWFzaWVyIHRvIHJlYWQuIElmIGl0cyBub3QgdGhlIGNh c2UsIEknbGwgY2hhbmdlIGl0IGFzIHlvdQ0Kc3VnZ2VzdC4NCg0KPiA+ICANCj4gPiAgCWlmICh1 bmxpa2VseSghdm1hcF9pbml0aWFsaXplZCkpDQo+ID4gIAkJcmV0dXJuOw0KPiA+IEBAIC0xMTA5 LDYgKzEwOTcsMjcgQEAgdm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpDQo+ID4gIAkJZmx1c2hf dGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsNCj4gPiAgCW11dGV4X3VubG9jaygmdm1hcF9w dXJnZV9sb2NrKTsNCj4gPiAgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHZtX3VubWFwX2Fs aWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXIN Cj4gPiArICoNCj4gPiArICogVGhlIHZtYXAvdm1hbGxvYyBsYXllciBsYXppbHkgZmx1c2hlcyBr ZXJuZWwgdmlydHVhbCBtYXBwaW5ncyBwcmltYXJpbHkNCj4gPiArICogdG8gYW1vcnRpemUgVExC IGZsdXNoaW5nIG92ZXJoZWFkcy4gV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgYW55IHBhZ2UgeW91 DQo+ID4gKyAqIGhhdmUgbm93LCBtYXksIGluIGEgZm9ybWVyIGxpZmUsIGhhdmUgYmVlbiBtYXBw ZWQgaW50byBrZXJuZWwgdmlydHVhbA0KPiA+ICsgKiBhZGRyZXNzIGJ5IHRoZSB2bWFwIGxheWVy IGFuZCBzbyB0aGVyZSBtaWdodCBiZSBzb21lIENQVXMgd2l0aCBUTEINCj4gPiBlbnRyaWVzDQo+ ID4gKyAqIHN0aWxsIHJlZmVyZW5jaW5nIHRoYXQgcGFnZSAoYWRkaXRpb25hbCB0byB0aGUgcmVn dWxhciAxOjEga2VybmVsDQo+ID4gbWFwcGluZykuDQo+ID4gKyAqDQo+ID4gKyAqIHZtX3VubWFw X2FsaWFzZXMgZmx1c2hlcyBhbGwgc3VjaCBsYXp5IG1hcHBpbmdzLiBBZnRlciBpdCByZXR1cm5z LCB3ZQ0KPiA+IGNhbg0KPiA+ICsgKiBiZSBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgcGFnZXMgd2Ug aGF2ZSBjb250cm9sIG92ZXIgd2lsbCBoYXZlIGFueQ0KPiA+IGFsaWFzZXMNCj4gPiArICogZnJv bSB0aGUgdm1hcCBsYXllci4NCj4gPiArICovDQo+ID4gK3ZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2 b2lkKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gVUxPTkdfTUFYLCBlbmQg PSAwOw0KPiA+ICsJaW50IG11c3RfZmx1c2ggPSAwOw0KPiA+ICsNCj4gPiArCV92bV91bm1hcF9h bGlhc2VzKHN0YXJ0LCBlbmQsIG11c3RfZmx1c2gpOw0KPiA+ICt9DQo+ID4gIEVYUE9SVF9TWU1C T0xfR1BMKHZtX3VubWFwX2FsaWFzZXMpOw0KPiA+ICANCj4gPiAgLyoqDQo+ID4gQEAgLTE0OTQs NiArMTUwMyw3OSBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lk ICphZGRyKQ0KPiA+ICAJcmV0dXJuIE5VTEw7DQo+ID4gIH0NCj4gPiAgDQo+ID4gK3N0YXRpYyBp bmxpbmUgdm9pZCBzZXRfYXJlYV9hbGlhcyhjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLA0K PiA+ICsJCQlpbnQgKCpzZXRfYWxpYXMpKHN0cnVjdCBwYWdlICpwYWdlKSkNCj4gPiArew0KPiA+ ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGFyZWEtPm5yX3BhZ2VzOyBp KyspIHsNCj4gPiArCQl1bnNpZ25lZCBsb25nIGFkZHIgPQ0KPiA+ICsJCQkodW5zaWduZWQgbG9u ZylwYWdlX2FkZHJlc3MoYXJlYS0+cGFnZXNbaV0pOw0KPiA+ICsNCj4gPiArCQlpZiAoYWRkcikN Cj4gPiArCQkJc2V0X2FsaWFzKGFyZWEtPnBhZ2VzW2ldKTsNCj4gDQo+IFdoYXQncyB3cm9uZyB3 aXRoIHNpbXBseToNCj4gDQo+ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZWEtPm5yX3BhZ2Vz OyBpKyspIHsNCj4gICAgICAgICAgICAgICAgIGlmIChwYWdlX2FkZHJlc3MoYXJlYS0+cGFnZXNb aV0pKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYWxpYXMoYXJlYS0+cGFnZXNbaV0p Ow0KPiAgICAgICAgIH0NCj4gDQo+ID8NClllcywgSSBzZWUgdGhhdCdzIGJldHRlci4NCg0KSSB0 aGluayBhdCBvbmUgcG9pbnQgSSBoYWQgcGxheWVkIHdpdGggaGF2aW5nIHRoZSBzZXRfYWxpYXMo KSdzIHRha2UgYW4gdW5zaWduZWQNCmxvbmcgYWRkcmVzcywgYW5kIHNvIHRoZSBhZGRyZXNzIHdh cyB1c2VkIHR3aWNlIGFuZCB3YXMgd29ydGggYXNzaWduaW5nIHRvDQpzb21ldGhpbmcsIHNvIHRo aXMgc2hvdWxkIGJlIGZpeGVkLiBUaGFua3MuDQoNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4g PiArLyogVGhpcyBoYW5kbGVzIHJlbW92aW5nIGFuZCByZXNldHRpbmcgdm0gbWFwcGluZ3MgcmVs YXRlZCB0byB0aGUNCj4gPiB2bV9zdHJ1Y3QuICovDQo+IA0KPiBzL1RoaXMgaGFuZGxlcy9IYW5k bGUvDQo+IA0KPiA+ICtzdGF0aWMgdm9pZCB2bV9yZW1vdmVfbWFwcGluZ3Moc3RydWN0IHZtX3N0 cnVjdCAqYXJlYSwgaW50DQo+ID4gZGVhbGxvY2F0ZV9wYWdlcykNCj4gPiArew0KPiA+ICsJdW5z aWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsNCj4gPiArCXVuc2ln bmVkIGxvbmcgc3RhcnQgPSBVTE9OR19NQVgsIGVuZCA9IDA7DQo+ID4gKwlpbnQgc3BlY2lhbCA9 IGFyZWEtPmZsYWdzICYgVk1fSEFTX1NQRUNJQUxfUEVSTVM7DQo+ID4gKwlpbnQgaTsNCj4gPiAr DQo+ID4gKwkvKg0KPiA+ICsJICogVGhlIGJlbG93IGJsb2NrIGNhbiBiZSByZW1vdmVkIHdoZW4g YWxsIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlDQo+ID4gKwkgKiBkaXJlY3QgbWFwIHBlcm1pc3Np b25zIGFsc28gaGF2ZSBzZXRfYWxpYXNfIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcw0KPiA+ICsJ ICogdG8gZG8gcmVzZXR0aW5nIG9uIHRoZSBkaXJlY3RtYXAgZm9yIGFueSBzcGVjaWFsIHBlcm1p c3Npb25zICh0b2RheQ0KPiA+ICsJICogb25seSBYKSwgd2l0aG91dCBsZWF2aW5nIGEgUlcrWCB3 aW5kb3cuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChzcGVjaWFsICYmICFJU19FTkFCTEVEKENPTkZJ R19BUkNIX0hBU19TRVRfQUxJQVMpKSB7DQo+ID4gKwkJc2V0X21lbW9yeV9ueChhZGRyLCBhcmVh LT5ucl9wYWdlcyk7DQo+ID4gKwkJc2V0X21lbW9yeV9ydyhhZGRyLCBhcmVhLT5ucl9wYWdlcyk7 DQo+IA0KPiBUaGF0J3MgdHdvIG5vdCB2ZXJ5IGNoZWFwIGNhbGxzIHRvIHRoZSB1bmRlcmx5aW5n IHdvcmtlciBmdW5jdGlvbiwgZm9yDQo+IGV4YW1wbGUgY2hhbmdlX21lbW9yeV9jb21tb24oKSBv biBBUk02NCwgaW5zdGVhZCBvZiBjYWxsaW5nIGl0IG9uY2Ugd2l0aA0KPiB0aGUgcmVzcGVjdGl2 ZSBmbGFncy4gWW91IGFsbHVkZSB0byB0aGF0IGluIHRoZSBjb21taXQgbWVzc2FnZSBidXQgeW91 DQo+IG1pZ2h0IHdhbm5hIHJ1biBpdCBieSBBUk0gZm9sa3MgZmlyc3QuDQpUaGVzZSBjYWxscyBh cmUgYmFzaWNhbGx5IGdldHRpbmcgbW92ZWQgdG8gYmUgY2VudHJhbGl6ZWQgaGVyZSBmcm9tIG90 aGVyDQpwbGFjZXMuIEluIHRoZSBsYXRlciBwYXRjaGVzIHRoZXkgZ2V0IHJlbW92ZWQgZnJvbSB3 aGVyZSB0aGV5IHdlcmUsIHNvIGl0cyBhIG5ldA0KemVybyAoZXhjZXB0IEJQRiBvbiBBUk0gSSB0 aGluaykuDQoNCkFyZCBoYWQgZXhwcmVzc2VkIGludGVyZXN0IGluIGhhdmluZyB0aGUgc2V0X2Fs aWFzXygpIGZ1bmN0aW9ucyBmb3IgQXJtLCBhbmQgdGhlDQpuYW1lcyB3ZXJlIGNob3NlbiB0byBi ZSBhcmNoIGFnbm9zdGljLiBIZSBkaWRuJ3QgZXhwbGljaXRseSBjb21taXQgYnV0IEkgd2FzDQp1 bmRlciB0aGUgaW1wcmVzc2lvbiBoZSBtaWdodCBjcmVhdGUgYW4gaW1wbGVtZW50YXRpb24gZm9y IEFSTSBhbmQgd2UgY291bGQNCnJlbW92ZSB0aGlzIGJsb2NrLg0KDQpBcmQsIGRpZCBJIG1pc2lu dGVycHJldCB0aGF0Pw0KDQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVtb3ZlX3ZtX2FyZWEoYXJl YS0+YWRkcik7DQo+ID4gKw0KPiA+ICsJLyogSWYgdGhpcyBpcyBub3Qgc3BlY2lhbCBtZW1vcnks IHdlIGNhbiBza2lwIHRoZSBiZWxvdy4gKi8NCj4gPiArCWlmICghc3BlY2lhbCkNCj4gPiArCQly ZXR1cm47DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIElmIHdlIGFyZSBub3QgZGVhbGxvY2F0 aW5nIHBhZ2VzLCB3ZSBjYW4ganVzdCBkbyB0aGUgZmx1c2ggb2YgdGhlIFZNDQo+ID4gKwkgKiBh cmVhIGFuZCByZXR1cm4uDQo+ID4gKwkgKi8NCj4gPiArCWlmICghZGVhbGxvY2F0ZV9wYWdlcykg ew0KPiA+ICsJCXZtX3VubWFwX2FsaWFzZXMoKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIElmIHdlIGFyZSBoZXJlLCB3ZSBuZWVkIHRvIGZsdXNo IHRoZSB2bSBtYXBwaW5nIGFuZCByZXNldCB0aGUgZGlyZWN0DQo+ID4gKwkgKiBtYXAuDQo+ID4g KwkgKiBGaXJzdCBmaW5kIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIG9mIHRoZSBkaXJlY3QgbWFw cGluZ3MgdG8gbWFrZQ0KPiA+ICsJICogc3VyZSB0aGUgdm1fdW5tYXBfYWxpYXNlcyBmbHVzaCBp bmNsdWRlcyB0aGUgZGlyZWN0IG1hcC4NCj4gPiArCSAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8 IGFyZWEtPm5yX3BhZ2VzOyBpKyspIHsNCj4gPiArCQl1bnNpZ25lZCBsb25nIGFkZHIgPQ0KPiA+ ICsJCQkodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoYXJlYS0+cGFnZXNbaV0pOw0KPiA+ICsJ CWlmIChhZGRyKSB7DQo+IA0KPiAJCWlmIChwYWdlX2FkZHJlc3MoYXJlYS0+cGFnZXNbaV0pKQ0K PiANCj4gYXMgYWJvdmUuDQpSaWdodC4gVGhhbmtzLg0KDQo+ID4gKwkJCXN0YXJ0ID0gbWluKGFk ZHIsIHN0YXJ0KTsNCj4gPiArCQkJZW5kID0gbWF4KGFkZHIsIGVuZCk7DQo+ID4gKwkJfQ0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBGaXJzdCB3ZSBzZXQgZGlyZWN0IG1hcCB0 byBzb21ldGhpbmcgbm90IHZhbGlkIHNvIHRoYXQgaXQgd29uJ3QgYmUNCj4gDQo+IEFib3ZlIGNv bW1lbnQgc2F5cyAiRmlyc3QiIHRvby4gSW4gZ2VuZXJhbCwgYWxsIHRob3NlICJ3ZSIgZm9ybXVs YXRpb25zDQo+IGRvIG5vdCBtYWtlIHRoZSBjb21tZW50cyBhcyBlYXN5IHRvIHJlYWQgYXMgd2hl biB5b3UgbWFrZSB0aGVtDQo+IGltcGVyc29uYWwgYW5kIGltcGVyYXRpdmU6DQo+IA0KPiAJLyoN Cj4gCSAqIFNldCB0aGUgZGlyZWN0IG1hcCB0byBzb21ldGhpbmcgaW52YWxpZC4uLg0KPiANCj4g SnVzdCBsaWtlIERvY3VtZW50YXRpb24vcHJvY2Vzcy9zdWJtaXR0aW5nLXBhdGNoZXMucnN0IHNh eXM6DQo+IA0KPiAgIkRlc2NyaWJlIHlvdXIgY2hhbmdlcyBpbiBpbXBlcmF0aXZlIG1vb2QsIGUu Zy4gIm1ha2UgeHl6enkgZG8gZnJvdHoiDQo+ICAgaW5zdGVhZCBvZiAiW1RoaXMgcGF0Y2hdIG1h a2VzIHh5enp5IGRvIGZyb3R6IiBvciAiW0ldIGNoYW5nZWQgeHl6enkNCj4gICB0byBkbyBmcm90 eiIsIGFzIGlmIHlvdSBhcmUgZ2l2aW5nIG9yZGVycyB0byB0aGUgY29kZWJhc2UgdG8gY2hhbmdl DQo+ICAgaXRzIGJlaGF2aW91ci4iDQo+IA0KPiB5b3Ugc2ltcGx5IG9yZGVyIHlvdXIgY29kZSB0 byBkbyBzdHVmZi4gOi0pDQpJIHNlZSwgSSB3aWxsIG1ha2Ugc3VyZSB0byBmdWxseSBhcHBseSB0 aGlzIGdyYW1tYXIgcnVsZSB0byBjb21taXQgbWVzc2FnZXMgYW5kDQpjb21tZW50cyBmb3IgdGhl IG5leHQgdmVyc2lvbi4NCg0KPiA+ICsJICogY2FjaGVkIGlmIHRoZXJlIGFyZSBhbnkgYWNjZXNz ZXMgYWZ0ZXIgdGhlIFRMQiBmbHVzaCwgdGhlbiB3ZSBmbHVzaA0KPiA+ICsJICogdGhlIFRMQiwg YW5kIHJlc2V0IHRoZSBkaXJlY3RtYXAgcGVybWlzc2lvbnMgdG8gdGhlIGRlZmF1bHQuDQo+ID4g KwkgKi8NCj4gPiArCXNldF9hcmVhX2FsaWFzKGFyZWEsIHNldF9hbGlhc19udl9ub2ZsdXNoKTsN Cj4gPiArCV92bV91bm1hcF9hbGlhc2VzKHN0YXJ0LCBlbmQsIDEpOw0KPiA+ICsJc2V0X2FyZWFf YWxpYXMoYXJlYSwgc2V0X2FsaWFzX2RlZmF1bHRfbm9mbHVzaCk7DQo+ID4gK30NCj4gPiArDQo+ ID4gIHN0YXRpYyB2b2lkIF9fdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIsIGludCBkZWFsbG9jYXRl X3BhZ2VzKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOw0KPiANCj4gDQo=