From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: Re: [PATCH 1/3] drm/amdkfd: Do copy_to/from_user in general kfd_ioctl() Date: Mon, 29 Dec 2014 15:22:31 +0200 Message-ID: <54A15597.9020906@amd.com> References: <1419856973-3223-1-git-send-email-oded.gabbay@amd.com> <54A15195.6020509@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0146.outbound.protection.outlook.com [207.46.100.146]) by gabe.freedesktop.org (Postfix) with ESMTP id AD46D89E1D for ; Mon, 29 Dec 2014 05:23:03 -0800 (PST) In-Reply-To: <54A15195.6020509@vodafone.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?ISO-8859-15?Q?Christian_K=F6nig?= , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CgpPbiAxMi8yOS8yMDE0IDAzOjA1IFBNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+IEFtIDI5 LjEyLjIwMTQgdW0gMTM6NDIgc2NocmllYiBPZGVkIEdhYmJheToKPj4gVGhpcyBwYXRjaCBtb3Zl cyB0aGUgY29weV90b191c2VyKCkgYW5kIGNvcHlfZnJvbV91c2VyKCkgY2FsbHMgZnJvbSB0aGUK Pj4gZGlmZmVyZW50IGlvY3RsIGZ1bmN0aW9ucyBpbiBhbWRrZmQgdG8gdGhlIGdlbmVyYWwga2Zk X2lvY3RsKCkgZnVuY3Rpb24sIGFzCj4+IHRoaXMgaXMgYSBjb21tb24gY29kZSBmb3IgYWxsIGlv Y3Rscy4KPj4KPj4gVGhpcyB3YXMgZG9uZSBhY2NvcmRpbmcgdG8gZXhhbXBsZSB0YWtlbiBmcm9t IGRybV9pb2N0bC5jCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IE9kZWQgR2FiYmF5IDxvZGVkLmdhYmJh eUBhbWQuY29tPgo+Cj4gSW4gZ2VuZXJhbCBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSB0byBtZSBh bmQgdGhlIHBhdGNoIGlzICJSZXZpZXdlZC1ieToKPiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3Rp YW4ua29lbmlnQGFtZC5jb20+IiBmb3Igbm93Lgo+Cj4gV2hhdCByZWFsbHkgcXVlc3Rpb25zIG1l IGlzIHdoeSB3ZSBuZWVkIGFsbCB0aGlzIGNvZGUgZHVwbGljYXRpb24gYW5kIGNhbid0Cj4gcmV1 c2UgdGhlIERSTSBpbmZyYXN0cnVjdHVyZSBmb3IgdGhpcy4gQnV0IHRoYXQncyBtb3JlIGEgcHJv YmxlbSBpbiB0aGUgbG9uZyB0ZXJtLgo+CkRvIHlvdSBtZWFuIHJlZ2lzdGVyaW5nIGFzIERSTSBJ T0NUTCA/Ck9yIGRvIHlvdSBtZWFuIHNvbWV0aGluZyBlbHNlID8KCklmIGl0IGlzIHRoZSBmb3Jt ZXIsIHRoYW4gSSB0aGluayB0aGUgbWFpbiBwcm9ibGVtIGlzIHRoYXQgd2UgdXNlIGRpZmZlcmVu dCAKZGV2aWNlcyAoL2Rldi9rZmQgdnMuIC9kZXYvZHJpLykKCklmIGl0IGlzIHRoZSBsYXR0ZXIs IGNvdWxkIHlvdSBnaXZlIG1lIG1vcmUgc3BlY2lmaWNzID8KCglPZGVkCgo+IFJlZ2FyZHMsCj4g Q2hyaXN0aWFuLgo+Cj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9j aGFyZGV2LmMgfCAyMzQgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+PiAgIDEgZmls ZSBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKSwgMTE3IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYwo+PiBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKPj4gaW5kZXggN2Q0OTc0Yi4u NTQ2MGFkMiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2No YXJkZXYuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5j Cj4+IEBAIC0xMjcsMTcgKzEyNywxNCBAQCBzdGF0aWMgaW50IGtmZF9vcGVuKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCBmaWxlCj4+ICpmaWxlcCkKPj4gICAgICAgcmV0dXJuIDA7Cj4+ICAg fQo+PiAtc3RhdGljIGxvbmcga2ZkX2lvY3RsX2dldF92ZXJzaW9uKHN0cnVjdCBmaWxlICpmaWxl cCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAo+PiAtICAgICAgICAgICAgICAgICAgICB2b2lkIF9f dXNlciAqYXJnKQo+PiArc3RhdGljIGludCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb24oc3RydWN0IGZp bGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCj4+ICsgICAgICAgICAgICAgICAgICAg IHZvaWQgKmRhdGEpCj4+ICAgewo+PiAtICAgIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25f YXJncyBhcmdzOwo+PiArICAgIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3ZlcnNpb25fYXJncyAqYXJn cyA9IGRhdGE7Cj4+ICAgICAgIGludCBlcnIgPSAwOwo+PiAtICAgIGFyZ3MubWFqb3JfdmVyc2lv biA9IEtGRF9JT0NUTF9NQUpPUl9WRVJTSU9OOwo+PiAtICAgIGFyZ3MubWlub3JfdmVyc2lvbiA9 IEtGRF9JT0NUTF9NSU5PUl9WRVJTSU9OOwo+PiAtCj4+IC0gICAgaWYgKGNvcHlfdG9fdXNlcihh cmcsICZhcmdzLCBzaXplb2YoYXJncykpKQo+PiAtICAgICAgICBlcnIgPSAtRUZBVUxUOwo+PiAr ICAgIGFyZ3MtPm1ham9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUFKT1JfVkVSU0lPTjsKPj4gKyAg ICBhcmdzLT5taW5vcl92ZXJzaW9uID0gS0ZEX0lPQ1RMX01JTk9SX1ZFUlNJT047Cj4+ICAgICAg IHJldHVybiBlcnI7Cj4+ICAgfQo+PiBAQCAtMjIxLDEwICsyMTgsMTAgQEAgc3RhdGljIGludCBz ZXRfcXVldWVfcHJvcGVydGllc19mcm9tX3VzZXIoc3RydWN0Cj4+IHF1ZXVlX3Byb3BlcnRpZXMg KnFfcHJvcGVydGllcywKPj4gICAgICAgcmV0dXJuIDA7Cj4+ICAgfQo+PiAtc3RhdGljIGxvbmcg a2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJv Y2VzcyAqcCwKPj4gLSAgICAgICAgICAgICAgICAgICAgdm9pZCBfX3VzZXIgKmFyZykKPj4gK3N0 YXRpYyBpbnQga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVj dCBrZmRfcHJvY2VzcyAqcCwKPj4gKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKPj4g ICB7Cj4+IC0gICAgc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncyBhcmdzOwo+PiAr ICAgIHN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+PiAg ICAgICBzdHJ1Y3Qga2ZkX2RldiAqZGV2Owo+PiAgICAgICBpbnQgZXJyID0gMDsKPj4gICAgICAg dW5zaWduZWQgaW50IHF1ZXVlX2lkOwo+PiBAQCAtMjMzLDE2ICsyMzAsMTMgQEAgc3RhdGljIGxv bmcga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsCj4+IHN0cnVjdCBr ZmRfcHJvY2VzcyAqcCwKPj4gICAgICAgbWVtc2V0KCZxX3Byb3BlcnRpZXMsIDAsIHNpemVvZihz dHJ1Y3QgcXVldWVfcHJvcGVydGllcykpOwo+PiAtICAgIGlmIChjb3B5X2Zyb21fdXNlcigmYXJn cywgYXJnLCBzaXplb2YoYXJncykpKQo+PiAtICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4gLQo+ PiAgICAgICBwcl9kZWJ1Zygia2ZkOiBjcmVhdGluZyBxdWV1ZSBpb2N0bFxuIik7Cj4+IC0gICAg ZXJyID0gc2V0X3F1ZXVlX3Byb3BlcnRpZXNfZnJvbV91c2VyKCZxX3Byb3BlcnRpZXMsICZhcmdz KTsKPj4gKyAgICBlcnIgPSBzZXRfcXVldWVfcHJvcGVydGllc19mcm9tX3VzZXIoJnFfcHJvcGVy dGllcywgYXJncyk7Cj4+ICAgICAgIGlmIChlcnIpCj4+ICAgICAgICAgICByZXR1cm4gZXJyOwo+ PiAtICAgIGRldiA9IGtmZF9kZXZpY2VfYnlfaWQoYXJncy5ncHVfaWQpOwo+PiArICAgIGRldiA9 IGtmZF9kZXZpY2VfYnlfaWQoYXJncy0+Z3B1X2lkKTsKPj4gICAgICAgaWYgKGRldiA9PSBOVUxM KQo+PiAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+IEBAIC0yNTAsNyArMjQ0LDcgQEAgc3Rh dGljIGxvbmcga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsCj4+IHN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwKPj4gICAgICAgcGRkID0ga2ZkX2JpbmRfcHJvY2Vzc190b19k ZXZpY2UoZGV2LCBwKTsKPj4gICAgICAgaWYgKElTX0VSUihwZGQpKSB7Cj4+IC0gICAgICAgIGVy ciA9IFBUUl9FUlIocGRkKTsKPj4gKyAgICAgICAgZXJyID0gLUVTUkNIOwo+PiAgICAgICAgICAg Z290byBlcnJfYmluZF9wcm9jZXNzOwo+PiAgICAgICB9Cj4+IEBAIC0yNjMsMzMgKzI1NywyNiBA QCBzdGF0aWMgbG9uZyBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwK Pj4gc3RydWN0IGtmZF9wcm9jZXNzICpwLAo+PiAgICAgICBpZiAoZXJyICE9IDApCj4+ICAgICAg ICAgICBnb3RvIGVycl9jcmVhdGVfcXVldWU7Cj4+IC0gICAgYXJncy5xdWV1ZV9pZCA9IHF1ZXVl X2lkOwo+PiArICAgIGFyZ3MtPnF1ZXVlX2lkID0gcXVldWVfaWQ7Cj4+ICAgICAgIC8qIFJldHVy biBncHVfaWQgYXMgZG9vcmJlbGwgb2Zmc2V0IGZvciBtbWFwIHVzYWdlICovCj4+IC0gICAgYXJn cy5kb29yYmVsbF9vZmZzZXQgPSBhcmdzLmdwdV9pZCA8PCBQQUdFX1NISUZUOwo+PiAtCj4+IC0g ICAgaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJncykpKSB7Cj4+IC0gICAg ICAgIGVyciA9IC1FRkFVTFQ7Cj4+IC0gICAgICAgIGdvdG8gZXJyX2NvcHlfYXJnc19vdXQ7Cj4+ IC0gICAgfQo+PiArICAgIGFyZ3MtPmRvb3JiZWxsX29mZnNldCA9IGFyZ3MtPmdwdV9pZCA8PCBQ QUdFX1NISUZUOwo+PiAgICAgICBtdXRleF91bmxvY2soJnAtPm11dGV4KTsKPj4gLSAgICBwcl9k ZWJ1Zygia2ZkOiBxdWV1ZSBpZCAlZCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcbiIsIGFyZ3Mu cXVldWVfaWQpOwo+PiArICAgIHByX2RlYnVnKCJrZmQ6IHF1ZXVlIGlkICVkIHdhcyBjcmVhdGVk IHN1Y2Nlc3NmdWxseVxuIiwgYXJncy0+cXVldWVfaWQpOwo+PiAgICAgICBwcl9kZWJ1Zygicmlu ZyBidWZmZXIgYWRkcmVzcyA9PSAweCUwMTZsbFhcbiIsCj4+IC0gICAgICAgICAgICBhcmdzLnJp bmdfYmFzZV9hZGRyZXNzKTsKPj4gKyAgICAgICAgICAgIGFyZ3MtPnJpbmdfYmFzZV9hZGRyZXNz KTsKPj4gICAgICAgcHJfZGVidWcoInJlYWQgcHRyIGFkZHJlc3MgICAgPT0gMHglMDE2bGxYXG4i LAo+PiAtICAgICAgICAgICAgYXJncy5yZWFkX3BvaW50ZXJfYWRkcmVzcyk7Cj4+ICsgICAgICAg ICAgICBhcmdzLT5yZWFkX3BvaW50ZXJfYWRkcmVzcyk7Cj4+ICAgICAgIHByX2RlYnVnKCJ3cml0 ZSBwdHIgYWRkcmVzcyAgID09IDB4JTAxNmxsWFxuIiwKPj4gLSAgICAgICAgICAgIGFyZ3Mud3Jp dGVfcG9pbnRlcl9hZGRyZXNzKTsKPj4gKyAgICAgICAgICAgIGFyZ3MtPndyaXRlX3BvaW50ZXJf YWRkcmVzcyk7Cj4+ICAgICAgIHJldHVybiAwOwo+PiAtZXJyX2NvcHlfYXJnc19vdXQ6Cj4+IC0g ICAgcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgcXVldWVfaWQpOwo+PiAgIGVycl9jcmVhdGVf cXVldWU6Cj4+ICAgZXJyX2JpbmRfcHJvY2VzczoKPj4gICAgICAgbXV0ZXhfdW5sb2NrKCZwLT5t dXRleCk7Cj4+IEBAIC0yOTcsOTkgKzI4NCw5MCBAQCBlcnJfYmluZF9wcm9jZXNzOgo+PiAgIH0K Pj4gICBzdGF0aWMgaW50IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxw LCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCj4+IC0gICAgICAgICAgICAgICAgICAgIHZvaWQgX191 c2VyICphcmcpCj4+ICsgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCj4+ICAgewo+PiAg ICAgICBpbnQgcmV0dmFsOwo+PiAtICAgIHN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZV9h cmdzIGFyZ3M7Cj4+IC0KPj4gLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6 ZW9mKGFyZ3MpKSkKPj4gLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4+ICsgICAgc3RydWN0IGtm ZF9pb2N0bF9kZXN0cm95X3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+PiAgICAgICBwcl9kZWJ1 Zygia2ZkOiBkZXN0cm95aW5nIHF1ZXVlIGlkICVkIGZvciBQQVNJRCAlZFxuIiwKPj4gLSAgICAg ICAgICAgICAgICBhcmdzLnF1ZXVlX2lkLAo+PiArICAgICAgICAgICAgICAgIGFyZ3MtPnF1ZXVl X2lkLAo+PiAgICAgICAgICAgICAgICAgICBwLT5wYXNpZCk7Cj4+ICAgICAgIG11dGV4X2xvY2so JnAtPm11dGV4KTsKPj4gLSAgICByZXR2YWwgPSBwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFtLCBh cmdzLnF1ZXVlX2lkKTsKPj4gKyAgICByZXR2YWwgPSBwcW1fZGVzdHJveV9xdWV1ZSgmcC0+cHFt LCBhcmdzLT5xdWV1ZV9pZCk7Cj4+ICAgICAgIG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+PiAg ICAgICByZXR1cm4gcmV0dmFsOwo+PiAgIH0KPj4gICBzdGF0aWMgaW50IGtmZF9pb2N0bF91cGRh dGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPj4gLSAg ICAgICAgICAgICAgICAgICAgdm9pZCBfX3VzZXIgKmFyZykKPj4gKyAgICAgICAgICAgICAgICAg ICAgdm9pZCAqZGF0YSkKPj4gICB7Cj4+ICAgICAgIGludCByZXR2YWw7Cj4+IC0gICAgc3RydWN0 IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncyBhcmdzOwo+PiArICAgIHN0cnVjdCBrZmRfaW9j dGxfdXBkYXRlX3F1ZXVlX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+PiAgICAgICBzdHJ1Y3QgcXVldWVf cHJvcGVydGllcyBwcm9wZXJ0aWVzOwo+PiAtICAgIGlmIChjb3B5X2Zyb21fdXNlcigmYXJncywg YXJnLCBzaXplb2YoYXJncykpKQo+PiAtICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4gLQo+PiAt ICAgIGlmIChhcmdzLnF1ZXVlX3BlcmNlbnRhZ2UgPiBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0Up IHsKPj4gKyAgICBpZiAoYXJncy0+cXVldWVfcGVyY2VudGFnZSA+IEtGRF9NQVhfUVVFVUVfUEVS Q0VOVEFHRSkgewo+PiAgICAgICAgICAgcHJfZXJyKCJrZmQ6IHF1ZXVlIHBlcmNlbnRhZ2UgbXVz dCBiZSBiZXR3ZWVuIDAgdG8KPj4gS0ZEX01BWF9RVUVVRV9QRVJDRU5UQUdFXG4iKTsKPj4gICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiAgICAgICB9Cj4+IC0gICAgaWYgKGFyZ3MucXVldWVf cHJpb3JpdHkgPiBLRkRfTUFYX1FVRVVFX1BSSU9SSVRZKSB7Cj4+ICsgICAgaWYgKGFyZ3MtPnF1 ZXVlX3ByaW9yaXR5ID4gS0ZEX01BWF9RVUVVRV9QUklPUklUWSkgewo+PiAgICAgICAgICAgcHJf ZXJyKCJrZmQ6IHF1ZXVlIHByaW9yaXR5IG11c3QgYmUgYmV0d2VlbiAwIHRvCj4+IEtGRF9NQVhf UVVFVUVfUFJJT1JJVFlcbiIpOwo+PiAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICAgICAg IH0KPj4gLSAgICBpZiAoKGFyZ3MucmluZ19iYXNlX2FkZHJlc3MpICYmCj4+ICsgICAgaWYgKChh cmdzLT5yaW5nX2Jhc2VfYWRkcmVzcykgJiYKPj4gICAgICAgICAgICghYWNjZXNzX29rKFZFUklG WV9XUklURSwKPj4gLSAgICAgICAgICAgIChjb25zdCB2b2lkIF9fdXNlciAqKSBhcmdzLnJpbmdf YmFzZV9hZGRyZXNzLAo+PiArICAgICAgICAgICAgKGNvbnN0IHZvaWQgX191c2VyICopIGFyZ3Mt PnJpbmdfYmFzZV9hZGRyZXNzLAo+PiAgICAgICAgICAgICAgIHNpemVvZih1aW50NjRfdCkpKSkg ewo+PiAgICAgICAgICAgcHJfZXJyKCJrZmQ6IGNhbid0IGFjY2VzcyByaW5nIGJhc2UgYWRkcmVz c1xuIik7Cj4+ICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4gICAgICAgfQo+PiAtICAgIGlm ICghaXNfcG93ZXJfb2ZfMihhcmdzLnJpbmdfc2l6ZSkgJiYgKGFyZ3MucmluZ19zaXplICE9IDAp KSB7Cj4+ICsgICAgaWYgKCFpc19wb3dlcl9vZl8yKGFyZ3MtPnJpbmdfc2l6ZSkgJiYgKGFyZ3Mt PnJpbmdfc2l6ZSAhPSAwKSkgewo+PiAgICAgICAgICAgcHJfZXJyKCJrZmQ6IHJpbmcgc2l6ZSBt dXN0IGJlIGEgcG93ZXIgb2YgMiBvciAwXG4iKTsKPj4gICAgICAgICAgIHJldHVybiAtRUlOVkFM Owo+PiAgICAgICB9Cj4+IC0gICAgcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy5yaW5n X2Jhc2VfYWRkcmVzczsKPj4gLSAgICBwcm9wZXJ0aWVzLnF1ZXVlX3NpemUgPSBhcmdzLnJpbmdf c2l6ZTsKPj4gLSAgICBwcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPSBhcmdzLnF1ZXVlX3BlcmNl bnRhZ2U7Cj4+IC0gICAgcHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MucXVldWVfcHJpb3JpdHk7 Cj4+ICsgICAgcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy0+cmluZ19iYXNlX2FkZHJl c3M7Cj4+ICsgICAgcHJvcGVydGllcy5xdWV1ZV9zaXplID0gYXJncy0+cmluZ19zaXplOwo+PiAr ICAgIHByb3BlcnRpZXMucXVldWVfcGVyY2VudCA9IGFyZ3MtPnF1ZXVlX3BlcmNlbnRhZ2U7Cj4+ ICsgICAgcHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MtPnF1ZXVlX3ByaW9yaXR5Owo+PiAgICAg ICBwcl9kZWJ1Zygia2ZkOiB1cGRhdGluZyBxdWV1ZSBpZCAlZCBmb3IgUEFTSUQgJWRcbiIsCj4+ IC0gICAgICAgICAgICBhcmdzLnF1ZXVlX2lkLCBwLT5wYXNpZCk7Cj4+ICsgICAgICAgICAgICBh cmdzLT5xdWV1ZV9pZCwgcC0+cGFzaWQpOwo+PiAgICAgICBtdXRleF9sb2NrKCZwLT5tdXRleCk7 Cj4+IC0gICAgcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFtLCBhcmdzLnF1ZXVlX2lk LCAmcHJvcGVydGllcyk7Cj4+ICsgICAgcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFt LCBhcmdzLT5xdWV1ZV9pZCwgJnByb3BlcnRpZXMpOwo+PiAgICAgICBtdXRleF91bmxvY2soJnAt Pm11dGV4KTsKPj4gICAgICAgcmV0dXJuIHJldHZhbDsKPj4gICB9Cj4+IC1zdGF0aWMgbG9uZyBr ZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koc3RydWN0IGZpbGUgKmZpbGVwLAo+PiAtICAgICAg ICAgICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKPj4gK3N0 YXRpYyBpbnQga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwK Pj4gKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkICpkYXRh KQo+PiAgIHsKPj4gLSAgICBzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3Mg YXJnczsKPj4gKyAgICBzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MgKmFy Z3MgPSBkYXRhOwo+PiAgICAgICBzdHJ1Y3Qga2ZkX2RldiAqZGV2Owo+PiAgICAgICBpbnQgZXJy ID0gMDsKPj4gICAgICAgc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkOwo+PiAgICAgICBl bnVtIGNhY2hlX3BvbGljeSBkZWZhdWx0X3BvbGljeSwgYWx0ZXJuYXRlX3BvbGljeTsKPj4gLSAg ICBpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKPj4gLSAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7Cj4+IC0KPj4gLSAgICBpZiAoYXJncy5kZWZhdWx0X3BvbGljeSAh PSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVAo+PiAtICAgICAgICAmJiBhcmdzLmRlZmF1 bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7Cj4+ICsgICAg aWYgKGFyZ3MtPmRlZmF1bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5U Cj4+ICsgICAgICAgICYmIGFyZ3MtPmRlZmF1bHRfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9M SUNZX05PTkNPSEVSRU5UKSB7Cj4+ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gICAgICAg fQo+PiAtICAgIGlmIChhcmdzLmFsdGVybmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJ Q1lfQ09IRVJFTlQKPj4gLSAgICAgICAgJiYgYXJncy5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9J T0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7Cj4+ICsgICAgaWYgKGFyZ3MtPmFsdGVybmF0 ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKPj4gKyAgICAgICAgJiYg YXJncy0+YWx0ZXJuYXRlX3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVO VCkgewo+PiAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICAgICAgIH0KPj4gLSAgICBkZXYg PSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MuZ3B1X2lkKTsKPj4gKyAgICBkZXYgPSBrZmRfZGV2aWNl X2J5X2lkKGFyZ3MtPmdwdV9pZCk7Cj4+ICAgICAgIGlmIChkZXYgPT0gTlVMTCkKPj4gICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+PiBAQCAtMzk3LDIzICszNzUsMjMgQEAgc3RhdGljIGxvbmcg a2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKPj4gICAgICAg cGRkID0ga2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2UoZGV2LCBwKTsKPj4gICAgICAgaWYgKElT X0VSUihwZGQpKSB7Cj4+IC0gICAgICAgIGVyciA9IFBUUl9FUlIocGRkKTsKPj4gKyAgICAgICAg ZXJyID0gLUVTUkNIOwo+PiAgICAgICAgICAgZ290byBvdXQ7Cj4+ICAgICAgIH0KPj4gLSAgICBk ZWZhdWx0X3BvbGljeSA9IChhcmdzLmRlZmF1bHRfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9M SUNZX0NPSEVSRU5UKQo+PiArICAgIGRlZmF1bHRfcG9saWN5ID0gKGFyZ3MtPmRlZmF1bHRfcG9s aWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+PiAgICAgICAgICAgICAgICA/ IGNhY2hlX3BvbGljeV9jb2hlcmVudCA6IGNhY2hlX3BvbGljeV9ub25jb2hlcmVudDsKPj4gICAg ICAgYWx0ZXJuYXRlX3BvbGljeSA9Cj4+IC0gICAgICAgIChhcmdzLmFsdGVybmF0ZV9wb2xpY3kg PT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQpCj4+ICsgICAgICAgIChhcmdzLT5hbHRl cm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+PiAgICAgICAg ICAgICAgPyBjYWNoZV9wb2xpY3lfY29oZXJlbnQgOiBjYWNoZV9wb2xpY3lfbm9uY29oZXJlbnQ7 Cj4+ICAgICAgIGlmICghZGV2LT5kcW0tPnNldF9jYWNoZV9tZW1vcnlfcG9saWN5KGRldi0+ZHFt LAo+PiAgICAgICAgICAgICAgICAgICAmcGRkLT5xcGQsCj4+ICAgICAgICAgICAgICAgICAgIGRl ZmF1bHRfcG9saWN5LAo+PiAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGVfcG9saWN5LAo+PiAt ICAgICAgICAgICAgICAgICh2b2lkIF9fdXNlciAqKWFyZ3MuYWx0ZXJuYXRlX2FwZXJ0dXJlX2Jh c2UsCj4+IC0gICAgICAgICAgICAgICAgYXJncy5hbHRlcm5hdGVfYXBlcnR1cmVfc2l6ZSkpCj4+ ICsgICAgICAgICAgICAgICAgKHZvaWQgX191c2VyICopYXJncy0+YWx0ZXJuYXRlX2FwZXJ0dXJl X2Jhc2UsCj4+ICsgICAgICAgICAgICAgICAgYXJncy0+YWx0ZXJuYXRlX2FwZXJ0dXJlX3NpemUp KQo+PiAgICAgICAgICAgZXJyID0gLUVJTlZBTDsKPj4gICBvdXQ6Cj4+IEBAIC00MjIsNTMgKzQw MCw0NCBAQCBvdXQ6Cj4+ICAgICAgIHJldHVybiBlcnI7Cj4+ICAgfQo+PiAtc3RhdGljIGxvbmcg a2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhzdHJ1Y3QgZmlsZSAqZmlsZXAsCj4+IC0gICAg ICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkIF9fdXNlciAqYXJnKQo+PiAr c3RhdGljIGludCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzKHN0cnVjdCBmaWxlICpmaWxl cCwKPj4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgKmRhdGEp Cj4+ICAgewo+PiAtICAgIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3Mg YXJnczsKPj4gKyAgICBzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzICph cmdzID0gZGF0YTsKPj4gICAgICAgc3RydWN0IGtmZF9kZXYgKmRldjsKPj4gICAgICAgc3RydWN0 IHRpbWVzcGVjIHRpbWU7Cj4+IC0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNp emVvZihhcmdzKSkpCj4+IC0gICAgICAgIHJldHVybiAtRUZBVUxUOwo+PiAtCj4+IC0gICAgZGV2 ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7Cj4+ICsgICAgZGV2ID0ga2ZkX2Rldmlj ZV9ieV9pZChhcmdzLT5ncHVfaWQpOwo+PiAgICAgICBpZiAoZGV2ID09IE5VTEwpCj4+ICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPj4gICAgICAgLyogUmVhZGluZyBHUFUgY2xvY2sgY291bnRl ciBmcm9tIEtHRCAqLwo+PiAtICAgIGFyZ3MuZ3B1X2Nsb2NrX2NvdW50ZXIgPSBrZmQya2dkLT5n ZXRfZ3B1X2Nsb2NrX2NvdW50ZXIoZGV2LT5rZ2QpOwo+PiArICAgIGFyZ3MtPmdwdV9jbG9ja19j b3VudGVyID0ga2ZkMmtnZC0+Z2V0X2dwdV9jbG9ja19jb3VudGVyKGRldi0+a2dkKTsKPj4gICAg ICAgLyogTm8gYWNjZXNzIHRvIHJkdHNjLiBVc2luZyByYXcgbW9ub3RvbmljIHRpbWUgKi8KPj4g ICAgICAgZ2V0cmF3bW9ub3RvbmljKCZ0aW1lKTsKPj4gLSAgICBhcmdzLmNwdV9jbG9ja19jb3Vu dGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKPj4gKyAgICBhcmdzLT5jcHVf Y2xvY2tfY291bnRlciA9ICh1aW50NjRfdCl0aW1lc3BlY190b19ucygmdGltZSk7Cj4+ICAgICAg IGdldF9tb25vdG9uaWNfYm9vdHRpbWUoJnRpbWUpOwo+PiAtICAgIGFyZ3Muc3lzdGVtX2Nsb2Nr X2NvdW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUpOwo+PiArICAgIGFyZ3Mt PnN5c3RlbV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsK Pj4gICAgICAgLyogU2luY2UgdGhlIGNvdW50ZXIgaXMgaW4gbmFuby1zZWNvbmRzIHdlIHVzZSAx R0h6IGZyZXF1ZW5jeSAqLwo+PiAtICAgIGFyZ3Muc3lzdGVtX2Nsb2NrX2ZyZXEgPSAxMDAwMDAw MDAwOwo+PiAtCj4+IC0gICAgaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJn cykpKQo+PiAtICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4gKyAgICBhcmdzLT5zeXN0ZW1fY2xv Y2tfZnJlcSA9IDEwMDAwMDAwMDA7Cj4+ICAgICAgIHJldHVybiAwOwo+PiAgIH0KPj4gICBzdGF0 aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXMoc3RydWN0IGZpbGUgKmZpbHAs Cj4+IC0gICAgICAgICAgICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2b2lkIF9fdXNlciAq YXJnKQo+PiArICAgICAgICAgICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0 YSkKPj4gICB7Cj4+IC0gICAgc3RydWN0IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXNf YXJncyBhcmdzOwo+PiArICAgIHN0cnVjdCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVz X2FyZ3MgKmFyZ3MgPSBkYXRhOwo+PiAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlX2Fw ZXJ0dXJlcyAqcEFwZXJ0dXJlOwo+PiAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpw ZGQ7Cj4+ICAgICAgIGRldl9kYmcoa2ZkX2RldmljZSwgImdldCBhcGVydHVyZXMgZm9yIFBBU0lE ICVkIiwgcC0+cGFzaWQpOwo+PiAtICAgIGlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJnLCBz aXplb2YoYXJncykpKQo+PiAtICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4gLQo+PiAtICAgIGFy Z3MubnVtX29mX25vZGVzID0gMDsKPj4gKyAgICBhcmdzLT5udW1fb2Zfbm9kZXMgPSAwOwo+PiAg ICAgICBtdXRleF9sb2NrKCZwLT5tdXRleCk7Cj4+IEBAIC00NzcsNyArNDQ2LDggQEAgc3RhdGlj IGludCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzKHN0cnVjdCBmaWxlICpmaWxwLAo+ PiAgICAgICAgICAgLyogUnVuIG92ZXIgYWxsIHBkZCBvZiB0aGUgcHJvY2VzcyAqLwo+PiAgICAg ICAgICAgcGRkID0ga2ZkX2dldF9maXJzdF9wcm9jZXNzX2RldmljZV9kYXRhKHApOwo+PiAgICAg ICAgICAgZG8gewo+PiAtICAgICAgICAgICAgcEFwZXJ0dXJlID0gJmFyZ3MucHJvY2Vzc19hcGVy dHVyZXNbYXJncy5udW1fb2Zfbm9kZXNdOwo+PiArICAgICAgICAgICAgcEFwZXJ0dXJlID0KPj4g KyAgICAgICAgICAgICAgICAmYXJncy0+cHJvY2Vzc19hcGVydHVyZXNbYXJncy0+bnVtX29mX25v ZGVzXTsKPj4gICAgICAgICAgICAgICBwQXBlcnR1cmUtPmdwdV9pZCA9IHBkZC0+ZGV2LT5pZDsK Pj4gICAgICAgICAgICAgICBwQXBlcnR1cmUtPmxkc19iYXNlID0gcGRkLT5sZHNfYmFzZTsKPj4g ICAgICAgICAgICAgICBwQXBlcnR1cmUtPmxkc19saW1pdCA9IHBkZC0+bGRzX2xpbWl0Owo+PiBA QCAtNDg3LDcgKzQ1Nyw3IEBAIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0 dXJlcyhzdHJ1Y3QgZmlsZSAqZmlscCwKPj4gICAgICAgICAgICAgICBwQXBlcnR1cmUtPnNjcmF0 Y2hfbGltaXQgPSBwZGQtPnNjcmF0Y2hfbGltaXQ7Cj4+ICAgICAgICAgICAgICAgZGV2X2RiZyhr ZmRfZGV2aWNlLAo+PiAtICAgICAgICAgICAgICAgICJub2RlIGlkICV1XG4iLCBhcmdzLm51bV9v Zl9ub2Rlcyk7Cj4+ICsgICAgICAgICAgICAgICAgIm5vZGUgaWQgJXVcbiIsIGFyZ3MtPm51bV9v Zl9ub2Rlcyk7Cj4+ICAgICAgICAgICAgICAgZGV2X2RiZyhrZmRfZGV2aWNlLAo+PiAgICAgICAg ICAgICAgICAgICAiZ3B1IGlkICV1XG4iLCBwZGQtPmRldi0+aWQpOwo+PiAgICAgICAgICAgICAg IGRldl9kYmcoa2ZkX2RldmljZSwKPj4gQEAgLTUwMywyMyArNDczLDIzIEBAIHN0YXRpYyBpbnQg a2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhzdHJ1Y3QgZmlsZQo+PiAqZmlscCwKPj4g ICAgICAgICAgICAgICBkZXZfZGJnKGtmZF9kZXZpY2UsCj4+ICAgICAgICAgICAgICAgICAgICJz Y3JhdGNoX2xpbWl0ICVsbFhcbiIsIHBkZC0+c2NyYXRjaF9saW1pdCk7Cj4+IC0gICAgICAgICAg ICBhcmdzLm51bV9vZl9ub2RlcysrOwo+PiArICAgICAgICAgICAgYXJncy0+bnVtX29mX25vZGVz Kys7Cj4+ICAgICAgICAgICB9IHdoaWxlICgocGRkID0ga2ZkX2dldF9uZXh0X3Byb2Nlc3NfZGV2 aWNlX2RhdGEocCwgcGRkKSkgIT0gTlVMTCAmJgo+PiAtICAgICAgICAgICAgICAgIChhcmdzLm51 bV9vZl9ub2RlcyA8IE5VTV9PRl9TVVBQT1JURURfR1BVUykpOwo+PiArICAgICAgICAgICAgICAg IChhcmdzLT5udW1fb2Zfbm9kZXMgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpKTsKPj4gICAgICAg fQo+PiAgICAgICBtdXRleF91bmxvY2soJnAtPm11dGV4KTsKPj4gLSAgICBpZiAoY29weV90b191 c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCj4+IC0gICAgICAgIHJldHVybiAtRUZBVUxU Owo+PiAtCj4+ICAgICAgIHJldHVybiAwOwo+PiAgIH0KPj4gICBzdGF0aWMgbG9uZyBrZmRfaW9j dGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFy ZykKPj4gICB7Cj4+ICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcHJvY2VzczsKPj4gLSAgICBs b25nIGVyciA9IC1FSU5WQUw7Cj4+ICsgICAgY2hhciBzdGFja19rZGF0YVsxMjhdOwo+PiArICAg IGNoYXIgKmtkYXRhID0gTlVMTDsKPj4gKyAgICB1bnNpZ25lZCBpbnQgdXNpemUsIGFzaXplOwo+ PiArICAgIGludCByZXRjb2RlID0gLUVJTlZBTDsKPj4gICAgICAgZGV2X2RiZyhrZmRfZGV2aWNl LAo+PiAgICAgICAgICAgImlvY3RsIGNtZCAweCV4ICgjJWQpLCBhcmcgMHglbHhcbiIsCj4+IEBA IC01MjksNTQgKzQ5OSw4NCBAQCBzdGF0aWMgbG9uZyBrZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZp bGVwLCB1bnNpZ25lZCBpbnQKPj4gY21kLCB1bnNpZ25lZCBsb25nIGFyZykKPj4gICAgICAgaWYg KElTX0VSUihwcm9jZXNzKSkKPj4gICAgICAgICAgIHJldHVybiBQVFJfRVJSKHByb2Nlc3MpOwo+ PiArICAgIGlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkpIHsKPj4gKyAgICAgICAgaWYgKGFz aXplIDw9IHNpemVvZihzdGFja19rZGF0YSkpIHsKPj4gKyAgICAgICAgICAgIGtkYXRhID0gc3Rh Y2tfa2RhdGE7Cj4+ICsgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICBrZGF0YSA9IGtt YWxsb2MoYXNpemUsIEdGUF9LRVJORUwpOwo+PiArICAgICAgICAgICAgaWYgKCFrZGF0YSkgewo+ PiArICAgICAgICAgICAgICAgIHJldGNvZGUgPSAtRU5PTUVNOwo+PiArICAgICAgICAgICAgICAg IGdvdG8gZXJyX2kxOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ICsgICAgICAg IGlmIChhc2l6ZSA+IHVzaXplKQo+PiArICAgICAgICAgICAgbWVtc2V0KGtkYXRhICsgdXNpemUs IDAsIGFzaXplIC0gdXNpemUpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmIChjbWQgJiBJT0Nf SU4pIHsKPj4gKyAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGtkYXRhLCAodm9pZCBfX3VzZXIg KilhcmcsIHVzaXplKSAhPSAwKSB7Cj4+ICsgICAgICAgICAgICByZXRjb2RlID0gLUVGQVVMVDsK Pj4gKyAgICAgICAgICAgIGdvdG8gZXJyX2kxOwo+PiArICAgICAgICB9Cj4+ICsgICAgfSBlbHNl IGlmIChjbWQgJiBJT0NfT1VUKSB7Cj4+ICsgICAgICAgIG1lbXNldChrZGF0YSwgMCwgdXNpemUp Owo+PiArICAgIH0KPj4gKwo+PiArCj4+ICAgICAgIHN3aXRjaCAoY21kKSB7Cj4+ICAgICAgIGNh c2UgS0ZEX0lPQ19HRVRfVkVSU0lPTjoKPj4gLSAgICAgICAgZXJyID0ga2ZkX2lvY3RsX2dldF92 ZXJzaW9uKGZpbGVwLCBwcm9jZXNzLCAodm9pZCBfX3VzZXIgKilhcmcpOwo+PiArICAgICAgICBy ZXRjb2RlID0ga2ZkX2lvY3RsX2dldF92ZXJzaW9uKGZpbGVwLCBwcm9jZXNzLCBrZGF0YSk7Cj4+ ICAgICAgICAgICBicmVhazsKPj4gICAgICAgY2FzZSBLRkRfSU9DX0NSRUFURV9RVUVVRToKPj4g LSAgICAgICAgZXJyID0ga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPj4g LSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIF9fdXNlciAqKWFyZyk7Cj4+ICsgICAgICAg IHJldGNvZGUgPSBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKGZpbGVwLCBwcm9jZXNzLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAga2RhdGEpOwo+PiAgICAgICAgICAgYnJlYWs7Cj4+ICAgICAg IGNhc2UgS0ZEX0lPQ19ERVNUUk9ZX1FVRVVFOgo+PiAtICAgICAgICBlcnIgPSBrZmRfaW9jdGxf ZGVzdHJveV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICh2b2lkIF9fdXNlciAqKWFyZyk7Cj4+ICsgICAgICAgIHJldGNvZGUgPSBrZmRfaW9jdGxfZGVz dHJveV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGtk YXRhKTsKPj4gICAgICAgICAgIGJyZWFrOwo+PiAgICAgICBjYXNlIEtGRF9JT0NfU0VUX01FTU9S WV9QT0xJQ1k6Cj4+IC0gICAgICAgIGVyciA9IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeShm aWxlcCwgcHJvY2VzcywKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIF9fdXNlciAq KWFyZyk7Cj4+ICsgICAgICAgIHJldGNvZGUgPSBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3ko ZmlsZXAsIHByb2Nlc3MsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBrZGF0YSk7Cj4+ICAg ICAgICAgICBicmVhazsKPj4gICAgICAgY2FzZSBLRkRfSU9DX0dFVF9DTE9DS19DT1VOVEVSUzoK Pj4gLSAgICAgICAgZXJyID0ga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhmaWxlcCwgcHJv Y2VzcywKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIF9fdXNlciAqKWFyZyk7Cj4+ ICsgICAgICAgIHJldGNvZGUgPSBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzKGZpbGVwLCBw cm9jZXNzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAga2RhdGEpOwo+PiAgICAgICAgICAg YnJlYWs7Cj4+ICAgICAgIGNhc2UgS0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVM6Cj4+IC0g ICAgICAgIGVyciA9IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXMoZmlsZXAsIHByb2Nl c3MsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBfX3VzZXIgKilhcmcpOwo+PiAr ICAgICAgICByZXRjb2RlID0ga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhmaWxlcCwg cHJvY2VzcywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGtkYXRhKTsKPj4gICAgICAgICAg IGJyZWFrOwo+PiAgICAgICBjYXNlIEtGRF9JT0NfVVBEQVRFX1FVRVVFOgo+PiAtICAgICAgICBl cnIgPSBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlKGZpbGVwLCBwcm9jZXNzLAo+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgX191c2VyICopYXJnKTsKPj4gKyAgICAgICAgcmV0Y29kZSA9 IGtmZF9pb2N0bF91cGRhdGVfcXVldWUoZmlsZXAsIHByb2Nlc3MsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICBrZGF0YSk7Cj4+ICAgICAgICAgICBicmVhazsKPj4gICAgICAgZGVmYXVsdDoK Pj4gLSAgICAgICAgZGV2X2VycihrZmRfZGV2aWNlLAo+PiArICAgICAgICBkZXZfZGJnKGtmZF9k ZXZpY2UsCj4+ICAgICAgICAgICAgICAgInVua25vd24gaW9jdGwgY21kIDB4JXgsIGFyZyAweCVs eClcbiIsCj4+ICAgICAgICAgICAgICAgY21kLCBhcmcpOwo+PiAtICAgICAgICBlcnIgPSAtRUlO VkFMOwo+PiArICAgICAgICByZXRjb2RlID0gLUVJTlZBTDsKPj4gICAgICAgICAgIGJyZWFrOwo+ PiAgICAgICB9Cj4+IC0gICAgaWYgKGVyciA8IDApCj4+IC0gICAgICAgIGRldl9lcnIoa2ZkX2Rl dmljZSwKPj4gLSAgICAgICAgICAgICJpb2N0bCBlcnJvciAlbGQgZm9yIGlvY3RsIGNtZCAweCV4 ICgjJWQpXG4iLAo+PiAtICAgICAgICAgICAgZXJyLCBjbWQsIF9JT0NfTlIoY21kKSk7Cj4+ICsg ICAgaWYgKGNtZCAmIElPQ19PVVQpCj4+ICsgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoKHZvaWQg X191c2VyICopYXJnLCBrZGF0YSwgdXNpemUpICE9IDApCj4+ICsgICAgICAgICAgICByZXRjb2Rl ID0gLUVGQVVMVDsKPj4gLSAgICByZXR1cm4gZXJyOwo+PiArZXJyX2kxOgo+PiArICAgIGlmIChr ZGF0YSAhPSBzdGFja19rZGF0YSkKPj4gKyAgICAgICAga2ZyZWUoa2RhdGEpOwo+PiArCj4+ICsg ICAgaWYgKHJldGNvZGUpCj4+ICsgICAgICAgIGRldl9kYmcoa2ZkX2RldmljZSwgInJldCA9ICVk XG4iLCByZXRjb2RlKTsKPj4gKwo+PiArICAgIHJldHVybiByZXRjb2RlOwo+PiAgIH0KPj4gICBz dGF0aWMgaW50IGtmZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSkKPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=