From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: [PATCH v6 12/35] drm/i915: Implement HDCP2.2 receiver authentication Date: Sat, 14 Jul 2018 08:44:54 +0530 Message-ID: <1531538117-1606-13-git-send-email-ramalingam.c@intel.com> References: <1531538117-1606-1-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1531538117-1606-1-git-send-email-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, daniel@ffwll.ch, seanpaul@chromium.org, tomas.winkler@intel.com, alexander.usyskin@intel.com, uma.shankar@intel.com List-Id: dri-devel@lists.freedesktop.org SW1wbGVtZW50cyBIRENQMi4yIGF1dGhlbnRpY2F0aW9uIGZvciBoZGNwMi4yIHJlY2VpdmVycywg d2l0aApmb2xsb3dpbmcgc3RlcHM6CglBdXRoZW50aWNhdGlvbiBhbmQgS2V5IGV4Y2hhbmdlIChB S0UpLgoJTG9jYWxpdHkgQ2hlY2sgKExDKS4KCVNlc3Npb24gS2V5IEV4Y2hhbmdlKFNLRSkuCglE UCBFcnJhdGEgZm9yIHN0cmVhbSB0eXBlIGNvbmZpZ3VyYXRpb24gZm9yIHJlY2VpdmVycy4KCkF0 IEFLRSwgdGhlIEhEQ1AgUmVjZWl2ZXLigJlzIHB1YmxpYyBrZXkgY2VydGlmaWNhdGUgaXMgdmVy aWZpZWQgYnkgdGhlCkhEQ1AgVHJhbnNtaXR0ZXIuIEEgTWFzdGVyIEtleSBrIG0gaXMgZXhjaGFu Z2VkLgoKQXQgTEMsIHRoZSBIRENQIFRyYW5zbWl0dGVyIGVuZm9yY2VzIGxvY2FsaXR5IG9uIHRo ZSBjb250ZW50IGJ5CnJlcXVpcmluZyB0aGF0IHRoZSBSb3VuZCBUcmlwIFRpbWUgKFJUVCkgYmV0 d2VlbiBhIHBhaXIgb2YgbWVzc2FnZXMKaXMgbm90IG1vcmUgdGhhbiAyMCBtcy4KCkF0IFNLRSwg VGhlIEhEQ1AgVHJhbnNtaXR0ZXIgZXhjaGFuZ2VzIFNlc3Npb24gS2V5IGtzIHdpdGgKdGhlIEhE Q1AgUmVjZWl2ZXIuCgpJbiBEUCBIRENQMi4yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gbG9n aWNzIHVzZSB0aGUgc3RyZWFtIHR5cGUgYXMKb25lIG9mIHRoZSBwYXJhbWV0ZXIuIFNvIEJlZm9y ZSBlbmFibGluZyB0aGUgRW5jcnlwdGlvbiBEUCBIRENQMi4yCnJlY2VpdmVyIG5lZWRzIHRvIGJl IGNvbW11bmljYXRlZCB3aXRoIHN0cmVhbSB0eXBlLiBUaGlzIGlzIGFkZGVkIHRvCnNwZWMgYXMg RVJSQVRBLgoKVGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlIG9ubHkgd2l0 aCB0aGUgaGRjcDJfc2hpbQpkZWZpbmVkLgoKdjI6CiAgUmViYXNlZC4KdjM6CiAgTm8gQ2hhbmdl cy4KdjQ6CiAgJXMvUEFSSU5HL1BBSVJJTkcKICBDb2Rpbmcgc3R5bGUgZml4aW5nIFtVbWFdCnY1 OgogIFJlYmFzZWQgYXMgcGFydCBvZiBwYXRjaCByZW9yZGVyaW5nLgogIERlZmluZWQgdGhlIGZ1 bmN0aW9ucyBmb3IgbWVpIHNlcnZpY2VzLiBbRGFuaWVsXQp2NjoKICBSZWRlZmluZWQgdGhlIG1l aSBzZXJ2aWNlIGZ1bmN0aW9ucyBhcyBwZXIgY29tcCByZWRlc2lnbi4KICBSZXF1aXJlZCBpbnRl bF9oZGNwIG1lbWJlcnMgYXJlIGRlZmluZWQgW1NlYW4gUGF1bF0KClNpZ25lZC1vZmYtYnk6IFJh bWFsaW5nYW0gQyA8cmFtYWxpbmdhbS5jQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaCAgfCAgMzQgKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf aGRjcC5jIHwgMzcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZp bGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmgKaW5kZXggMjE2ODM3MDJiY2RjLi5lZDQyOWE2ZmI5YWIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCkBAIC0zODQsNiArMzg0LDIyIEBAIHN0cnVjdCBpbnRlbF9oZGNw X3NoaW0gewogCS8qIERldGVjdHMgd2hldGhlciBQYW5lbCBpcyBIRENQMi4yIGNhcGFibGUgKi8K IAlpbnQgKCpoZGNwXzJfMl9jYXBhYmxlKShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRl bF9kaWdfcG9ydCwKIAkJCQlib29sICpjYXBhYmxlKTsKKworCS8qIFdyaXRlIEhEQ1AyLjIgbWVz c2FnZXMgKi8KKwlpbnQgKCp3cml0ZV8yXzJfbXNnKShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICppbnRlbF9kaWdfcG9ydCwKKwkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKwkv KiBSZWFkIEhEQ1AyLjIgbWVzc2FnZXMgKi8KKwlpbnQgKCpyZWFkXzJfMl9tc2cpKHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAorCQkJICAgIHVpbnQ4X3QgbXNnX2lk LCB2b2lkICpidWYsIHNpemVfdCBzaXplKTsKKworCS8qCisJICogSW1wbGVtZW50YXRpb24gb2Yg RFAgSERDUDIuMiBFcnJhdGEgZm9yIHRoZSBjb21tdW5pY2F0aW9uIG9mIHN0cmVhbQorCSAqIHR5 cGUgdG8gUmVjZWl2ZXJzLiBJbiBEUCBIRENQMi4yIFN0cmVhbSB0eXBlIGlzIG9uZSBvZiB0aGUg aW5wdXQgdG8KKwkgKiB0aGUgSERDUDIuMiBDaGlwZXIgZm9yIEVuL0RlLUNyeXB0aW9uLiBOb3Qg YXBwbGljYWJsZSBmb3IgSERNSS4KKwkgKi8KKwlpbnQgKCpjb25maWdfc3RyZWFtX3R5cGUpKHN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAorCQkJCSAgdm9pZCAqYnVm LCBzaXplX3Qgc2l6ZSk7CiB9OwogCiBzdHJ1Y3QgaW50ZWxfaGRjcCB7CkBAIC00MDgsNiArNDI0 LDI0IEBAIHN0cnVjdCBpbnRlbF9oZGNwIHsKIAogCS8qIG1laSBpbnRlcmZhY2UgcmVsYXRlZCBp bmZvcm1hdGlvbiAqLwogCXN0cnVjdCBtZWlfaGRjcF9kYXRhIG1laV9kYXRhOworCisJYm9vbCBp c19wYWlyZWQ7CisJYm9vbCBpc19yZXBlYXRlcjsKKworCS8qCisJICogQ291bnQgb2YgUmVjZWl2 ZXJJRF9MaXN0IHJlY2VpdmVkLiBJbml0aWFsaXplZCB0byAwIGF0IEFLRV9JTklULgorCSAqIElu Y3JlbWVudGVkIGFmdGVyIHByb2Nlc3NpbmcgdGhlIFJlcGVhdGVyQXV0aF9TZW5kX1JlY2VpdmVy SURfTGlzdC4KKwkgKiBXaGVuIGl0IHJvbGxzIG92ZXIgcmUtYXV0aCBoYXMgdG8gYmUgdHJpZ2dl cmVkLgorCSAqLworCXVpbnQzMl90IHNlcV9udW1fdjsKKworCS8qCisJICogQ291bnQgb2YgUmVw ZWF0ZXJBdXRoX1N0cmVhbV9NYW5hZ2UgbXNnIHByb3BhZ2F0ZWQuCisJICogSW5pdGlhbGl6ZWQg dG8gMCBvbiBBS0VfSU5JVC4gSW5jcmVtZW50ZWQgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bAorCSAq IHRyYW5zbWlzc2lvbiBvZiBSZXBlYXRlckF1dGhfU3RyZWFtX01hbmFnZSBtZXNzYWdlLiBXaGVu IGl0IHJvbGxzCisJICogb3ZlciByZS1BdXRoIGhhcyB0byBiZSB0cmlnZ2VyZWQuCisJICovCisJ dWludDMyX3Qgc2VxX251bV9tOwogfTsKIAogc3RydWN0IGludGVsX2Nvbm5lY3RvciB7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9oZGNwLmMKaW5kZXggNGFjZTY0MzE1YmFhLi5lZTFlMDZiYWMxNzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2RlZmluZSBL RVlfTE9BRF9UUklFUwk1CiAjZGVmaW5lIFRJTUVfRk9SX0VOQ1JZUFRfU1RBVFVTX0NIQU5HRQkz MgorI2RlZmluZSBIRENQMl9MQ19SRVRSWV9DTlQJCTMKICNkZWZpbmUgR0VUX01FSV9ERElfSU5E RVgocG9ydCkJCSgoKHBvcnQpID09IFBPUlRfQSkgPyBERElfQSA6IFwKIAkJCQkJIChlbnVtIGhk Y3BfcGh5c2ljYWxfcG9ydCkocG9ydCkpCiAKQEAgLTk3OCw2ICs5NzksMTkxIEBAIGludCBpbnRl bF9oZGNwX2NoZWNrX2xpbmsoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogCXJl dHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQKK2hkY3AyX3ByZXBhcmVfYWtlX2luaXQoc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkgICAgICAgc3RydWN0IGhkY3AyX2FrZV9p bml0ICpha2VfZGF0YSkKK3sKKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0 b3ItPmhkY3AubWVpX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFz dGVyICpjb21wID0gZGV2X3ByaXYtPmNvbXBfbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAoIWNv bXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29tcC0+ bWVpX2NsZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhLT5wb3J0ID09IElOVkFM SURfUE9SVCAmJiBjb25uZWN0b3ItPmVuY29kZXIpCisJCWRhdGEtPnBvcnQgPSBHRVRfTUVJX0RE SV9JTkRFWChjb25uZWN0b3ItPmVuY29kZXItPnBvcnQpOworCisJLyogQ2xlYXIgTUUgRlcgaW5z dGFuY2UgZm9yIHRoZSBwb3J0LCBqdXN0IGluY2FzZSAqLworCWNvbXAtPmhkY3Bfb3BzLT5jbG9z ZV9oZGNwX3Nlc3Npb24oY29tcC0+bWVpX2NsZGV2LCBkYXRhKTsKKworCXJldCA9IGNvbXAtPmhk Y3Bfb3BzLT5pbml0aWF0ZV9oZGNwMl9zZXNzaW9uKGNvbXAtPm1laV9jbGRldiwKKwkJCQkJCWRh dGEsIGFrZV9kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2hkY3AyX3Zl cmlmeV9yeF9jZXJ0X3ByZXBhcmVfa20oc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9y LAorCQkJCXN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9jZXJ0ICpyeF9jZXJ0LAorCQkJCWJvb2wgKnBh aXJlZCwKKwkJCQlzdHJ1Y3QgaGRjcDJfYWtlX25vX3N0b3JlZF9rbSAqZWtfcHViX2ttLAorCQkJ CXNpemVfdCAqbXNnX3N6KQoreworCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5l Y3Rvci0+aGRjcC5tZWlfZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOworCXN0cnVjdCBpOTE1X2NvbXBvbmVudF9t YXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+Y29tcF9tYXN0ZXI7CisJaW50IHJldDsKKworCWlmICgh Y29tcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNvbXAtPmhkY3Bfb3BzIHx8ICFjb21w LT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PSBJTlZBTElEX1BPUlQpCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0ID0gY29tcC0+aGRjcF9vcHMtPnZlcmlmeV9yZWNlaXZlcl9jZXJ0X3ByZXBh cmVfa20oY29tcC0+bWVpX2NsZGV2LAorCQkJCQkJCSAgICAgIGRhdGEsIHJ4X2NlcnQsCisJCQkJ CQkJICAgICAgcGFpcmVkLCBla19wdWJfa20sCisJCQkJCQkJICAgICAgbXNnX3N6KTsKKwlpZiAo cmV0IDwgMCkKKwkJY29tcC0+aGRjcF9vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5tZWlf Y2xkZXYsIGRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZGNwMl92ZXJp ZnlfaHByaW1lKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgICBz dHJ1Y3QgaGRjcDJfYWtlX3NlbmRfaHByaW1lICpyeF9ocHJpbWUpCit7CisJc3RydWN0IG1laV9o ZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7CisJ c3RydWN0IGk5MTVfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5jb21wX21hc3Rl cjsKKwlpbnQgcmV0OworCisJaWYgKCFjb21wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgh Y29tcC0+aGRjcF9vcHMgfHwgIWNvbXAtPm1laV9jbGRldiB8fCBkYXRhLT5wb3J0ID09IElOVkFM SURfUE9SVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBjb21wLT5oZGNwX29wcy0+dmVy aWZ5X2hwcmltZShjb21wLT5tZWlfY2xkZXYsIGRhdGEsIHJ4X2hwcmltZSk7CisJaWYgKHJldCA8 IDApCisJCWNvbXAtPmhkY3Bfb3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+bWVpX2NsZGV2 LCBkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2hkY3AyX3N0b3JlX3Bh aXJpbmdfaW5mbyhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgc3RydWN0 IGhkY3AyX2FrZV9zZW5kX3BhaXJpbmdfaW5mbyAqcGFpcmluZ19pbmZvKQoreworCXN0cnVjdCBt ZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYp OworCXN0cnVjdCBpOTE1X2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+Y29tcF9t YXN0ZXI7CisJaW50IHJldDsKKworCWlmICghY29tcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoIWNvbXAtPmhkY3Bfb3BzIHx8ICFjb21wLT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PSBJ TlZBTElEX1BPUlQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gY29tcC0+aGRjcF9vcHMt PnN0b3JlX3BhaXJpbmdfaW5mbyhjb21wLT5tZWlfY2xkZXYsCisJCQkJCSAgICBkYXRhLCBwYWly aW5nX2luZm8pOworCWlmIChyZXQgPCAwKQorCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9z ZXNzaW9uKGNvbXAtPm1laV9jbGRldiwgZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50CitoZGNwMl9wcmVwYXJlX2xjX2luaXQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29u bmVjdG9yLAorCQkgICAgICBzdHJ1Y3QgaGRjcDJfbGNfaW5pdCAqbGNfaW5pdCkKK3sKKwlzdHJ1 Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2Uu ZGV2KTsKKwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmNv bXBfbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAoIWNvbXApCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8IGRhdGEtPnBvcnQg PT0gSU5WQUxJRF9QT1JUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGNvbXAtPmhkY3Bf b3BzLT5pbml0aWF0ZV9sb2NhbGl0eV9jaGVjayhjb21wLT5tZWlfY2xkZXYsCisJCQkJCQkgICAg ICBkYXRhLCBsY19pbml0KTsKKwlpZiAocmV0IDwgMCkKKwkJY29tcC0+aGRjcF9vcHMtPmNsb3Nl X2hkY3Bfc2Vzc2lvbihjb21wLT5tZWlfY2xkZXYsIGRhdGEpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludAoraGRjcDJfdmVyaWZ5X2xwcmltZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCSAgICBzdHJ1Y3QgaGRjcDJfbGNfc2VuZF9scHJpbWUgKnJ4X2xwcmlt ZSkKK3sKKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVp X2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25u ZWN0b3ItPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVyICpjb21wID0g ZGV2X3ByaXYtPmNvbXBfbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAoIWNvbXApCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8 IGRhdGEtPnBvcnQgPT0gSU5WQUxJRF9QT1JUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9 IGNvbXAtPmhkY3Bfb3BzLT52ZXJpZnlfbHByaW1lKGNvbXAtPm1laV9jbGRldiwgZGF0YSwgcnhf bHByaW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJY29tcC0+aGRjcF9vcHMtPmNsb3NlX2hkY3Bfc2Vz c2lvbihjb21wLT5tZWlfY2xkZXYsIGRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBoZGNwMl9wcmVwYXJlX3NrZXkoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9y LAorCQkJICAgICAgc3RydWN0IGhkY3AyX3NrZV9zZW5kX2VrcyAqc2tlX2RhdGEpCit7CisJc3Ry dWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNl LmRldik7CisJc3RydWN0IGk5MTVfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5j b21wX21hc3RlcjsKKwlpbnQgcmV0OworCisJaWYgKCFjb21wKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWlmICghY29tcC0+aGRjcF9vcHMgfHwgIWNvbXAtPm1laV9jbGRldiB8fCBkYXRhLT5wb3J0 ID09IElOVkFMSURfUE9SVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBjb21wLT5oZGNw X29wcy0+Z2V0X3Nlc3Npb25fa2V5KGNvbXAtPm1laV9jbGRldiwgZGF0YSwgc2tlX2RhdGEpOwor CWlmIChyZXQgPCAwKQorCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAt Pm1laV9jbGRldiwgZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhkY3Ay X2F1dGhlbnRpY2F0ZV9wb3J0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK KwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3It PmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3By aXYtPmNvbXBfbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAoIWNvbXApCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8IGRhdGEt PnBvcnQgPT0gSU5WQUxJRF9QT1JUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGNvbXAt PmhkY3Bfb3BzLT5lbmFibGVfaGRjcF9hdXRoZW50aWNhdGlvbihjb21wLT5tZWlfY2xkZXYsIGRh dGEpOworCWlmIChyZXQgPCAwKQorCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9u KGNvbXAtPm1laV9jbGRldiwgZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50 IGhkY3AyX2Nsb3NlX21laV9zZXNzaW9uKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rv cikKIHsKIAlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVp X2RhdGE7CkBAIC05OTgsMTIgKzExODQsMTkwIEBAIHN0YXRpYyBpbnQgaGRjcDJfZGVhdXRoZW50 aWNhdGVfcG9ydChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiAJcmV0dXJuIGhk Y3AyX2Nsb3NlX21laV9zZXNzaW9uKGNvbm5lY3Rvcik7CiB9CiAKKy8qIEF1dGhlbnRpY2F0aW9u IGZsb3cgc3RhcnRzIGZyb20gaGVyZSAqLworc3RhdGljIGludCBoZGNwMl9hdXRoZW50aWNhdGlv bl9rZXlfZXhjaGFuZ2Uoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gY29ubl90b19kaWdfcG9y dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gJmNvbm5lY3Rvci0+aGRj cDsKKwl1bmlvbiB7CisJCXN0cnVjdCBoZGNwMl9ha2VfaW5pdCBha2VfaW5pdDsKKwkJc3RydWN0 IGhkY3AyX2FrZV9zZW5kX2NlcnQgc2VuZF9jZXJ0OworCQlzdHJ1Y3QgaGRjcDJfYWtlX25vX3N0 b3JlZF9rbSBub19zdG9yZWRfa207CisJCXN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9ocHJpbWUgc2Vu ZF9ocHJpbWU7CisJCXN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9wYWlyaW5nX2luZm8gcGFpcmluZ19p bmZvOworCX0gbXNnczsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGltICpzaGltID0gaGRj cC0+c2hpbTsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCisJLyogSW5pdCBmb3Igc2VxX251 bSAqLworCWhkY3AtPnNlcV9udW1fdiA9IDA7CisJaGRjcC0+c2VxX251bV9tID0gMDsKKworCXJl dCA9IGhkY3AyX3ByZXBhcmVfYWtlX2luaXQoY29ubmVjdG9yLCAmbXNncy5ha2VfaW5pdCk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzaGltLT53cml0ZV8yXzJfbXNn KGludGVsX2RpZ19wb3J0LCAmbXNncy5ha2VfaW5pdCwKKwkJCQkgIHNpemVvZihtc2dzLmFrZV9p bml0KSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzaGltLT5yZWFk XzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsIEhEQ1BfMl8yX0FLRV9TRU5EX0NFUlQsCisJCQkJICZt c2dzLnNlbmRfY2VydCwgc2l6ZW9mKG1zZ3Muc2VuZF9jZXJ0KSk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwlpZiAobXNncy5zZW5kX2NlcnQucnhfY2Fwc1swXSAhPSBIRENQXzJf Ml9SWF9DQVBTX1ZFUlNJT05fVkFMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkY3AtPmlzX3Jl cGVhdGVyID0gSERDUF8yXzJfUlhfUkVQRUFURVIobXNncy5zZW5kX2NlcnQucnhfY2Fwc1syXSk7 CisKKwkvKgorCSAqIEhlcmUgbXNncy5ub19zdG9yZWRfa20gd2lsbCBob2xkIG1zZ3MgY29ycmVz cG9uZGluZyB0byB0aGUga20KKwkgKiBzdG9yZWQgYWxzby4KKwkgKi8KKwlyZXQgPSBoZGNwMl92 ZXJpZnlfcnhfY2VydF9wcmVwYXJlX2ttKGNvbm5lY3RvciwgJm1zZ3Muc2VuZF9jZXJ0LAorCQkJ CQkgICAgICAmaGRjcC0+aXNfcGFpcmVkLAorCQkJCQkgICAgICAmbXNncy5ub19zdG9yZWRfa20s ICZzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNoaW0tPndy aXRlXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsICZtc2dzLm5vX3N0b3JlZF9rbSwgc2l6ZSk7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2co aW50ZWxfZGlnX3BvcnQsIEhEQ1BfMl8yX0FLRV9TRU5EX0hQUklNRSwKKwkJCQkgJm1zZ3Muc2Vu ZF9ocHJpbWUsIHNpemVvZihtc2dzLnNlbmRfaHByaW1lKSk7CisJaWYgKHJldCA8IDApCisJCXJl dHVybiByZXQ7CisKKwlyZXQgPSBoZGNwMl92ZXJpZnlfaHByaW1lKGNvbm5lY3RvciwgJm1zZ3Mu c2VuZF9ocHJpbWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFoZGNw LT5pc19wYWlyZWQpIHsKKwkJLyogUGFpcmluZyBpcyByZXF1aXJlZCAqLworCQlyZXQgPSBzaGlt LT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsCisJCQkJCSBIRENQXzJfMl9BS0VfU0VORF9Q QUlSSU5HX0lORk8sCisJCQkJCSAmbXNncy5wYWlyaW5nX2luZm8sCisJCQkJCSBzaXplb2YobXNn cy5wYWlyaW5nX2luZm8pKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJl dCA9IGhkY3AyX3N0b3JlX3BhaXJpbmdfaW5mbyhjb25uZWN0b3IsICZtc2dzLnBhaXJpbmdfaW5m byk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaGRjcC0+aXNfcGFpcmVkID0g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZGNwMl9sb2NhbGl0eV9j aGVjayhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rv cik7CisJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOworCXVuaW9u IHsKKwkJc3RydWN0IGhkY3AyX2xjX2luaXQgbGNfaW5pdDsKKwkJc3RydWN0IGhkY3AyX2xjX3Nl bmRfbHByaW1lIHNlbmRfbHByaW1lOworCX0gbXNnczsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRj cF9zaGltICpzaGltID0gaGRjcC0+c2hpbTsKKwlpbnQgdHJpZXMgPSBIRENQMl9MQ19SRVRSWV9D TlQsIHJldCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0cmllczsgaSsrKSB7CisJCXJldCA9IGhk Y3AyX3ByZXBhcmVfbGNfaW5pdChjb25uZWN0b3IsICZtc2dzLmxjX2luaXQpOworCQlpZiAocmV0 IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHNoaW0tPndyaXRlXzJfMl9tc2coaW50ZWxf ZGlnX3BvcnQsICZtc2dzLmxjX2luaXQsCisJCQkJICAgICAgc2l6ZW9mKG1zZ3MubGNfaW5pdCkp OworCQlpZiAocmV0IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHNoaW0tPnJlYWRfMl8y X21zZyhpbnRlbF9kaWdfcG9ydCwKKwkJCQkJIEhEQ1BfMl8yX0xDX1NFTkRfTFBSSU1FLAorCQkJ CQkgJm1zZ3Muc2VuZF9scHJpbWUsCisJCQkJCSBzaXplb2YobXNncy5zZW5kX2xwcmltZSkpOwor CQlpZiAocmV0IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGhkY3AyX3ZlcmlmeV9scHJp bWUoY29ubmVjdG9yLCAmbXNncy5zZW5kX2xwcmltZSk7CisJCWlmICghcmV0KQorCQkJYnJlYWs7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZGNwMl9zZXNzaW9uX2tleV9l eGNoYW5nZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5l Y3Rvcik7CisJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOworCXN0 cnVjdCBoZGNwMl9za2Vfc2VuZF9la3Mgc2VuZF9la3M7CisJaW50IHJldDsKKworCXJldCA9IGhk Y3AyX3ByZXBhcmVfc2tleShjb25uZWN0b3IsICZzZW5kX2Vrcyk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSBoZGNwLT5zaGltLT53cml0ZV8yXzJfbXNnKGludGVsX2Rp Z19wb3J0LCAmc2VuZF9la3MsCisJCQkJCXNpemVvZihzZW5kX2VrcykpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaGRjcDJfYXV0 aGVudGljYXRlX3Npbmsoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNl LmRldik7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25u X3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7CisJc3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29u bmVjdG9yLT5oZGNwOworCWNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBoZGNw LT5zaGltOworCXN0cnVjdCBoZGNwMl9kcF9lcnJhdGFfc3RyZWFtX3R5cGUgc3RyZWFtX3R5cGVf bXNnOworCWludCByZXQ7CiAKLQlEUk1fRVJST1IoIlNpbmsgYXV0aGVudGljYXRpb24gaXMgZG9u ZSBpbiBzdWJzZXF1ZW50IHBhdGNoZXNcbiIpOwotCXJldHVybiAtRUlOVkFMOworCXJldCA9IGhk Y3AyX2F1dGhlbnRpY2F0aW9uX2tleV9leGNoYW5nZShjb25uZWN0b3IpOworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERUJVR19LTVMoIkFLRSBGYWlsZWQuIEVyciA6ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCXJldCA9IGhkY3AyX2xvY2FsaXR5X2NoZWNrKGNvbm5lY3Rvcik7 CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFQlVHX0tNUygiTG9jYWxpdHkgQ2hlY2sgZmFpbGVk LiBFcnIgOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBoZGNwMl9z ZXNzaW9uX2tleV9leGNoYW5nZShjb25uZWN0b3IpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9E RUJVR19LTVMoIlNLRSBGYWlsZWQuIEVyciA6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWlmICghaGRjcC0+aXNfcmVwZWF0ZXIgJiYgc2hpbS0+Y29uZmlnX3N0cmVhbV90eXBl KSB7CisJCS8qCisJCSAqIEVycmF0YSBmb3IgRFA6IEFzIFN0cmVhbSB0eXBlIGlzIHVzZWQgZm9y IGVuY3J5cHRpb24sCisJCSAqIFJlY2VpdmVyIHNob3VsZCBiZSBjb21tdW5pY2F0ZWQgd2l0aCBz dHJlYW0gdHlwZSBmb3IgdGhlCisJCSAqIGRlY3J5cHRpb24gb2YgdGhlIGNvbnRlbnQuCisJCSAq IFJlcGVhdGVyIHdpbGwgYmUgY29tbXVuaWNhdGVkIHdpdGggc3RyZWFtIHR5cGUgYXMgYQorCQkg KiBwYXJ0IG9mIGl0J3MgYXV0aCBsYXRlciBpbiB0aW1lLgorCQkgKi8KKwkJc3RyZWFtX3R5cGVf bXNnLm1zZ19pZCA9IEhEQ1BfMl8yX0VSUkFUQV9EUF9TVFJFQU1fVFlQRTsKKwkJc3RyZWFtX3R5 cGVfbXNnLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBlOworCisJCXJldCA9IHNoaW0t PmNvbmZpZ19zdHJlYW1fdHlwZShpbnRlbF9kaWdfcG9ydCwgJnN0cmVhbV90eXBlX21zZywKKwkJ CQkJICAgICAgIHNpemVvZihzdHJlYW1fdHlwZV9tc2cpKTsKKwkJaWYgKHJldCA8IDApCisJCQly ZXR1cm4gcmV0OworCX0KKworCWhkY3AtPm1laV9kYXRhLnN0cmVhbXNbMF0uc3RyZWFtX3R5cGUg PSBoZGNwLT5jb250ZW50X3R5cGU7CisJcmV0ID0gaGRjcDJfYXV0aGVudGljYXRlX3BvcnQoY29u bmVjdG9yKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQ7CiB9 CiAKIHN0YXRpYyBpbnQgaGRjcDJfZW5hYmxlX2VuY3J5cHRpb24oc3RydWN0IGludGVsX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=