From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?ISO-8859-15?Q?Christian_K=F6nig?= Subject: Re: [PATCH 1/3] drm/amdkfd: Do copy_to/from_user in general kfd_ioctl() Date: Mon, 29 Dec 2014 14:05:25 +0100 Message-ID: <54A15195.6020509@vodafone.de> References: <1419856973-3223-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from pegasos-out.vodafone.de (pegasos-out.vodafone.de [80.84.1.38]) by gabe.freedesktop.org (Postfix) with ESMTP id 7A914899E6 for ; Mon, 29 Dec 2014 05:06:04 -0800 (PST) In-Reply-To: <1419856973-3223-1-git-send-email-oded.gabbay@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oded Gabbay , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QW0gMjkuMTIuMjAxNCB1bSAxMzo0MiBzY2hyaWViIE9kZWQgR2FiYmF5Ogo+IFRoaXMgcGF0Y2gg bW92ZXMgdGhlIGNvcHlfdG9fdXNlcigpIGFuZCBjb3B5X2Zyb21fdXNlcigpIGNhbGxzIGZyb20g dGhlCj4gZGlmZmVyZW50IGlvY3RsIGZ1bmN0aW9ucyBpbiBhbWRrZmQgdG8gdGhlIGdlbmVyYWwg a2ZkX2lvY3RsKCkgZnVuY3Rpb24sIGFzCj4gdGhpcyBpcyBhIGNvbW1vbiBjb2RlIGZvciBhbGwg aW9jdGxzLgo+Cj4gVGhpcyB3YXMgZG9uZSBhY2NvcmRpbmcgdG8gZXhhbXBsZSB0YWtlbiBmcm9t IGRybV9pb2N0bC5jCj4KPiBTaWduZWQtb2ZmLWJ5OiBPZGVkIEdhYmJheSA8b2RlZC5nYWJiYXlA YW1kLmNvbT4KCkluIGdlbmVyYWwgc291bmRzIGxpa2UgYSBnb29kIGlkZWEgdG8gbWUgYW5kIHRo ZSBwYXRjaCBpcyAiUmV2aWV3ZWQtYnk6IApDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29l bmlnQGFtZC5jb20+IiBmb3Igbm93LgoKV2hhdCByZWFsbHkgcXVlc3Rpb25zIG1lIGlzIHdoeSB3 ZSBuZWVkIGFsbCB0aGlzIGNvZGUgZHVwbGljYXRpb24gYW5kIApjYW4ndCByZXVzZSB0aGUgRFJN IGluZnJhc3RydWN0dXJlIGZvciB0aGlzLiBCdXQgdGhhdCdzIG1vcmUgYSBwcm9ibGVtIAppbiB0 aGUgbG9uZyB0ZXJtLgoKUmVnYXJkcywKQ2hyaXN0aWFuLgoKPiAtLS0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMgfCAyMzQgKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspLCAxMTcgZGVs ZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X2NoYXJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKPiBp bmRleCA3ZDQ5NzRiLi41NDYwYWQyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1ka2ZkL2tmZF9jaGFyZGV2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9r ZmRfY2hhcmRldi5jCj4gQEAgLTEyNywxNyArMTI3LDE0IEBAIHN0YXRpYyBpbnQga2ZkX29wZW4o c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQo+ICAgCXJldHVybiAwOwo+ ICAgfQo+ICAgCj4gLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgZmls ZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPiAtCQkJCQl2b2lkIF9fdXNlciAqYXJn KQo+ICtzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZXAs IHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPiArCQkJCQl2b2lkICpkYXRhKQo+ICAgewo+IC0Jc3Ry dWN0IGtmZF9pb2N0bF9nZXRfdmVyc2lvbl9hcmdzIGFyZ3M7Cj4gKwlzdHJ1Y3Qga2ZkX2lvY3Rs X2dldF92ZXJzaW9uX2FyZ3MgKmFyZ3MgPSBkYXRhOwo+ICAgCWludCBlcnIgPSAwOwo+ICAgCj4g LQlhcmdzLm1ham9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUFKT1JfVkVSU0lPTjsKPiAtCWFyZ3Mu bWlub3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NSU5PUl9WRVJTSU9OOwo+IC0KPiAtCWlmIChjb3B5 X3RvX3VzZXIoYXJnLCAmYXJncywgc2l6ZW9mKGFyZ3MpKSkKPiAtCQllcnIgPSAtRUZBVUxUOwo+ ICsJYXJncy0+bWFqb3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NQUpPUl9WRVJTSU9OOwo+ICsJYXJn cy0+bWlub3JfdmVyc2lvbiA9IEtGRF9JT0NUTF9NSU5PUl9WRVJTSU9OOwo+ICAgCj4gICAJcmV0 dXJuIGVycjsKPiAgIH0KPiBAQCAtMjIxLDEwICsyMTgsMTAgQEAgc3RhdGljIGludCBzZXRfcXVl dWVfcHJvcGVydGllc19mcm9tX3VzZXIoc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgKnFfcHJvcGVy dGllcywKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgbG9uZyBrZmRfaW9jdGxf Y3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAo+ IC0JCQkJCXZvaWQgX191c2VyICphcmcpCj4gK3N0YXRpYyBpbnQga2ZkX2lvY3RsX2NyZWF0ZV9x dWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPiArCQkJCQl2 b2lkICpkYXRhKQo+ICAgewo+IC0Jc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncyBh cmdzOwo+ICsJc3RydWN0IGtmZF9pb2N0bF9jcmVhdGVfcXVldWVfYXJncyAqYXJncyA9IGRhdGE7 Cj4gICAJc3RydWN0IGtmZF9kZXYgKmRldjsKPiAgIAlpbnQgZXJyID0gMDsKPiAgIAl1bnNpZ25l ZCBpbnQgcXVldWVfaWQ7Cj4gQEAgLTIzMywxNiArMjMwLDEzIEBAIHN0YXRpYyBsb25nIGtmZF9p b2N0bF9jcmVhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3Mg KnAsCj4gICAKPiAgIAltZW1zZXQoJnFfcHJvcGVydGllcywgMCwgc2l6ZW9mKHN0cnVjdCBxdWV1 ZV9wcm9wZXJ0aWVzKSk7Cj4gICAKPiAtCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJnLCBz aXplb2YoYXJncykpKQo+IC0JCXJldHVybiAtRUZBVUxUOwo+IC0KPiAgIAlwcl9kZWJ1Zygia2Zk OiBjcmVhdGluZyBxdWV1ZSBpb2N0bFxuIik7Cj4gICAKPiAtCWVyciA9IHNldF9xdWV1ZV9wcm9w ZXJ0aWVzX2Zyb21fdXNlcigmcV9wcm9wZXJ0aWVzLCAmYXJncyk7Cj4gKwllcnIgPSBzZXRfcXVl dWVfcHJvcGVydGllc19mcm9tX3VzZXIoJnFfcHJvcGVydGllcywgYXJncyk7Cj4gICAJaWYgKGVy cikKPiAgIAkJcmV0dXJuIGVycjsKPiAgIAo+IC0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdz LmdwdV9pZCk7Cj4gKwlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MtPmdwdV9pZCk7Cj4gICAJ aWYgKGRldiA9PSBOVUxMKQo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAo+IEBAIC0yNTAsNyAr MjQ0LDcgQEAgc3RhdGljIGxvbmcga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgZmlsZSAq ZmlsZXAsIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCwKPiAgIAo+ICAgCXBkZCA9IGtmZF9iaW5kX3By b2Nlc3NfdG9fZGV2aWNlKGRldiwgcCk7Cj4gICAJaWYgKElTX0VSUihwZGQpKSB7Cj4gLQkJZXJy ID0gUFRSX0VSUihwZGQpOwo+ICsJCWVyciA9IC1FU1JDSDsKPiAgIAkJZ290byBlcnJfYmluZF9w cm9jZXNzOwo+ICAgCX0KPiAgIAo+IEBAIC0yNjMsMzMgKzI1NywyNiBAQCBzdGF0aWMgbG9uZyBr ZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9j ZXNzICpwLAo+ICAgCWlmIChlcnIgIT0gMCkKPiAgIAkJZ290byBlcnJfY3JlYXRlX3F1ZXVlOwo+ ICAgCj4gLQlhcmdzLnF1ZXVlX2lkID0gcXVldWVfaWQ7Cj4gKwlhcmdzLT5xdWV1ZV9pZCA9IHF1 ZXVlX2lkOwo+ICAgCj4gICAJLyogUmV0dXJuIGdwdV9pZCBhcyBkb29yYmVsbCBvZmZzZXQgZm9y IG1tYXAgdXNhZ2UgKi8KPiAtCWFyZ3MuZG9vcmJlbGxfb2Zmc2V0ID0gYXJncy5ncHVfaWQgPDwg UEFHRV9TSElGVDsKPiAtCj4gLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihh cmdzKSkpIHsKPiAtCQllcnIgPSAtRUZBVUxUOwo+IC0JCWdvdG8gZXJyX2NvcHlfYXJnc19vdXQ7 Cj4gLQl9Cj4gKwlhcmdzLT5kb29yYmVsbF9vZmZzZXQgPSBhcmdzLT5ncHVfaWQgPDwgUEFHRV9T SElGVDsKPiAgIAo+ICAgCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+ICAgCj4gLQlwcl9kZWJ1 Zygia2ZkOiBxdWV1ZSBpZCAlZCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHlcbiIsIGFyZ3MucXVl dWVfaWQpOwo+ICsJcHJfZGVidWcoImtmZDogcXVldWUgaWQgJWQgd2FzIGNyZWF0ZWQgc3VjY2Vz c2Z1bGx5XG4iLCBhcmdzLT5xdWV1ZV9pZCk7Cj4gICAKPiAgIAlwcl9kZWJ1ZygicmluZyBidWZm ZXIgYWRkcmVzcyA9PSAweCUwMTZsbFhcbiIsCj4gLQkJCWFyZ3MucmluZ19iYXNlX2FkZHJlc3Mp Owo+ICsJCQlhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcyk7Cj4gICAKPiAgIAlwcl9kZWJ1ZygicmVh ZCBwdHIgYWRkcmVzcyAgICA9PSAweCUwMTZsbFhcbiIsCj4gLQkJCWFyZ3MucmVhZF9wb2ludGVy X2FkZHJlc3MpOwo+ICsJCQlhcmdzLT5yZWFkX3BvaW50ZXJfYWRkcmVzcyk7Cj4gICAKPiAgIAlw cl9kZWJ1Zygid3JpdGUgcHRyIGFkZHJlc3MgICA9PSAweCUwMTZsbFhcbiIsCj4gLQkJCWFyZ3Mu d3JpdGVfcG9pbnRlcl9hZGRyZXNzKTsKPiArCQkJYXJncy0+d3JpdGVfcG9pbnRlcl9hZGRyZXNz KTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgCj4gLWVycl9jb3B5X2FyZ3Nfb3V0Ogo+IC0JcHFt X2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgcXVldWVfaWQpOwo+ICAgZXJyX2NyZWF0ZV9xdWV1ZToK PiAgIGVycl9iaW5kX3Byb2Nlc3M6Cj4gICAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7Cj4gQEAg LTI5Nyw5OSArMjg0LDkwIEBAIGVycl9iaW5kX3Byb2Nlc3M6Cj4gICB9Cj4gICAKPiAgIHN0YXRp YyBpbnQga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBr ZmRfcHJvY2VzcyAqcCwKPiAtCQkJCQl2b2lkIF9fdXNlciAqYXJnKQo+ICsJCQkJCXZvaWQgKmRh dGEpCj4gICB7Cj4gICAJaW50IHJldHZhbDsKPiAtCXN0cnVjdCBrZmRfaW9jdGxfZGVzdHJveV9x dWV1ZV9hcmdzIGFyZ3M7Cj4gLQo+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNp emVvZihhcmdzKSkpCj4gLQkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwlzdHJ1Y3Qga2ZkX2lvY3RsX2Rl c3Ryb3lfcXVldWVfYXJncyAqYXJncyA9IGRhdGE7Cj4gICAKPiAgIAlwcl9kZWJ1Zygia2ZkOiBk ZXN0cm95aW5nIHF1ZXVlIGlkICVkIGZvciBQQVNJRCAlZFxuIiwKPiAtCQkJCWFyZ3MucXVldWVf aWQsCj4gKwkJCQlhcmdzLT5xdWV1ZV9pZCwKPiAgIAkJCQlwLT5wYXNpZCk7Cj4gICAKPiAgIAlt dXRleF9sb2NrKCZwLT5tdXRleCk7Cj4gICAKPiAtCXJldHZhbCA9IHBxbV9kZXN0cm95X3F1ZXVl KCZwLT5wcW0sIGFyZ3MucXVldWVfaWQpOwo+ICsJcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUo JnAtPnBxbSwgYXJncy0+cXVldWVfaWQpOwo+ICAgCj4gICAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRl eCk7Cj4gICAJcmV0dXJuIHJldHZhbDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBrZmRfaW9j dGxfdXBkYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAs Cj4gLQkJCQkJdm9pZCBfX3VzZXIgKmFyZykKPiArCQkJCQl2b2lkICpkYXRhKQo+ICAgewo+ICAg CWludCByZXR2YWw7Cj4gLQlzdHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdzIGFyZ3M7 Cj4gKwlzdHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKPiAg IAlzdHJ1Y3QgcXVldWVfcHJvcGVydGllcyBwcm9wZXJ0aWVzOwo+ICAgCj4gLQlpZiAoY29weV9m cm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKPiAtCQlyZXR1cm4gLUVGQVVMVDsK PiAtCj4gLQlpZiAoYXJncy5xdWV1ZV9wZXJjZW50YWdlID4gS0ZEX01BWF9RVUVVRV9QRVJDRU5U QUdFKSB7Cj4gKwlpZiAoYXJncy0+cXVldWVfcGVyY2VudGFnZSA+IEtGRF9NQVhfUVVFVUVfUEVS Q0VOVEFHRSkgewo+ICAgCQlwcl9lcnIoImtmZDogcXVldWUgcGVyY2VudGFnZSBtdXN0IGJlIGJl dHdlZW4gMCB0byBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0VcbiIpOwo+ICAgCQlyZXR1cm4gLUVJ TlZBTDsKPiAgIAl9Cj4gICAKPiAtCWlmIChhcmdzLnF1ZXVlX3ByaW9yaXR5ID4gS0ZEX01BWF9R VUVVRV9QUklPUklUWSkgewo+ICsJaWYgKGFyZ3MtPnF1ZXVlX3ByaW9yaXR5ID4gS0ZEX01BWF9R VUVVRV9QUklPUklUWSkgewo+ICAgCQlwcl9lcnIoImtmZDogcXVldWUgcHJpb3JpdHkgbXVzdCBi ZSBiZXR3ZWVuIDAgdG8gS0ZEX01BWF9RVUVVRV9QUklPUklUWVxuIik7Cj4gICAJCXJldHVybiAt RUlOVkFMOwo+ICAgCX0KPiAgIAo+IC0JaWYgKChhcmdzLnJpbmdfYmFzZV9hZGRyZXNzKSAmJgo+ ICsJaWYgKChhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcykgJiYKPiAgIAkJKCFhY2Nlc3Nfb2soVkVS SUZZX1dSSVRFLAo+IC0JCQkoY29uc3Qgdm9pZCBfX3VzZXIgKikgYXJncy5yaW5nX2Jhc2VfYWRk cmVzcywKPiArCQkJKGNvbnN0IHZvaWQgX191c2VyICopIGFyZ3MtPnJpbmdfYmFzZV9hZGRyZXNz LAo+ICAgCQkJc2l6ZW9mKHVpbnQ2NF90KSkpKSB7Cj4gICAJCXByX2Vycigia2ZkOiBjYW4ndCBh Y2Nlc3MgcmluZyBiYXNlIGFkZHJlc3NcbiIpOwo+ICAgCQlyZXR1cm4gLUVGQVVMVDsKPiAgIAl9 Cj4gICAKPiAtCWlmICghaXNfcG93ZXJfb2ZfMihhcmdzLnJpbmdfc2l6ZSkgJiYgKGFyZ3Mucmlu Z19zaXplICE9IDApKSB7Cj4gKwlpZiAoIWlzX3Bvd2VyX29mXzIoYXJncy0+cmluZ19zaXplKSAm JiAoYXJncy0+cmluZ19zaXplICE9IDApKSB7Cj4gICAJCXByX2Vycigia2ZkOiByaW5nIHNpemUg bXVzdCBiZSBhIHBvd2VyIG9mIDIgb3IgMFxuIik7Cj4gICAJCXJldHVybiAtRUlOVkFMOwo+ICAg CX0KPiAgIAo+IC0JcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy5yaW5nX2Jhc2VfYWRk cmVzczsKPiAtCXByb3BlcnRpZXMucXVldWVfc2l6ZSA9IGFyZ3MucmluZ19zaXplOwo+IC0JcHJv cGVydGllcy5xdWV1ZV9wZXJjZW50ID0gYXJncy5xdWV1ZV9wZXJjZW50YWdlOwo+IC0JcHJvcGVy dGllcy5wcmlvcml0eSA9IGFyZ3MucXVldWVfcHJpb3JpdHk7Cj4gKwlwcm9wZXJ0aWVzLnF1ZXVl X2FkZHJlc3MgPSBhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzczsKPiArCXByb3BlcnRpZXMucXVldWVf c2l6ZSA9IGFyZ3MtPnJpbmdfc2l6ZTsKPiArCXByb3BlcnRpZXMucXVldWVfcGVyY2VudCA9IGFy Z3MtPnF1ZXVlX3BlcmNlbnRhZ2U7Cj4gKwlwcm9wZXJ0aWVzLnByaW9yaXR5ID0gYXJncy0+cXVl dWVfcHJpb3JpdHk7Cj4gICAKPiAgIAlwcl9kZWJ1Zygia2ZkOiB1cGRhdGluZyBxdWV1ZSBpZCAl ZCBmb3IgUEFTSUQgJWRcbiIsCj4gLQkJCWFyZ3MucXVldWVfaWQsIHAtPnBhc2lkKTsKPiArCQkJ YXJncy0+cXVldWVfaWQsIHAtPnBhc2lkKTsKPiAgIAo+ICAgCW11dGV4X2xvY2soJnAtPm11dGV4 KTsKPiAgIAo+IC0JcmV0dmFsID0gcHFtX3VwZGF0ZV9xdWV1ZSgmcC0+cHFtLCBhcmdzLnF1ZXVl X2lkLCAmcHJvcGVydGllcyk7Cj4gKwlyZXR2YWwgPSBwcW1fdXBkYXRlX3F1ZXVlKCZwLT5wcW0s IGFyZ3MtPnF1ZXVlX2lkLCAmcHJvcGVydGllcyk7Cj4gICAKPiAgIAltdXRleF91bmxvY2soJnAt Pm11dGV4KTsKPiAgIAo+ICAgCXJldHVybiByZXR2YWw7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGxv bmcga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKPiAtCQkJ CXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKPiArc3RhdGljIGludCBr ZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koc3RydWN0IGZpbGUgKmZpbGVwLAo+ICsJCQkJCXN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0YSkKPiAgIHsKPiAtCXN0cnVjdCBrZmRfaW9j dGxfc2V0X21lbW9yeV9wb2xpY3lfYXJncyBhcmdzOwo+ICsJc3RydWN0IGtmZF9pb2N0bF9zZXRf bWVtb3J5X3BvbGljeV9hcmdzICphcmdzID0gZGF0YTsKPiAgIAlzdHJ1Y3Qga2ZkX2RldiAqZGV2 Owo+ICAgCWludCBlcnIgPSAwOwo+ICAgCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsK PiAgIAllbnVtIGNhY2hlX3BvbGljeSBkZWZhdWx0X3BvbGljeSwgYWx0ZXJuYXRlX3BvbGljeTsK PiAgIAo+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCj4g LQkJcmV0dXJuIC1FRkFVTFQ7Cj4gLQo+IC0JaWYgKGFyZ3MuZGVmYXVsdF9wb2xpY3kgIT0gS0ZE X0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKPiAtCSAgICAmJiBhcmdzLmRlZmF1bHRfcG9saWN5 ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX05PTkNPSEVSRU5UKSB7Cj4gKwlpZiAoYXJncy0+ZGVm YXVsdF9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKPiArCSAgICAmJiBh cmdzLT5kZWZhdWx0X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkg ewo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gICAKPiAtCWlmIChhcmdzLmFsdGVybmF0 ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJFTlQKPiAtCSAgICAmJiBhcmdz LmFsdGVybmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfTk9OQ09IRVJFTlQpIHsK PiArCWlmIChhcmdzLT5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NP SEVSRU5UCj4gKwkgICAgJiYgYXJncy0+YWx0ZXJuYXRlX3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hF X1BPTElDWV9OT05DT0hFUkVOVCkgewo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gICAK PiAtCWRldiA9IGtmZF9kZXZpY2VfYnlfaWQoYXJncy5ncHVfaWQpOwo+ICsJZGV2ID0ga2ZkX2Rl dmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwo+ICAgCWlmIChkZXYgPT0gTlVMTCkKPiAgIAkJcmV0 dXJuIC1FSU5WQUw7Cj4gICAKPiBAQCAtMzk3LDIzICszNzUsMjMgQEAgc3RhdGljIGxvbmcga2Zk X2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKPiAgIAo+ICAgCXBk ZCA9IGtmZF9iaW5kX3Byb2Nlc3NfdG9fZGV2aWNlKGRldiwgcCk7Cj4gICAJaWYgKElTX0VSUihw ZGQpKSB7Cj4gLQkJZXJyID0gUFRSX0VSUihwZGQpOwo+ICsJCWVyciA9IC1FU1JDSDsKPiAgIAkJ Z290byBvdXQ7Cj4gICAJfQo+ICAgCj4gLQlkZWZhdWx0X3BvbGljeSA9IChhcmdzLmRlZmF1bHRf cG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+ICsJZGVmYXVsdF9wb2xp Y3kgPSAoYXJncy0+ZGVmYXVsdF9wb2xpY3kgPT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfQ09IRVJF TlQpCj4gICAJCQkgPyBjYWNoZV9wb2xpY3lfY29oZXJlbnQgOiBjYWNoZV9wb2xpY3lfbm9uY29o ZXJlbnQ7Cj4gICAKPiAgIAlhbHRlcm5hdGVfcG9saWN5ID0KPiAtCQkoYXJncy5hbHRlcm5hdGVf cG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+ICsJCShhcmdzLT5hbHRl cm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UKQo+ICAgCQkgICA/ IGNhY2hlX3BvbGljeV9jb2hlcmVudCA6IGNhY2hlX3BvbGljeV9ub25jb2hlcmVudDsKPiAgIAo+ ICAgCWlmICghZGV2LT5kcW0tPnNldF9jYWNoZV9tZW1vcnlfcG9saWN5KGRldi0+ZHFtLAo+ICAg CQkJCSZwZGQtPnFwZCwKPiAgIAkJCQlkZWZhdWx0X3BvbGljeSwKPiAgIAkJCQlhbHRlcm5hdGVf cG9saWN5LAo+IC0JCQkJKHZvaWQgX191c2VyICopYXJncy5hbHRlcm5hdGVfYXBlcnR1cmVfYmFz ZSwKPiAtCQkJCWFyZ3MuYWx0ZXJuYXRlX2FwZXJ0dXJlX3NpemUpKQo+ICsJCQkJKHZvaWQgX191 c2VyICopYXJncy0+YWx0ZXJuYXRlX2FwZXJ0dXJlX2Jhc2UsCj4gKwkJCQlhcmdzLT5hbHRlcm5h dGVfYXBlcnR1cmVfc2l6ZSkpCj4gICAJCWVyciA9IC1FSU5WQUw7Cj4gICAKPiAgIG91dDoKPiBA QCAtNDIyLDUzICs0MDAsNDQgQEAgb3V0Ogo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiAt c3RhdGljIGxvbmcga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhzdHJ1Y3QgZmlsZSAqZmls ZXAsCj4gLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgX191c2VyICphcmcpCj4gK3N0 YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhzdHJ1Y3QgZmlsZSAqZmlsZXAs Cj4gKwkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgKmRhdGEpCj4gICB7Cj4gLQlzdHJ1 Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzIGFyZ3M7Cj4gKwlzdHJ1Y3Qga2Zk X2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzICphcmdzID0gZGF0YTsKPiAgIAlzdHJ1Y3Qg a2ZkX2RldiAqZGV2Owo+ICAgCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwo+ICAgCj4gLQlpZiAoY29w eV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKPiAtCQlyZXR1cm4gLUVGQVVM VDsKPiAtCj4gLQlkZXYgPSBrZmRfZGV2aWNlX2J5X2lkKGFyZ3MuZ3B1X2lkKTsKPiArCWRldiA9 IGtmZF9kZXZpY2VfYnlfaWQoYXJncy0+Z3B1X2lkKTsKPiAgIAlpZiAoZGV2ID09IE5VTEwpCj4g ICAJCXJldHVybiAtRUlOVkFMOwo+ICAgCj4gICAJLyogUmVhZGluZyBHUFUgY2xvY2sgY291bnRl ciBmcm9tIEtHRCAqLwo+IC0JYXJncy5ncHVfY2xvY2tfY291bnRlciA9IGtmZDJrZ2QtPmdldF9n cHVfY2xvY2tfY291bnRlcihkZXYtPmtnZCk7Cj4gKwlhcmdzLT5ncHVfY2xvY2tfY291bnRlciA9 IGtmZDJrZ2QtPmdldF9ncHVfY2xvY2tfY291bnRlcihkZXYtPmtnZCk7Cj4gICAKPiAgIAkvKiBO byBhY2Nlc3MgdG8gcmR0c2MuIFVzaW5nIHJhdyBtb25vdG9uaWMgdGltZSAqLwo+ICAgCWdldHJh d21vbm90b25pYygmdGltZSk7Cj4gLQlhcmdzLmNwdV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90 KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKPiArCWFyZ3MtPmNwdV9jbG9ja19jb3VudGVyID0gKHVp bnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKPiAgIAo+ICAgCWdldF9tb25vdG9uaWNfYm9v dHRpbWUoJnRpbWUpOwo+IC0JYXJncy5zeXN0ZW1fY2xvY2tfY291bnRlciA9ICh1aW50NjRfdCl0 aW1lc3BlY190b19ucygmdGltZSk7Cj4gKwlhcmdzLT5zeXN0ZW1fY2xvY2tfY291bnRlciA9ICh1 aW50NjRfdCl0aW1lc3BlY190b19ucygmdGltZSk7Cj4gICAKPiAgIAkvKiBTaW5jZSB0aGUgY291 bnRlciBpcyBpbiBuYW5vLXNlY29uZHMgd2UgdXNlIDFHSHogZnJlcXVlbmN5ICovCj4gLQlhcmdz LnN5c3RlbV9jbG9ja19mcmVxID0gMTAwMDAwMDAwMDsKPiAtCj4gLQlpZiAoY29weV90b191c2Vy KGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCj4gLQkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwlhcmdz LT5zeXN0ZW1fY2xvY2tfZnJlcSA9IDEwMDAwMDAwMDA7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+ICAgCj4gICBzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVy ZXMoc3RydWN0IGZpbGUgKmZpbHAsCj4gLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQg X191c2VyICphcmcpCj4gKwkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgKmRhdGEpCj4g ICB7Cj4gLQlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlc19hcmdzIGFyZ3M7 Cj4gKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlc19hcmdzICphcmdzID0g ZGF0YTsKPiAgIAlzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlX2FwZXJ0dXJlcyAqcEFwZXJ0dXJl Owo+ICAgCXN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsKPiAgIAo+ICAgCWRldl9kYmco a2ZkX2RldmljZSwgImdldCBhcGVydHVyZXMgZm9yIFBBU0lEICVkIiwgcC0+cGFzaWQpOwo+ICAg Cj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKPiAtCQly ZXR1cm4gLUVGQVVMVDsKPiAtCj4gLQlhcmdzLm51bV9vZl9ub2RlcyA9IDA7Cj4gKwlhcmdzLT5u dW1fb2Zfbm9kZXMgPSAwOwo+ICAgCj4gICAJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwo+ICAgCj4g QEAgLTQ3Nyw3ICs0NDYsOCBAQCBzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVy dHVyZXMoc3RydWN0IGZpbGUgKmZpbHAsCj4gICAJCS8qIFJ1biBvdmVyIGFsbCBwZGQgb2YgdGhl IHByb2Nlc3MgKi8KPiAgIAkJcGRkID0ga2ZkX2dldF9maXJzdF9wcm9jZXNzX2RldmljZV9kYXRh KHApOwo+ICAgCQlkbyB7Cj4gLQkJCXBBcGVydHVyZSA9ICZhcmdzLnByb2Nlc3NfYXBlcnR1cmVz W2FyZ3MubnVtX29mX25vZGVzXTsKPiArCQkJcEFwZXJ0dXJlID0KPiArCQkJCSZhcmdzLT5wcm9j ZXNzX2FwZXJ0dXJlc1thcmdzLT5udW1fb2Zfbm9kZXNdOwo+ICAgCQkJcEFwZXJ0dXJlLT5ncHVf aWQgPSBwZGQtPmRldi0+aWQ7Cj4gICAJCQlwQXBlcnR1cmUtPmxkc19iYXNlID0gcGRkLT5sZHNf YmFzZTsKPiAgIAkJCXBBcGVydHVyZS0+bGRzX2xpbWl0ID0gcGRkLT5sZHNfbGltaXQ7Cj4gQEAg LTQ4Nyw3ICs0NTcsNyBAQCBzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vzc19hcGVydHVy ZXMoc3RydWN0IGZpbGUgKmZpbHAsCj4gICAJCQlwQXBlcnR1cmUtPnNjcmF0Y2hfbGltaXQgPSBw ZGQtPnNjcmF0Y2hfbGltaXQ7Cj4gICAKPiAgIAkJCWRldl9kYmcoa2ZkX2RldmljZSwKPiAtCQkJ CSJub2RlIGlkICV1XG4iLCBhcmdzLm51bV9vZl9ub2Rlcyk7Cj4gKwkJCQkibm9kZSBpZCAldVxu IiwgYXJncy0+bnVtX29mX25vZGVzKTsKPiAgIAkJCWRldl9kYmcoa2ZkX2RldmljZSwKPiAgIAkJ CQkiZ3B1IGlkICV1XG4iLCBwZGQtPmRldi0+aWQpOwo+ICAgCQkJZGV2X2RiZyhrZmRfZGV2aWNl LAo+IEBAIC01MDMsMjMgKzQ3MywyMyBAQCBzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vz c19hcGVydHVyZXMoc3RydWN0IGZpbGUgKmZpbHAsCj4gICAJCQlkZXZfZGJnKGtmZF9kZXZpY2Us Cj4gICAJCQkJInNjcmF0Y2hfbGltaXQgJWxsWFxuIiwgcGRkLT5zY3JhdGNoX2xpbWl0KTsKPiAg IAo+IC0JCQlhcmdzLm51bV9vZl9ub2RlcysrOwo+ICsJCQlhcmdzLT5udW1fb2Zfbm9kZXMrKzsK PiAgIAkJfSB3aGlsZSAoKHBkZCA9IGtmZF9nZXRfbmV4dF9wcm9jZXNzX2RldmljZV9kYXRhKHAs IHBkZCkpICE9IE5VTEwgJiYKPiAtCQkJCShhcmdzLm51bV9vZl9ub2RlcyA8IE5VTV9PRl9TVVBQ T1JURURfR1BVUykpOwo+ICsJCQkJKGFyZ3MtPm51bV9vZl9ub2RlcyA8IE5VTV9PRl9TVVBQT1JU RURfR1BVUykpOwo+ICAgCX0KPiAgIAo+ICAgCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+ICAg Cj4gLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVvZihhcmdzKSkpCj4gLQkJcmV0 dXJuIC1FRkFVTFQ7Cj4gLQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgbG9u ZyBrZmRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25l ZCBsb25nIGFyZykKPiAgIHsKPiAgIAlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnByb2Nlc3M7Cj4gLQls b25nIGVyciA9IC1FSU5WQUw7Cj4gKwljaGFyIHN0YWNrX2tkYXRhWzEyOF07Cj4gKwljaGFyICpr ZGF0YSA9IE5VTEw7Cj4gKwl1bnNpZ25lZCBpbnQgdXNpemUsIGFzaXplOwo+ICsJaW50IHJldGNv ZGUgPSAtRUlOVkFMOwo+ICAgCj4gICAJZGV2X2RiZyhrZmRfZGV2aWNlLAo+ICAgCQkiaW9jdGwg Y21kIDB4JXggKCMlZCksIGFyZyAweCVseFxuIiwKPiBAQCAtNTI5LDU0ICs0OTksODQgQEAgc3Rh dGljIGxvbmcga2ZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpCj4gICAJaWYgKElTX0VSUihwcm9jZXNzKSkKPiAgIAkJcmV0dXJu IFBUUl9FUlIocHJvY2Vzcyk7Cj4gICAKPiArCWlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkp IHsKPiArCQlpZiAoYXNpemUgPD0gc2l6ZW9mKHN0YWNrX2tkYXRhKSkgewo+ICsJCQlrZGF0YSA9 IHN0YWNrX2tkYXRhOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWtkYXRhID0ga21hbGxvYyhhc2l6ZSwg R0ZQX0tFUk5FTCk7Cj4gKwkJCWlmICgha2RhdGEpIHsKPiArCQkJCXJldGNvZGUgPSAtRU5PTUVN Owo+ICsJCQkJZ290byBlcnJfaTE7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJaWYgKGFzaXplID4gdXNp emUpCj4gKwkJCW1lbXNldChrZGF0YSArIHVzaXplLCAwLCBhc2l6ZSAtIHVzaXplKTsKPiArCX0K PiArCj4gKwlpZiAoY21kICYgSU9DX0lOKSB7Cj4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtkYXRh LCAodm9pZCBfX3VzZXIgKilhcmcsIHVzaXplKSAhPSAwKSB7Cj4gKwkJCXJldGNvZGUgPSAtRUZB VUxUOwo+ICsJCQlnb3RvIGVycl9pMTsKPiArCQl9Cj4gKwl9IGVsc2UgaWYgKGNtZCAmIElPQ19P VVQpIHsKPiArCQltZW1zZXQoa2RhdGEsIDAsIHVzaXplKTsKPiArCX0KPiArCj4gKwo+ICAgCXN3 aXRjaCAoY21kKSB7Cj4gICAJY2FzZSBLRkRfSU9DX0dFVF9WRVJTSU9OOgo+IC0JCWVyciA9IGtm ZF9pb2N0bF9nZXRfdmVyc2lvbihmaWxlcCwgcHJvY2VzcywgKHZvaWQgX191c2VyICopYXJnKTsK PiArCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2dldF92ZXJzaW9uKGZpbGVwLCBwcm9jZXNzLCBrZGF0 YSk7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgS0ZEX0lPQ19DUkVBVEVfUVVFVUU6Cj4gLQkJZXJy ID0ga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPiAtCQkJCQkJKHZvaWQg X191c2VyICopYXJnKTsKPiArCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZShmaWxl cCwgcHJvY2VzcywKPiArCQkJCQkJa2RhdGEpOwo+ICAgCQlicmVhazsKPiAgIAo+ICAgCWNhc2Ug S0ZEX0lPQ19ERVNUUk9ZX1FVRVVFOgo+IC0JCWVyciA9IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVl KGZpbGVwLCBwcm9jZXNzLAo+IC0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOwo+ICsJCXJldGNv ZGUgPSBrZmRfaW9jdGxfZGVzdHJveV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPiArCQkJCQkJa2Rh dGEpOwo+ICAgCQlicmVhazsKPiAgIAo+ICAgCWNhc2UgS0ZEX0lPQ19TRVRfTUVNT1JZX1BPTElD WToKPiAtCQllcnIgPSBrZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koZmlsZXAsIHByb2Nlc3Ms Cj4gLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7Cj4gKwkJcmV0Y29kZSA9IGtmZF9pb2N0bF9z ZXRfbWVtb3J5X3BvbGljeShmaWxlcCwgcHJvY2VzcywKPiArCQkJCQkJa2RhdGEpOwo+ICAgCQli cmVhazsKPiAgIAo+ICAgCWNhc2UgS0ZEX0lPQ19HRVRfQ0xPQ0tfQ09VTlRFUlM6Cj4gLQkJZXJy ID0ga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhmaWxlcCwgcHJvY2VzcywKPiAtCQkJCQkJ KHZvaWQgX191c2VyICopYXJnKTsKPiArCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2dldF9jbG9ja19j b3VudGVycyhmaWxlcCwgcHJvY2VzcywKPiArCQkJCQkJa2RhdGEpOwo+ICAgCQlicmVhazsKPiAg IAo+ICAgCWNhc2UgS0ZEX0lPQ19HRVRfUFJPQ0VTU19BUEVSVFVSRVM6Cj4gLQkJZXJyID0ga2Zk X2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhmaWxlcCwgcHJvY2VzcywKPiAtCQkJCQkJKHZv aWQgX191c2VyICopYXJnKTsKPiArCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2Fw ZXJ0dXJlcyhmaWxlcCwgcHJvY2VzcywKPiArCQkJCQkJa2RhdGEpOwo+ICAgCQlicmVhazsKPiAg IAo+ICAgCWNhc2UgS0ZEX0lPQ19VUERBVEVfUVVFVUU6Cj4gLQkJZXJyID0ga2ZkX2lvY3RsX3Vw ZGF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPiAtCQkJCQkJKHZvaWQgX191c2VyICopYXJnKTsK PiArCQlyZXRjb2RlID0ga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKPiAr CQkJCQkJa2RhdGEpOwo+ICAgCQlicmVhazsKPiAgIAo+ICAgCWRlZmF1bHQ6Cj4gLQkJZGV2X2Vy cihrZmRfZGV2aWNlLAo+ICsJCWRldl9kYmcoa2ZkX2RldmljZSwKPiAgIAkJCSJ1bmtub3duIGlv Y3RsIGNtZCAweCV4LCBhcmcgMHglbHgpXG4iLAo+ICAgCQkJY21kLCBhcmcpOwo+IC0JCWVyciA9 IC1FSU5WQUw7Cj4gKwkJcmV0Y29kZSA9IC1FSU5WQUw7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiAg IAo+IC0JaWYgKGVyciA8IDApCj4gLQkJZGV2X2VycihrZmRfZGV2aWNlLAo+IC0JCQkiaW9jdGwg ZXJyb3IgJWxkIGZvciBpb2N0bCBjbWQgMHgleCAoIyVkKVxuIiwKPiAtCQkJZXJyLCBjbWQsIF9J T0NfTlIoY21kKSk7Cj4gKwlpZiAoY21kICYgSU9DX09VVCkKPiArCQlpZiAoY29weV90b191c2Vy KCh2b2lkIF9fdXNlciAqKWFyZywga2RhdGEsIHVzaXplKSAhPSAwKQo+ICsJCQlyZXRjb2RlID0g LUVGQVVMVDsKPiAgIAo+IC0JcmV0dXJuIGVycjsKPiArZXJyX2kxOgo+ICsJaWYgKGtkYXRhICE9 IHN0YWNrX2tkYXRhKQo+ICsJCWtmcmVlKGtkYXRhKTsKPiArCj4gKwlpZiAocmV0Y29kZSkKPiAr CQlkZXZfZGJnKGtmZF9kZXZpY2UsICJyZXQgPSAlZFxuIiwgcmV0Y29kZSk7Cj4gKwo+ICsJcmV0 dXJuIHJldGNvZGU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQga2ZkX21tYXAoc3RydWN0IGZp bGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK