From mboxrd@z Thu Jan 1 00:00:00 1970 From: j.glisse@gmail.com Subject: [PATCH] i915: purify user ptr ioctl through the fire of truth. Date: Mon, 30 Jun 2014 14:23:32 -0400 Message-ID: <1404152612-13159-1-git-send-email-j.glisse@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qa0-f54.google.com (mail-qa0-f54.google.com [209.85.216.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 4B8856E15E for ; Mon, 30 Jun 2014 11:23:42 -0700 (PDT) Received: by mail-qa0-f54.google.com with SMTP id v10so6746995qac.27 for ; Mon, 30 Jun 2014 11:23:41 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, Jerome Glisse List-Id: dri-devel@lists.freedesktop.org RnJvbTogSmVyb21lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgoKSGVyZXN5IHNob3VsZCBu b3QgYmUgdG9sZXJhdGVkLCBhbnkgaW9jdGwgdGhhdCByZWx5IG9uIHB1cmUgbHVjawpzaG91bGQg ZGllLiBWaW9sYXRpbmcgbWVtb3J5IHBpbmluZyBrZXJuZWwgcG9saWN5IGFuZCBhbGwgdGhlCnJl YXNvbmFibGUgZXhwZWN0aW9uIGtlcm5lbCBoYXZlIGFib3V0IHVzZXIgb2YgbW11X25vdGlmaWVy IGFwaQppcyBub3QgdG9sZXJhYmxlLgoKQmVjYXVzZSB3ZSBjYW4gbmVpdGhlciBicm9rZSBvbGQg dXNlcnNwYWNlIHRoZSBpb2N0bCBpcyBsZWZ0IGJ1dAppIHdpbGwgbmV2ZXIgc3VjY2VlZCB3aGlj aCBpcyB0aGUgb25seSByZWxpYWJsZSBvcHRpb24gZm9yIGl0LgoKU2lnbmVkLW9mZi1ieTogSsOp csO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDE1IC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2Vy cHRyLmMgfCA2ODcgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICB8ICAgMiAtCiA0IGZpbGVzIGNoYW5nZWQsIDUg aW5zZXJ0aW9ucygrKSwgNzAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmlu ZGV4IDhjZWE1OTYuLjM5NzBiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzkzLDcg KzM5Myw2IEBAIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7CiAJCXUzMiB0aWxpbmc6MjsK IAkJdTMyIGRpcnR5OjE7CiAJCXUzMiBwdXJnZWFibGU6MTsKLQkJdTMyIHVzZXJwdHI6MTsKIAkJ czMyIHJpbmc6NDsKIAkJdTMyIGNhY2hlX2xldmVsOjM7CiAJfSAqKmFjdGl2ZV9ibywgKipwaW5u ZWRfYm87CkBAIC0xNzUwLDE5ICsxNzQ5LDYgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg ewogCiAJLyoqIGZvciBwaHkgYWxsb2NhdGVkIG9iamVjdHMgKi8KIAlkcm1fZG1hX2hhbmRsZV90 ICpwaHlzX2hhbmRsZTsKLQotCXVuaW9uIHsKLQkJc3RydWN0IGk5MTVfZ2VtX3VzZXJwdHIgewot CQkJdWludHB0cl90IHB0cjsKLQkJCXVuc2lnbmVkIHJlYWRfb25seSA6MTsKLQkJCXVuc2lnbmVk IHdvcmtlcnMgOjQ7Ci0jZGVmaW5lIEk5MTVfR0VNX1VTRVJQVFJfTUFYX1dPUktFUlMgMTUKLQot CQkJc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JCQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbjsK LQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKLQkJfSB1c2VycHRyOwotCX07CiB9OwogI2Rl ZmluZSB0b19pbnRlbF9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QsIGJhc2UpCiAKQEAgLTIxOTUsNyArMjE4MSw2IEBAIGludCBpOTE1X2dlbV9zZXRfdGls aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7CiBpbnQgaTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotaW50 IGk5MTVfZ2VtX2luaXRfdXNlcnB0cihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBpOTE1 X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJ CQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogaW50IGk5MTVfZ2VtX2dldF9hcGVydHVyZV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKaW5kZXggZjZkMTIzOC4uMzBmYzc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBA IC00NzU0LDcgKzQ3NTQsNiBAQCBpbnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCQkJRFJNX0RFQlVHX0RSSVZFUigiYWxsb3cgd2FrZSBhY2sgdGltZWQgb3V0XG4iKTsK IAl9CiAKLQlpOTE1X2dlbV9pbml0X3VzZXJwdHIoZGV2KTsKIAlpOTE1X2dlbV9pbml0X2dsb2Jh bF9ndHQoZGV2KTsKIAogCXJldCA9IGk5MTVfZ2VtX2NvbnRleHRfaW5pdChkZXYpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IDE5MWFjNzEuLmYyNjFjYjkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKQEAgLTIyLDY5MiArMjIsMTUg QEAKICAqCiAgKi8KIAotI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgog I2luY2x1ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1ZGUg ImludGVsX2Rydi5oIgotI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8 bGludXgvbW11X25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+Ci0jaW5j bHVkZSA8bGludXgvc3dhcC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfTU1VX05PVElGSUVSKQot I2luY2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KLQotc3RydWN0IGk5MTVfbW11X25vdGlm aWVyIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQlzdHJ1 Y3QgbW11X25vdGlmaWVyIG1uOwotCXN0cnVjdCByYl9yb290IG9iamVjdHM7Ci0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlzdHJ1Y3Qgd29ya19zdHJ1 Y3Qgd29yazsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwot fTsKLQotc3RydWN0IGk5MTVfbW11X29iamVjdCB7Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVy ICptbXU7Ci0Jc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsKLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwotfTsKLQotc3RhdGljIHZvaWQgaTkxNV9nZW1fdXNlcnB0cl9tbl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKl9tbiwKLQkJCQkJCSAg ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkJICAg ICAgIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCQkJICAgICAgIGVudW0gbW11X2V2ZW50IGV2ZW50 KQotewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPSBjb250YWluZXJfb2YoX21uLCBz dHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKLQlzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2Rl ICppdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWwgPSAwOwotCi0JZW5kLS07IC8qIGlu dGVydmFsIHJhbmdlcyBhcmUgaW5jbHVzaXZlLCBidXQgaW52YWxpZGF0ZSByYW5nZSBpcyBleGNs dXNpdmUgKi8KLQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKLQotCQlvYmogPSBOVUxMOwotCQlzcGluX2xvY2soJm1uLT5sb2NrKTsKLQkJ aWYgKHNlcmlhbCA9PSBtbi0+c2VyaWFsKQotCQkJaXQgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4 dChpdCwgc3RhcnQsIGVuZCk7Ci0JCWVsc2UKLQkJCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2Zp cnN0KCZtbi0+b2JqZWN0cywgc3RhcnQsIGVuZCk7Ci0JCWlmIChpdCAhPSBOVUxMKSB7Ci0JCQlv YmogPSBjb250YWluZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KS0+b2JqOwot CQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJhc2UpOwotCQkJc2VyaWFsID0gbW4t PnNlcmlhbDsKLQkJfQotCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwotCQlpZiAob2JqID09IE5V TEwpCi0JCQlyZXR1cm47Ci0KLQkJbXV0ZXhfbG9jaygmbW4tPmRldi0+c3RydWN0X211dGV4KTsK LQkJLyogQ2FuY2VsIGFueSBhY3RpdmUgd29ya2VyIGFuZCBmb3JjZSB1cyB0byByZS1ldmFsdWF0 ZSBndXAgKi8KLQkJb2JqLT51c2VycHRyLndvcmsgPSBOVUxMOwotCi0JCWlmIChvYmotPnBhZ2Vz ICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUobW4tPmRldik7Ci0JCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKnRtcDsKLQkJCWJvb2wgd2Fz X2ludGVycnVwdGlibGU7Ci0KLQkJCXdhc19pbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmlu dGVycnVwdGlibGU7Ci0JCQlkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSA9IGZhbHNlOwotCi0J CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB0bXAsICZvYmotPnZtYV9saXN0LCB2bWFf bGluaykgewotCQkJCWludCByZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKLQkJCQlXQVJOX09O KHJldCAmJiByZXQgIT0gLUVJTyk7Ci0JCQl9Ci0JCQlXQVJOX09OKGk5MTVfZ2VtX29iamVjdF9w dXRfcGFnZXMob2JqKSk7Ci0KLQkJCWRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlID0gd2FzX2lu dGVycnVwdGlibGU7Ci0JCX0KLQotCQlzdGFydCA9IG9iai0+dXNlcnB0ci5wdHIgKyBvYmotPmJh c2Uuc2l6ZTsKLQotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKLQkJ bXV0ZXhfdW5sb2NrKCZtbi0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCX0KLX0KLQotc3RhdGljIGNv bnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7 Ci0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgPSBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoK LV9faTkxNV9tbXVfbm90aWZpZXJfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKLQlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdTsKLQotCS8qIFBy b3RlY3RlZCBieSBkZXYtPnN0cnVjdF9tdXRleCAqLwotCWhhc2hfZm9yX2VhY2hfcG9zc2libGUo ZGV2X3ByaXYtPm1tdV9ub3RpZmllcnMsIG1tdSwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpbW0pCi0J CWlmIChtbXUtPm1tID09IG1tKQotCQkJcmV0dXJuIG1tdTsKLQotCXJldHVybiBOVUxMOwotfQot Ci1zdGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKLWk5MTVfbW11X25vdGlmaWVyX2dl dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGk5 MTVfbW11X25vdGlmaWVyICptbXU7Ci0JaW50IHJldDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmRldi0+c3RydWN0X211dGV4KTsKLQotCW1tdSA9IF9faTkxNV9tbXVfbm90aWZpZXJfbG9va3Vw KGRldiwgbW0pOwotCWlmIChtbXUpCi0JCXJldHVybiBtbXU7Ci0KLQltbXUgPSBrbWFsbG9jKHNp emVvZigqbW11KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1tdSA9PSBOVUxMKQotCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKLQotCXNwaW5fbG9ja19pbml0KCZtbXUtPmxvY2spOwotCW1tdS0+ZGV2 ID0gZGV2OwotCW1tdS0+bW4ub3BzID0gJmk5MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXI7Ci0JbW11 LT5tbSA9IG1tOwotCW1tdS0+b2JqZWN0cyA9IFJCX1JPT1Q7Ci0JbW11LT5jb3VudCA9IDA7Ci0J bW11LT5zZXJpYWwgPSAwOwotCi0JLyogUHJvdGVjdGVkIGJ5IG1tYXBfc2VtICh3cml0ZS1sb2Nr KSAqLwotCXJldCA9IF9fbW11X25vdGlmaWVyX3JlZ2lzdGVyKCZtbXUtPm1uLCBtbSk7Ci0JaWYg KHJldCkgewotCQlrZnJlZShtbXUpOwotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KLQotCS8q IFByb3RlY3RlZCBieSBkZXYtPnN0cnVjdF9tdXRleCAqLwotCWhhc2hfYWRkKGRldl9wcml2LT5t bXVfbm90aWZpZXJzLCAmbW11LT5ub2RlLCAodW5zaWduZWQgbG9uZyltbSk7Ci0JcmV0dXJuIG1t dTsKLX0KLQotc3RhdGljIHZvaWQKLV9faTkxNV9tbXVfbm90aWZpZXJfZGVzdHJveV93b3JrZXIo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAq bW11ID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqbW11KSwgd29yayk7Ci0JbW11X25vdGlm aWVyX3VucmVnaXN0ZXIoJm1tdS0+bW4sIG1tdS0+bW0pOwotCWtmcmVlKG1tdSk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1fX2k5MTVfbW11X25vdGlmaWVyX2Rlc3Ryb3koc3RydWN0IGk5MTVfbW11X25v dGlmaWVyICptbXUpCi17Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbW11LT5kZXYtPnN0cnVjdF9t dXRleCk7Ci0KLQkvKiBQcm90ZWN0ZWQgYnkgZGV2LT5zdHJ1Y3RfbXV0ZXggKi8KLQloYXNoX2Rl bCgmbW11LT5ub2RlKTsKLQotCS8qIE91ciBsb2NrIG9yZGVyaW5nIGlzOiBtbWFwX3NlbSwgbW11 X25vdGlmaWVyX3NjcnUsIHN0cnVjdF9tdXRleC4KLQkgKiBXZSBlbnRlciB0aGUgZnVuY3Rpb24g aG9sZGluZyBzdHJ1Y3RfbXV0ZXgsIHRoZXJlZm9yZSB3ZSBuZWVkCi0JICogdG8gZHJvcCBvdXIg bXV0ZXggcHJpb3IgdG8gY2FsbGluZyBtbXVfbm90aWZpZXJfdW5yZWdpc3RlciBpbgotCSAqIG9y ZGVyIHRvIHByZXZlbnQgbG9jayBpbnZlcnNpb24gKGFuZCBzeXN0ZW0td2lkZSBkZWFkbG9jaykK LQkgKiBiZXR3ZWVuIHRoZSBtbWFwX3NlbSBhbmQgc3RydWN0LW11dGV4LiBIZW5jZSB3ZSBkZWZl ciB0aGUKLQkgKiB1bnJlZ2lzdHJhdGlvbiB0byBhIHdvcmtxdWV1ZSB3aGVyZSB3ZSBob2xkIG5v IGxvY2tzLgotCSAqLwotCUlOSVRfV09SSygmbW11LT53b3JrLCBfX2k5MTVfbW11X25vdGlmaWVy X2Rlc3Ryb3lfd29ya2VyKTsKLQlzY2hlZHVsZV93b3JrKCZtbXUtPndvcmspOwotfQotCi1zdGF0 aWMgdm9pZCBfX2k5MTVfbW11X25vdGlmaWVyX3VwZGF0ZV9zZXJpYWwoc3RydWN0IGk5MTVfbW11 X25vdGlmaWVyICptbXUpCi17Ci0JaWYgKCsrbW11LT5zZXJpYWwgPT0gMCkKLQkJbW11LT5zZXJp YWwgPSAxOwotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9tbXVfbm90aWZpZXJfZGVsKHN0cnVjdCBp OTE1X21tdV9ub3RpZmllciAqbW11LAotCQkgICAgICBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICpt bikKLXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtbXUtPmRldi0+c3RydWN0X211dGV4KTsKLQot CXNwaW5fbG9jaygmbW11LT5sb2NrKTsKLQlpbnRlcnZhbF90cmVlX3JlbW92ZSgmbW4tPml0LCAm bW11LT5vYmplY3RzKTsKLQlfX2k5MTVfbW11X25vdGlmaWVyX3VwZGF0ZV9zZXJpYWwobW11KTsK LQlzcGluX3VubG9jaygmbW11LT5sb2NrKTsKLQotCS8qIFByb3RlY3RlZCBhZ2FpbnN0IF9hZGQo KSBieSBkZXYtPnN0cnVjdF9tdXRleCAqLwotCWlmICgtLW1tdS0+Y291bnQgPT0gMCkKLQkJX19p OTE1X21tdV9ub3RpZmllcl9kZXN0cm95KG1tdSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfbW11 X25vdGlmaWVyX2FkZChzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1tdSwKLQkJICAgICAgc3Ry dWN0IGk5MTVfbW11X29iamVjdCAqbW4pCi17Ci0Jc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSAq aXQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKG1t dS0+ZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogTWFrZSBzdXJlIHdlIGRy b3AgdGhlIGZpbmFsIGFjdGl2ZSByZWZlcmVuY2UgKGFuZCB0aGVyZWJ5Ci0JICogcmVtb3ZlIHRo ZSBvYmplY3RzIGZyb20gdGhlIGludGVydmFsIHRyZWUpIGJlZm9yZSB3ZSBkbwotCSAqIHRoZSBj aGVjayBmb3Igb3ZlcmxhcHBpbmcgb2JqZWN0cy4KLQkgKi8KLQlpOTE1X2dlbV9yZXRpcmVfcmVx dWVzdHMobW11LT5kZXYpOwotCi0JLyogRGlzYWxsb3cgb3ZlcmxhcHBpbmcgdXNlcnB0ciBvYmpl Y3RzICovCi0Jc3Bpbl9sb2NrKCZtbXUtPmxvY2spOwotCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVy X2ZpcnN0KCZtbXUtPm9iamVjdHMsCi0JCQkJICAgICAgbW4tPml0LnN0YXJ0LCBtbi0+aXQubGFz dCk7Ci0JaWYgKGl0KSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0KLQkJ LyogV2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmaXJzdCBvYmplY3QgaW4gdGhlIHJhbmdlIGFz IGl0Ci0JCSAqIGVpdGhlciBoYXMgY2FuY2VsbGVkIGd1cCB3b3JrIHF1ZXVlZCBhbmQgd2UgbmVl ZCB0bwotCQkgKiByZXR1cm4gYmFjayB0byB0aGUgdXNlciB0byBnaXZlIHRpbWUgZm9yIHRoZSBn dXAtd29ya2VycwotCQkgKiB0byBmbHVzaCB0aGVpciBvYmplY3QgcmVmZXJlbmNlcyB1cG9uIHdo aWNoIHRoZSBvYmplY3Qgd2lsbAotCQkgKiBiZSByZW1vdmVkIGZyb20gdGhlIGludGVydmFsLXRy ZWUsIG9yIHRoZSB0aGUgcmFuZ2UgaXMKLQkJICogc3RpbGwgaW4gdXNlIGJ5IGFub3RoZXIgY2xp ZW50IGFuZCB0aGUgb3ZlcmxhcCBpcyBpbnZhbGlkLgotCQkgKi8KLQotCQlvYmogPSBjb250YWlu ZXJfb2YoaXQsIHN0cnVjdCBpOTE1X21tdV9vYmplY3QsIGl0KS0+b2JqOwotCQlyZXQgPSBvYmot PnVzZXJwdHIud29ya2VycyA/IC1FQUdBSU4gOiAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCWludGVy dmFsX3RyZWVfaW5zZXJ0KCZtbi0+aXQsICZtbXUtPm9iamVjdHMpOwotCQlfX2k5MTVfbW11X25v dGlmaWVyX3VwZGF0ZV9zZXJpYWwobW11KTsKLQkJcmV0ID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2so Jm1tdS0+bG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZtbXUtPmRldi0+c3RydWN0X211dGV4KTsKLQot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOTE1X2dlbV91c2VycHRyX3JlbGVhc2Vf X21tdV9ub3RpZmllcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVj dCBpOTE1X21tdV9vYmplY3QgKm1uOwotCi0JbW4gPSBvYmotPnVzZXJwdHIubW47Ci0JaWYgKG1u ID09IE5VTEwpCi0JCXJldHVybjsKLQotCWk5MTVfbW11X25vdGlmaWVyX2RlbChtbi0+bW11LCBt bik7Ci0Jb2JqLT51c2VycHRyLm1uID0gTlVMTDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1f dXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKLQkJCQkgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0Jc3RydWN0IGk5MTVfbW11X25vdGlmaWVy ICptbXU7Ci0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW47Ci0JaW50IHJldDsKLQotCWlmIChm bGFncyAmIEk5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCkKLQkJcmV0dXJuIGNhcGFibGUoQ0FQ X1NZU19BRE1JTikgPyAwIDogLUVQRVJNOwotCi0JZG93bl93cml0ZSgmb2JqLT51c2VycHRyLm1t LT5tbWFwX3NlbSk7Ci0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUob2JqLT5i YXNlLmRldik7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCW1tdSA9IGk5MTVfbW11X25vdGlmaWVyX2dl dChvYmotPmJhc2UuZGV2LCBvYmotPnVzZXJwdHIubW0pOwotCQlpZiAoIUlTX0VSUihtbXUpKQot CQkJbW11LT5jb3VudCsrOyAvKiBwcmVlbXB0aXZlIGFkZCB0byBhY3QgYXMgYSByZWZjb3VudCAq LwotCQllbHNlCi0JCQlyZXQgPSBQVFJfRVJSKG1tdSk7Ci0JCW11dGV4X3VubG9jaygmb2JqLT5i YXNlLmRldi0+c3RydWN0X211dGV4KTsKLQl9Ci0JdXBfd3JpdGUoJm9iai0+dXNlcnB0ci5tbS0+ bW1hcF9zZW0pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQltbiA9IGt6YWxsb2Moc2l6 ZW9mKCptbiksIEdGUF9LRVJORUwpOwotCWlmIChtbiA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9N RU07Ci0JCWdvdG8gZGVzdHJveV9tbXU7Ci0JfQotCi0JbW4tPm1tdSA9IG1tdTsKLQltbi0+aXQu c3RhcnQgPSBvYmotPnVzZXJwdHIucHRyOwotCW1uLT5pdC5sYXN0ID0gbW4tPml0LnN0YXJ0ICsg b2JqLT5iYXNlLnNpemUgLSAxOwotCW1uLT5vYmogPSBvYmo7Ci0KLQlyZXQgPSBpOTE1X21tdV9u b3RpZmllcl9hZGQobW11LCBtbik7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlX21uOwotCi0Jb2Jq LT51c2VycHRyLm1uID0gbW47Ci0JcmV0dXJuIDA7Ci0KLWZyZWVfbW46Ci0Ja2ZyZWUobW4pOwot ZGVzdHJveV9tbXU6Ci0JbXV0ZXhfbG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsK LQlpZiAoLS1tbXUtPmNvdW50ID09IDApCi0JCV9faTkxNV9tbXVfbm90aWZpZXJfZGVzdHJveSht bXUpOwotCW11dGV4X3VubG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1 cm4gcmV0OwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZAotaTkxNV9nZW1fdXNlcnB0cl9yZWxl YXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLX0K LQotc3RhdGljIGludAotaTkxNV9nZW1fdXNlcnB0cl9pbml0X19tbXVfbm90aWZpZXIoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQkgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0J aWYgKChmbGFncyAmIEk5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCkgPT0gMCkKLQkJcmV0dXJu IC1FTk9ERVY7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBF Uk07Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdHJ1Y3QgZ2V0X3BhZ2VzX3dvcmsgewot CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotfTsKLQotCi0jaWYgSVNfRU5BQkxFRChD T05GSUdfU1dJT1RMQikKLSNkZWZpbmUgc3dpb3RsYl9hY3RpdmUoKSBzd2lvdGxiX25yX3RibCgp Ci0jZWxzZQotI2RlZmluZSBzd2lvdGxiX2FjdGl2ZSgpIDAKLSNlbmRpZgotCi1zdGF0aWMgaW50 Ci1zdF9zZXRfcGFnZXMoc3RydWN0IHNnX3RhYmxlICoqc3QsIHN0cnVjdCBwYWdlICoqcHZlYywg aW50IG51bV9wYWdlcykKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCByZXQsIG47 Ci0KLQkqc3QgPSBrbWFsbG9jKHNpemVvZigqKnN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCpzdCA9 PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChzd2lvdGxiX2FjdGl2ZSgpKSB7Ci0J CXJldCA9IHNnX2FsbG9jX3RhYmxlKCpzdCwgbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKLQkJaWYg KHJldCkKLQkJCWdvdG8gZXJyOwotCi0JCWZvcl9lYWNoX3NnKCgqc3QpLT5zZ2wsIHNnLCBudW1f cGFnZXMsIG4pCi0JCQlzZ19zZXRfcGFnZShzZywgcHZlY1tuXSwgUEFHRV9TSVpFLCAwKTsKLQl9 IGVsc2UgewotCQlyZXQgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKCpzdCwgcHZlYywgbnVt X3BhZ2VzLAotCQkJCQkJMCwgbnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCi0JCQkJCQlHRlBfS0VS TkVMKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnI6 Ci0Ja2ZyZWUoKnN0KTsKLQkqc3QgPSBOVUxMOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1fX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKl93b3JrKQotewotCXN0cnVjdCBnZXRfcGFnZXNfd29yayAqd29yayA9IGNvbnRhaW5lcl9v Zihfd29yaywgdHlwZW9mKCp3b3JrKSwgd29yayk7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiA9IHdvcmstPm9iajsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNl LmRldjsKLQljb25zdCBpbnQgbnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElG VDsKLQlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Ci0JaW50IHBpbm5lZCwgcmV0OwotCi0JcmV0ID0gLUVO T01FTTsKLQlwaW5uZWQgPSAwOwotCi0JcHZlYyA9IGttYWxsb2MobnVtX3BhZ2VzKnNpemVvZihz dHJ1Y3QgcGFnZSAqKSwKLQkJICAgICAgIEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4gfCBf X0dGUF9OT1JFVFJZKTsKLQlpZiAocHZlYyA9PSBOVUxMKQotCQlwdmVjID0gZHJtX21hbGxvY19h YihudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0JaWYgKHB2ZWMgIT0gTlVMTCkg ewotCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IG9iai0+dXNlcnB0ci5tbTsKLQotCQlkb3duX3Jl YWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXdoaWxlIChwaW5uZWQgPCBudW1fcGFnZXMpIHsKLQkJCXJl dCA9IGdldF91c2VyX3BhZ2VzKHdvcmstPnRhc2ssIG1tLAotCQkJCQkgICAgIG9iai0+dXNlcnB0 ci5wdHIgKyBwaW5uZWQgKiBQQUdFX1NJWkUsCi0JCQkJCSAgICAgbnVtX3BhZ2VzIC0gcGlubmVk LAotCQkJCQkgICAgICFvYmotPnVzZXJwdHIucmVhZF9vbmx5LCAwLAotCQkJCQkgICAgIHB2ZWMg KyBwaW5uZWQsIE5VTEwpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0KLQkJCXBpbm5l ZCArPSByZXQ7Ci0JCX0KLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQl9Ci0KLQltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JaWYgKG9iai0+dXNlcnB0ci53b3JrICE9ICZ3b3Jr LT53b3JrKSB7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIGlmIChwaW5uZWQgPT0gbnVtX3BhZ2VzKSB7 Ci0JCXJldCA9IHN0X3NldF9wYWdlcygmb2JqLT5wYWdlcywgcHZlYywgbnVtX3BhZ2VzKTsKLQkJ aWYgKHJldCA9PSAwKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmdG9f aTkxNShkZXYpLT5tbS51bmJvdW5kX2xpc3QpOwotCQkJcGlubmVkID0gMDsKLQkJfQotCX0KLQot CW9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUihyZXQpOwotCW9iai0+dXNlcnB0ci53b3JrZXJz LS07Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Ci0JbXV0ZXhfdW5s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQlyZWxlYXNlX3BhZ2VzKHB2ZWMsIHBpbm5lZCwg MCk7Ci0JZHJtX2ZyZWVfbGFyZ2UocHZlYyk7Ci0KLQlwdXRfdGFza19zdHJ1Y3Qod29yay0+dGFz ayk7Ci0Ja2ZyZWUod29yayk7Ci19Ci0KLXN0YXRpYyBpbnQKLWk5MTVfZ2VtX3VzZXJwdHJfZ2V0 X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JY29uc3QgaW50IG51 bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Ci0Jc3RydWN0IHBhZ2UgKipw dmVjOwotCWludCBwaW5uZWQsIHJldDsKLQotCS8qIElmIHVzZXJzcGFjZSBzaG91bGQgZW5naW5l ZXIgdGhhdCB0aGVzZSBwYWdlcyBhcmUgcmVwbGFjZWQgaW4KLQkgKiB0aGUgdm1hIGJldHdlZW4g dXMgYmluZGluZyB0aGlzIHBhZ2UgaW50byB0aGUgR1RUIGFuZCBjb21wbGV0aW9uCi0JICogb2Yg cmVuZGVyaW5nLi4uIFRoZWlyIGxvc3MuIElmIHRoZXkgY2hhbmdlIHRoZSBtYXBwaW5nIG9mIHRo ZWlyCi0JICogcGFnZXMgdGhleSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBibyB0byBwb2ludCB0byB0 aGUgbmV3IHZtYS4KLQkgKgotCSAqIEhvd2V2ZXIsIHRoYXQgc3RpbGwgbGVhdmVzIG9wZW4gdGhl IHBvc3NpYmlsaXR5IG9mIHRoZSB2bWEKLQkgKiBiZWluZyBjb3BpZWQgdXBvbiBmb3JrLiBXaGlj aCBmYWxscyB1bmRlciB0aGUgc2FtZSB1c2Vyc3BhY2UKLQkgKiBzeW5jaHJvbmlzYXRpb24gaXNz dWUgYXMgYSByZWd1bGFyIGJvLCBleGNlcHQgdGhhdCB0aGlzIHRpbWUKLQkgKiB0aGUgcHJvY2Vz cyBtYXkgbm90IGJlIGV4cGVjdGluZyB0aGF0IGEgcGFydGljdWxhciBwaWVjZSBvZgotCSAqIG1l bW9yeSBpcyB0aWVkIHRvIHRoZSBHUFUuCi0JICoKLQkgKiBGb3J0dW5hdGVseSwgd2UgY2FuIGhv b2sgaW50byB0aGUgbW11X25vdGlmaWVyIGluIG9yZGVyIHRvCi0JICogZGlzY2FyZCB0aGUgcGFn ZSByZWZlcmVuY2VzIHByaW9yIHRvIGFueXRoaW5nIG5hc3R5IGhhcHBlbmluZwotCSAqIHRvIHRo ZSB2bWEgKGRpc2NhcmQgb3IgY2xvbmluZykgd2hpY2ggc2hvdWxkIHByZXZlbnQgdGhlIG1vcmUK LQkgKiBlZ3JlZ2lvdXMgY2FzZXMgZnJvbSBjYXVzaW5nIGhhcm0uCi0JICovCi0KLQlwdmVjID0g TlVMTDsKLQlwaW5uZWQgPSAwOwotCWlmIChvYmotPnVzZXJwdHIubW0gPT0gY3VycmVudC0+bW0p IHsKLQkJcHZlYyA9IGttYWxsb2MobnVtX3BhZ2VzKnNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKLQkJ CSAgICAgICBHRlBfVEVNUE9SQVJZIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSk7Ci0J CWlmIChwdmVjID09IE5VTEwpIHsKLQkJCXB2ZWMgPSBkcm1fbWFsbG9jX2FiKG51bV9wYWdlcywg c2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKLQkJCWlmIChwdmVjID09IE5VTEwpCi0JCQkJcmV0dXJu IC1FTk9NRU07Ci0JCX0KLQotCQlwaW5uZWQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3Qob2JqLT51 c2VycHRyLnB0ciwgbnVtX3BhZ2VzLAotCQkJCQkgICAgICAgIW9iai0+dXNlcnB0ci5yZWFkX29u bHksIHB2ZWMpOwotCX0KLQlpZiAocGlubmVkIDwgbnVtX3BhZ2VzKSB7Ci0JCWlmIChwaW5uZWQg PCAwKSB7Ci0JCQlyZXQgPSBwaW5uZWQ7Ci0JCQlwaW5uZWQgPSAwOwotCQl9IGVsc2UgewotCQkJ LyogU3Bhd24gYSB3b3JrZXIgc28gdGhhdCB3ZSBjYW4gYWNxdWlyZSB0aGUKLQkJCSAqIHVzZXIg cGFnZXMgd2l0aG91dCBob2xkaW5nIG91ciBtdXRleC4gQWNjZXNzCi0JCQkgKiB0byB0aGUgdXNl ciBwYWdlcyByZXF1aXJlcyBtbWFwX3NlbSwgYW5kIHdlIGhhdmUKLQkJCSAqIGEgc3RyaWN0IGxv Y2sgb3JkZXJpbmcgb2YgbW1hcF9zZW0sIHN0cnVjdF9tdXRleCAtCi0JCQkgKiB3ZSBhbHJlYWR5 IGhvbGQgc3RydWN0X211dGV4IGhlcmUgYW5kIHNvIGNhbm5vdAotCQkJICogY2FsbCBndXAgd2l0 aG91dCBlbmNvdW50ZXJpbmcgYSBsb2NrIGludmVyc2lvbi4KLQkJCSAqCi0JCQkgKiBVc2Vyc3Bh Y2Ugd2lsbCBrZWVwIG9uIHJlcGVhdGluZyB0aGUgb3BlcmF0aW9uCi0JCQkgKiAodGhhbmtzIHRv IEVBR0FJTikgdW50aWwgZWl0aGVyIHdlIGhpdCB0aGUgZmFzdAotCQkJICogcGF0aCBvciB0aGUg d29ya2VyIGNvbXBsZXRlcy4gSWYgdGhlIHdvcmtlciBpcwotCQkJICogY2FuY2VsbGVkIG9yIHN1 cGVyc2VkZWQsIHRoZSB0YXNrIGlzIHN0aWxsIHJ1bgotCQkJICogYnV0IHRoZSByZXN1bHRzIGln bm9yZWQuIChUaGlzIGxlYWRzIHRvCi0JCQkgKiBjb21wbGljYXRpb25zIHRoYXQgd2UgbWF5IGhh dmUgYSBzdHJheSBvYmplY3QKLQkJCSAqIHJlZmNvdW50IHRoYXQgd2UgbmVlZCB0byBiZSB3YXJ5 IG9mIHdoZW4KLQkJCSAqIGNoZWNraW5nIGZvciBleGlzdGluZyBvYmplY3RzIGR1cmluZyBjcmVh dGlvbi4pCi0JCQkgKiBJZiB0aGUgd29ya2VyIGVuY291bnRlcnMgYW4gZXJyb3IsIGl0IHJlcG9y dHMKLQkJCSAqIHRoYXQgZXJyb3IgYmFjayB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2gKLQkJCSAq IG9iai0+dXNlcnB0ci53b3JrID0gRVJSX1BUUi4KLQkJCSAqLwotCQkJcmV0ID0gLUVBR0FJTjsK LQkJCWlmIChvYmotPnVzZXJwdHIud29yayA9PSBOVUxMICYmCi0JCQkgICAgb2JqLT51c2VycHRy LndvcmtlcnMgPCBJOTE1X0dFTV9VU0VSUFRSX01BWF9XT1JLRVJTKSB7Ci0JCQkJc3RydWN0IGdl dF9wYWdlc193b3JrICp3b3JrOwotCi0JCQkJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwg R0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKHdvcmsgIT0gTlVMTCkgewotCQkJCQlvYmotPnVzZXJwdHIu d29yayA9ICZ3b3JrLT53b3JrOwotCQkJCQlvYmotPnVzZXJwdHIud29ya2VycysrOwotCi0JCQkJ CXdvcmstPm9iaiA9IG9iajsKLQkJCQkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKCZvYmotPmJh c2UpOwotCi0JCQkJCXdvcmstPnRhc2sgPSBjdXJyZW50OwotCQkJCQlnZXRfdGFza19zdHJ1Y3Qo d29yay0+dGFzayk7Ci0KLQkJCQkJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBfX2k5MTVfZ2VtX3Vz ZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcik7Ci0JCQkJCXNjaGVkdWxlX3dvcmsoJndvcmstPndvcmsp OwotCQkJCX0gZWxzZQotCQkJCQlyZXQgPSAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAo SVNfRVJSKG9iai0+dXNlcnB0ci53b3JrKSkgewotCQkJCQlyZXQgPSBQVFJfRVJSKG9iai0+dXNl cnB0ci53b3JrKTsKLQkJCQkJb2JqLT51c2VycHRyLndvcmsgPSBOVUxMOwotCQkJCX0KLQkJCX0K LQkJfQotCX0gZWxzZSB7Ci0JCXJldCA9IHN0X3NldF9wYWdlcygmb2JqLT5wYWdlcywgcHZlYywg bnVtX3BhZ2VzKTsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlvYmotPnVzZXJwdHIud29yayA9IE5V TEw7Ci0JCQlwaW5uZWQgPSAwOwotCQl9Ci0JfQotCi0JcmVsZWFzZV9wYWdlcyhwdmVjLCBwaW5u ZWQsIDApOwotCWRybV9mcmVlX2xhcmdlKHB2ZWMpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyB2b2lkCi1pOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IGk7Ci0KLQlCVUdf T04ob2JqLT51c2VycHRyLndvcmsgIT0gTlVMTCk7Ci0KLQlpZiAob2JqLT5tYWR2ICE9IEk5MTVf TUFEVl9XSUxMTkVFRCkKLQkJb2JqLT5kaXJ0eSA9IDA7Ci0KLQlmb3JfZWFjaF9zZyhvYmotPnBh Z2VzLT5zZ2wsIHNnLCBvYmotPnBhZ2VzLT5uZW50cywgaSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFn ZSA9IHNnX3BhZ2Uoc2cpOwotCi0JCWlmIChvYmotPmRpcnR5KQotCQkJc2V0X3BhZ2VfZGlydHko cGFnZSk7Ci0KLQkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVh c2UocGFnZSk7Ci0JfQotCW9iai0+ZGlydHkgPSAwOwotCi0Jc2dfZnJlZV90YWJsZShvYmotPnBh Z2VzKTsKLQlrZnJlZShvYmotPnBhZ2VzKTsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX3Vz ZXJwdHJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCWk5MTVf Z2VtX3VzZXJwdHJfcmVsZWFzZV9fbW11X25vdGlmaWVyKG9iaik7Ci0KLQlpZiAob2JqLT51c2Vy cHRyLm1tKSB7Ci0JCW1tcHV0KG9iai0+dXNlcnB0ci5tbSk7Ci0JCW9iai0+dXNlcnB0ci5tbSA9 IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1pOTE1X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBv cnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlpZiAob2JqLT51c2VycHRy Lm1uKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpOTE1X2dlbV91c2VycHRyX2luaXRfX21tdV9u b3RpZmllcihvYmosIDApOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3Rfb3BzIGk5MTVfZ2VtX3VzZXJwdHJfb3BzID0gewotCS5kbWFidWZfZXhwb3J0ID0gaTkx NV9nZW1fdXNlcnB0cl9kbWFidWZfZXhwb3J0LAotCS5nZXRfcGFnZXMgPSBpOTE1X2dlbV91c2Vy cHRyX2dldF9wYWdlcywKLQkucHV0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMs Ci0JLnJlbGVhc2UgPSBpOTE1X2dlbV91c2VycHRyX3JlbGVhc2UsCi19OwotCi0vKioKLSAqIENy ZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IHRoYXQgd3JhcHMgc29tZSBub3JtYWwgbWVtb3J5IGZyb20g dGhlIHByb2Nlc3MKLSAqIGNvbnRleHQgLSB1c2VyIG1lbW9yeS4KLSAqCi0gKiBXZSBpbXBvc2Ug c2V2ZXJhbCByZXN0cmljdGlvbnMgdXBvbiB0aGUgbWVtb3J5IGJlaW5nIG1hcHBlZAotICogaW50 byB0aGUgR1BVLgotICogMS4gSXQgbXVzdCBiZSBwYWdlIGFsaWduZWQgKGJvdGggc3RhcnQvZW5k IGFkZHJlc3NlcywgaS5lIHB0ciBhbmQgc2l6ZSkuCi0gKiAyLiBJdCBjYW5ub3Qgb3ZlcmxhcCBh bnkgb3RoZXIgdXNlcnB0ciBvYmplY3QgaW4gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZS4KLSAqIDMu IEl0IG11c3QgYmUgbm9ybWFsIHN5c3RlbSBtZW1vcnksIG5vdCBhIHBvaW50ZXIgaW50byBhbm90 aGVyIG1hcCBvZiBJTwotICogICAgc3BhY2UgKGUuZy4gaXQgbXVzdCBub3QgYmUgYSBHVFQgbW1h cHBpbmcgb2YgYW5vdGhlciBvYmplY3QpLgotICogNC4gV2Ugb25seSBhbGxvdyBhIGJvIGFzIGxh cmdlIGFzIHdlIGNvdWxkIGluIHRoZW9yeSBtYXAgaW50byB0aGUgR1RULAotICogICAgdGhhdCBp cyB3ZSBsaW1pdCB0aGUgc2l6ZSB0byB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgR1RULgotICogNS4g VGhlIGJvIGlzIG1hcmtlZCBhcyBiZWluZyBzbm9vcGFibGUuIFRoZSBiYWNraW5nIHBhZ2VzIGFy ZSBsZWZ0Ci0gKiAgICBhY2Nlc3NpYmxlIGRpcmVjdGx5IGJ5IHRoZSBDUFUsIGJ1dCByZWFkcyBh bmQgd3JpdGVzIGJ5IHRoZSBHUFUgbWF5Ci0gKiAgICBpbmN1ciB0aGUgY29zdCBvZiBhIHNub29w ICh1bmxlc3MgeW91IGhhdmUgYW4gTExDIGFyY2hpdGVjdHVyZSkuCi0gKgotICogU3luY2hyb25p c2F0aW9uIGJldHdlZW4gbXVsdGlwbGUgdXNlcnMgYW5kIHRoZSBHUFUgaXMgbGVmdCB0byB1c2Vy c3BhY2UKLSAqIHRocm91Z2ggdGhlIG5vcm1hbCBzZXQtZG9tYWluLWlvY3RsLiBUaGUga2VybmVs IHdpbGwgZW5mb3JjZSB0aGF0IHRoZQotICogR1BVIHJlbGlucXVpc2hlcyB0aGUgVk1BIGJlZm9y ZSBpdCBpcyByZXR1cm5lZCBiYWNrIHRvIHRoZSBzeXN0ZW0KLSAqIGkuZS4gdXBvbiBmcmVlKCks IG11bm1hcCgpIG9yIHByb2Nlc3MgdGVybWluYXRpb24uIEhvd2V2ZXIsIHRoZSB1c2Vyc3BhY2UK LSAqIG1hbGxvYygpIGxpYnJhcnkgbWF5IG5vdCBpbW1lZGlhdGVseSByZWxpbnF1aXNoIHRoZSBW TUEgYWZ0ZXIgZnJlZSgpIGFuZAotICogaW5zdGVhZCByZXVzZSBpdCB3aGlsc3QgdGhlIEdQVSBp cyBzdGlsbCByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBWTUEuCi0gKiBDYXZlYXQgZW1wdG9y LgotICoKLSAqIEFsc28gbm90ZSwgdGhhdCB0aGUgb2JqZWN0IGNyZWF0ZWQgaGVyZSBpcyBub3Qg Y3VycmVudGx5IGEgImZpcnN0IGNsYXNzIgotICogb2JqZWN0LCBpbiB0aGF0IHNldmVyYWwgaW9j dGxzIGFyZSBiYW5uZWQuIFRoZXNlIGFyZSB0aGUgQ1BVIGFjY2VzcwotICogaW9jdGxzOiBtbWFw KCksIHB3cml0ZSBhbmQgcHJlYWQuIEluIHByYWN0aWNlLCB5b3UgYXJlIGV4cGVjdGVkIHRvIHVz ZQotICogZGlyZWN0IGFjY2VzcyB2aWEgeW91ciBwb2ludGVyIHJhdGhlciB0aGFuIHVzZSB0aG9z ZSBpb2N0bHMuCi0gKgotICogSWYgeW91IHRoaW5rIHRoaXMgaXMgYSBnb29kIGludGVyZmFjZSB0 byB1c2UgdG8gcGFzcyBHUFUgbWVtb3J5IGJldHdlZW4KLSAqIGRyaXZlcnMsIHBsZWFzZSB1c2Ug ZG1hLWJ1ZiBpbnN0ZWFkLiBJbiBmYWN0LCB3aGVyZXZlciBwb3NzaWJsZSB1c2UKLSAqIGRtYS1i dWYgaW5zdGVhZC4KKy8qIFRoaXMgaW9jdGwgd2FzIGRlZW1lZCBhcyBhbiBoZXJlc3kgYW5kIHdh cyBwdXJpZmllZCBpbiBpdHMgb25seSBhY2NlcHRhYmxlCisgKiBmb3JtLgogICovCi1pbnQKLWk5 MTVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwg c3RydWN0IGRybV9maWxlICpmaWxlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV91c2VycHRyICph cmdzID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCWludCByZXQ7 Ci0JdTMyIGhhbmRsZTsKLQotCWlmIChhcmdzLT5mbGFncyAmIH4oSTkxNV9VU0VSUFRSX1JFQURf T05MWSB8Ci0JCQkgICAgSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVEKSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlpZiAob2Zmc2V0X2luX3BhZ2UoYXJncy0+dXNlcl9wdHIgfCBhcmdzLT51c2Vy X3NpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmdzLT51c2VyX3NpemUgPiBkZXZf cHJpdi0+Z3R0LmJhc2UudG90YWwpCi0JCXJldHVybiAtRTJCSUc7Ci0KLQlpZiAoIWFjY2Vzc19v ayhhcmdzLT5mbGFncyAmIEk5MTVfVVNFUlBUUl9SRUFEX09OTFkgPyBWRVJJRllfUkVBRCA6IFZF UklGWV9XUklURSwKLQkJICAgICAgIChjaGFyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZ3Mt PnVzZXJfcHRyLCBhcmdzLT51c2VyX3NpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChh cmdzLT5mbGFncyAmIEk5MTVfVVNFUlBUUl9SRUFEX09OTFkpIHsKLQkJLyogT24gYWxtb3N0IGFs bCBvZiB0aGUgY3VycmVudCBodywgd2UgY2Fubm90IHRlbGwgdGhlIEdQVSB0aGF0IGEKLQkJICog cGFnZSBpcyByZWFkb25seSwgc28gdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgaW4gdGhlIHVB UEkuCi0JCSAqLwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgbmV3 IG9iamVjdCAqLwotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhkZXYpOwotCWlmIChvYmog PT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2lu aXQoZGV2LCAmb2JqLT5iYXNlLCBhcmdzLT51c2VyX3NpemUpOwotCWk5MTVfZ2VtX29iamVjdF9p bml0KG9iaiwgJmk5MTVfZ2VtX3VzZXJwdHJfb3BzKTsKLQlvYmotPmNhY2hlX2xldmVsID0gSTkx NV9DQUNIRV9MTEM7Ci0Jb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9D UFU7Ci0Jb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7Ci0KLQlv YmotPnVzZXJwdHIucHRyID0gYXJncy0+dXNlcl9wdHI7Ci0Jb2JqLT51c2VycHRyLnJlYWRfb25s eSA9ICEhKGFyZ3MtPmZsYWdzICYgSTkxNV9VU0VSUFRSX1JFQURfT05MWSk7Ci0KLQkvKiBBbmQg a2VlcCBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQtPm1tIGZvciByZXNvbHZpbmcgdGhlIHVzZXIg cGFnZXMKLQkgKiBhdCBiaW5kaW5nLiBUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBob29rIGlu dG8gdGhlIG1tdV9ub3RpZmllcgotCSAqIGluIG9yZGVyIHRvIGRldGVjdCBpZiB0aGUgbW11IGlz IGRlc3Ryb3llZC4KLQkgKi8KLQlyZXQgPSAtRU5PTUVNOwotCWlmICgob2JqLT51c2VycHRyLm1t ID0gZ2V0X3Rhc2tfbW0oY3VycmVudCkpKQotCQlyZXQgPSBpOTE1X2dlbV91c2VycHRyX2luaXRf X21tdV9ub3RpZmllcihvYmosIGFyZ3MtPmZsYWdzKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9 IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5iYXNlLCAmaGFuZGxlKTsKLQotCS8q IGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovCi0J ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm9iai0+YmFzZSk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKLQlyZXR1cm4gMDsK LX0KLQotaW50Ci1pOTE1X2dlbV9pbml0X3VzZXJwdHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K2ludCBpOTE1X2dlbV91c2VycHRyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkg ICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiB7Ci0jaWYgZGVmaW5lZChDT05G SUdfTU1VX05PVElGSUVSKQotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKLQloYXNoX2luaXQoZGV2X3ByaXYtPm1tdV9ub3RpZmllcnMpOwotI2VuZGlm Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n cHVfZXJyb3IuYwppbmRleCA2NmNmNDE3Li5iOTRhYWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ3B1X2Vycm9yLmMKQEAgLTIwNSw3ICsyMDUsNiBAQCBzdGF0aWMgdm9pZCBwcmludF9lcnJv cl9idWZmZXJzKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCiAJCWVycl9wdXRz KG0sIHRpbGluZ19mbGFnKGVyci0+dGlsaW5nKSk7CiAJCWVycl9wdXRzKG0sIGRpcnR5X2ZsYWco ZXJyLT5kaXJ0eSkpOwogCQllcnJfcHV0cyhtLCBwdXJnZWFibGVfZmxhZyhlcnItPnB1cmdlYWJs ZSkpOwotCQllcnJfcHV0cyhtLCBlcnItPnVzZXJwdHIgPyAiIHVzZXJwdHIiIDogIiIpOwogCQll cnJfcHV0cyhtLCBlcnItPnJpbmcgIT0gLTEgPyAiICIgOiAiIik7CiAJCWVycl9wdXRzKG0sIHJp bmdfc3RyKGVyci0+cmluZykpOwogCQllcnJfcHV0cyhtLCBpOTE1X2NhY2hlX2xldmVsX3N0cihl cnItPmNhY2hlX2xldmVsKSk7CkBAIC02NDIsNyArNjQxLDYgQEAgc3RhdGljIHZvaWQgY2FwdHVy ZV9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyICplcnIsCiAJZXJyLT50aWxpbmcgPSBv YmotPnRpbGluZ19tb2RlOwogCWVyci0+ZGlydHkgPSBvYmotPmRpcnR5OwogCWVyci0+cHVyZ2Vh YmxlID0gb2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRDsKLQllcnItPnVzZXJwdHIgPSBv YmotPnVzZXJwdHIubW0gIT0gTlVMTDsKIAllcnItPnJpbmcgPSBvYmotPnJpbmcgPyBvYmotPnJp bmctPmlkIDogLTE7CiAJZXJyLT5jYWNoZV9sZXZlbCA9IG9iai0+Y2FjaGVfbGV2ZWw7CiB9Ci0t IAoxLjguMy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=