From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandre Courbot Subject: [PATCH 7/8] secboot: add low-secure firmware hooks Date: Tue, 11 Oct 2016 15:45:52 +0900 Message-ID: <20161011064553.10616-8-acourbot@nvidia.com> References: <20161011064553.10616-1-acourbot@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161011064553.10616-1-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Ben Skeggs Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org U2VjdXJlIGZpcm13YXJlcyBwcm92aWRlZCBieSBOVklESUEgd2lsbCBmb2xsb3cgdGhlIHNhbWUg b3ZlcmFsbApwcmluY2lwbGUsIGJ1dCBtYXkgc2xpZ2h0bHkgZGlmZmVyIGluIGZvcm1hdCwgb3Ig bm90IHVzZSB0aGUgc2FtZQpib290bG9hZGVyIGRlc2NyaXB0b3IgZXZlbiBvbiB0aGUgc2FtZSBj aGlwLiBJbiBvcmRlciB0byBoYW5kbGUKdGhpcyBhcyBncmFjZWZ1bGx5IGFzIHBvc3NpYmxlLCB0 dXJuIHRoZSBMUyBmaXJtd2FyZSBmdW5jdGlvbnMgaW50bwpob29rcyB0aGF0IGNhbiBiZSBvdmVy bG9hZGVkIGFzIG5lZWRlZC4KClRoZSBjdXJyZW50IGhvb2tzIGNvdmVyIHRoZSBleHRlcm5hbCBm aXJtd2FyZSBsb2FkaW5nIGFzIHdlbGwgYXMgdGhlCmJvb3Rsb2FkZXIgZGVzY3JpcHRvciBnZW5l cmF0aW9uLgoKU2lnbmVkLW9mZi1ieTogQWxleGFuZHJlIENvdXJib3QgPGFjb3VyYm90QG52aWRp YS5jb20+Ci0tLQogZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfdjEuYyAgICAg ICB8IDI0MyArKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2Fjcl92MS5oICAgICAgIHwgMjEwICsrKysrKysrKysrKysrKysrKysrKwogZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfdjFfZ20yMGIuYyB8ICAzMSArKystCiAz IGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRpb25zKCspLCAyMDUgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfdjEuYyBiL2RybS9u b3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3YxLmMKaW5kZXggZGIwZmIzMzM4Mzk4Li42 OGJiMzExM2ZkMjMgMTAwNjQ0Ci0tLSBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3Qv YWNyX3YxLmMKKysrIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfdjEuYwpA QCAtNzAsMTc1ICs3MCw2IEBAIHN0cnVjdCBmd19ibF9kZXNjIHsKIH07CiAKIAotLyoKLSAqCi0g KiBMUyBibG9iIHN0cnVjdHVyZXMKLSAqCi0gKi8KLQotLyoqCi0gKiBzdHJ1Y3QgbHNmX3Vjb2Rl X2Rlc2MgLSBMUyBmYWxjb24gc2lnbmF0dXJlcwotICogQHByZF9rZXlzOgkJc2lnbmF0dXJlIHRv IHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gcHJvZHVjdGlvbiBtb2RlCi0gKiBAZGdiX2tleXM6CQlz aWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBkZWJ1ZyBtb2RlCi0gKiBAYl9wcmRf cHJlc2VudDoJd2hldGhlciB0aGUgcHJvZHVjdGlvbiBrZXkgaXMgcHJlc2VudAotICogQGJfZGdi X3ByZXNlbnQ6CXdoZXRoZXIgdGhlIGRlYnVnIGtleSBpcyBwcmVzZW50Ci0gKiBAZmFsY29uX2lk OgkJSUQgb2YgdGhlIGZhbGNvbiB0aGUgdWNvZGUgYXBwbGllcyB0bwotICoKLSAqIERpcmVjdGx5 IGxvYWRlZCBmcm9tIGEgc2lnbmF0dXJlIGZpbGUuCi0gKi8KLXN0cnVjdCBsc2ZfdWNvZGVfZGVz YyB7Ci0JdTggIHByZF9rZXlzWzJdWzE2XTsKLQl1OCAgZGJnX2tleXNbMl1bMTZdOwotCXUzMiBi X3ByZF9wcmVzZW50OwotCXUzMiBiX2RiZ19wcmVzZW50OwotCXUzMiBmYWxjb25faWQ7Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBsc2ZfbHNiX2hlYWRlciAtIExTIGZpcm13YXJlIGhlYWRlcgotICog QHNpZ25hdHVyZToJCXNpZ25hdHVyZSB0byB2ZXJpZnkgdGhlIGZpcm13YXJlIGFnYWluc3QKLSAq IEB1Y29kZV9vZmY6CQlvZmZzZXQgb2YgdGhlIHVjb2RlIGJsb2IgaW4gdGhlIFdQUiByZWdpb24u IFRoZSB1Y29kZQotICogICAgICAgICAgICAgICAgICAgICAgYmxvYiBjb250YWlucyB0aGUgYm9v dGxvYWRlciwgY29kZSBhbmQgZGF0YSBvZiB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgIExT IGZhbGNvbgotICogQHVjb2RlX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBibG9iLCBpbmNsdWRp bmcgYm9vdGxvYWRlcgotICogQGRhdGFfc2l6ZToJCXNpemUgb2YgdGhlIHVjb2RlIGJsb2IgZGF0 YQotICogQGJsX2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUgYm9vdGxvYWRlciBjb2RlCi0gKiBAYmxf aW1lbV9vZmY6CW9mZnNldCBpbiBpbWVtIG9mIHRoZSBib290bG9hZGVyCi0gKiBAYmxfZGF0YV9v ZmY6CW9mZnNldCBvZiB0aGUgYm9vdGxvYWRlciBkYXRhIGluIFdQUiByZWdpb24KLSAqIEBibF9k YXRhX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YQotICogQGFwcF9jb2RlX29mZjoJ b2Zmc2V0IG9mIHRoZSBhcHAgY29kZSByZWxhdGl2ZSB0byB1Y29kZV9vZmYKLSAqIEBhcHBfY29k ZV9zaXplOglzaXplIG9mIHRoZSBhcHAgY29kZQotICogQGFwcF9kYXRhX29mZjoJb2Zmc2V0IG9m IHRoZSBhcHAgZGF0YSByZWxhdGl2ZSB0byB1Y29kZV9vZmYKLSAqIEBhcHBfZGF0YV9zaXplOglz aXplIG9mIHRoZSBhcHAgZGF0YQotICogQGZsYWdzOgkJZmxhZ3MgZm9yIHRoZSBzZWN1cmUgYm9v dGxvYWRlcgotICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHdyaXR0ZW4gaW50byB0aGUgV1BSIHJl Z2lvbiBmb3IgZWFjaCBtYW5hZ2VkIGZhbGNvbi4gRWFjaAotICogaW5zdGFuY2UgaXMgcmVmZXJl bmNlZCBieSB0aGUgbHNiX29mZnNldCBtZW1iZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLSAqIGxz Zl93cHJfaGVhZGVyLgotICovCi1zdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgewotCXN0cnVjdCBsc2Zf dWNvZGVfZGVzYyBzaWduYXR1cmU7Ci0JdTMyIHVjb2RlX29mZjsKLQl1MzIgdWNvZGVfc2l6ZTsK LQl1MzIgZGF0YV9zaXplOwotCXUzMiBibF9jb2RlX3NpemU7Ci0JdTMyIGJsX2ltZW1fb2ZmOwot CXUzMiBibF9kYXRhX29mZjsKLQl1MzIgYmxfZGF0YV9zaXplOwotCXUzMiBhcHBfY29kZV9vZmY7 Ci0JdTMyIGFwcF9jb2RlX3NpemU7Ci0JdTMyIGFwcF9kYXRhX29mZjsKLQl1MzIgYXBwX2RhdGFf c2l6ZTsKLQl1MzIgZmxhZ3M7Ci0jZGVmaW5lIExTRl9GTEFHX0xPQURfQ09ERV9BVF8wCQkxCi0j ZGVmaW5lIExTRl9GTEFHX0RNQUNUTF9SRVFfQ1RYCQk0Ci0jZGVmaW5lIExTRl9GTEFHX0ZPUkNF X1BSSVZfTE9BRAk4Ci19OwotCi0vKioKLSAqIHN0cnVjdCBsc2Zfd3ByX2hlYWRlciAtIExTIGJs b2IgV1BSIEhlYWRlcgotICogQGZhbGNvbl9pZDoJCUxTIGZhbGNvbiBJRAotICogQGxzYl9vZmZz ZXQ6CQlvZmZzZXQgb2YgdGhlIGxzYl9sc2ZfaGVhZGVyIGluIHRoZSBXUFIgcmVnaW9uCi0gKiBA Ym9vdHN0cmFwX293bmVyOglzZWN1cmUgZmFsY29uIHJlcG9uc2libGUgZm9yIGJvb3RzdHJhcHBp bmcgdGhlIExTIGZhbGNvbgotICogQGxhenlfYm9vdHN0cmFwOglza2lwIGJvb3RzdHJhcHBpbmcg YnkgQUNSCi0gKiBAc3RhdHVzOgkJYm9vdHN0cmFwcGluZyBzdGF0dXMKLSAqCi0gKiBBbiBhcnJh eSBvZiB0aGVzZSBpcyB3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFdQUiByZWdpb24s IG9uZSBmb3IKLSAqIGVhY2ggbWFuYWdlZCBmYWxjb24uIFRoZSBhcnJheSBpcyB0ZXJtaW5hdGVk IGJ5IGFuIGluc3RhbmNlIHdoaWNoIGZhbGNvbl9pZAotICogaXMgTFNGX0ZBTENPTl9JRF9JTlZB TElELgotICovCi1zdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgewotCXUzMiAgZmFsY29uX2lkOwotCXUz MiAgbHNiX29mZnNldDsKLQl1MzIgIGJvb3RzdHJhcF9vd25lcjsKLQl1MzIgIGxhenlfYm9vdHN0 cmFwOwotCXUzMiAgc3RhdHVzOwotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX05PTkUJCQkJMAot I2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX0NPUFkJCQkJMQotI2RlZmluZSBMU0ZfSU1BR0VfU1RB VFVTX1ZBTElEQVRJT05fQ09ERV9GQUlMRUQJCTIKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19W QUxJREFUSU9OX0RBVEFfRkFJTEVECQkzCi0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURB VElPTl9ET05FCQk0Ci0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9TS0lQUEVE CQk1Ci0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfQk9PVFNUUkFQX1JFQURZCQk2Ci19OwotCi0K LS8qKgotICogc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjIC0gZGVzY3JpcHRvciBvZiBmaXJtd2Fy ZSBpbWFnZQotICogQGRlc2NyaXB0b3Jfc2l6ZToJCXNpemUgb2YgdGhpcyBkZXNjcmlwdG9yCi0g KiBAaW1hZ2Vfc2l6ZToJCQlzaXplIG9mIHRoZSB3aG9sZSBpbWFnZQotICogQGJvb3Rsb2FkZXJf c3RhcnRfb2Zmc2V0OglzdGFydCBvZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgaW4gdWNvZGUgaW1h Z2UKLSAqIEBib290bG9hZGVyX3NpemU6CQlzaXplIG9mIHRoZSBib290bG9hZGVyCi0gKiBAYm9v dGxvYWRlcl9pbWVtX29mZnNldDoJc3RhcnQgb2ZmIHNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiBJ TUVNCi0gKiBAYm9vdGxvYWRlcl9lbnRyeV9wb2ludDoJZW50cnkgcG9pbnQgb2YgdGhlIGJvb3Rs b2FkZXIgaW4gSU1FTQotICogQGFwcF9zdGFydF9vZmZzZXQ6CQlzdGFydCBvZmZzZXQgb2YgdGhl IExTIGZpcm13YXJlCi0gKiBAYXBwX3NpemU6CQkJc2l6ZSBvZiB0aGUgTFMgZmlybXdhcmUncyBj b2RlIGFuZCBkYXRhCi0gKiBAYXBwX2ltZW1fb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBhcHAgaW4g SU1FTQotICogQGFwcF9pbWVtX2VudHJ5OgkJZW50cnkgcG9pbnQgb2YgdGhlIGFwcCBpbiBJTUVN Ci0gKiBAYXBwX2RtZW1fb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBkYXRhIGluIERNRU0KLSAqIEBh cHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ6CW9mZnNldCBvZiBhcHAgY29kZSBmcm9tIGFwcF9zdGFy dF9vZmZzZXQKLSAqIEBhcHBfcmVzaWRlbnRfY29kZV9zaXplOglzaXplIG9mIHRoZSBjb2RlCi0g KiBAYXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OglvZmZzZXQgb2YgZGF0YSBmcm9tIGFwcF9zdGFy dF9vZmZzZXQKLSAqIEBhcHBfcmVzaWRlbnRfZGF0YV9zaXplOglzaXplIG9mIGRhdGEKLSAqCi0g KiBBIGZpcm13YXJlIGltYWdlIGNvbnRhaW5zIHRoZSBjb2RlLCBkYXRhLCBhbmQgYm9vdGxvYWRl ciBvZiBhIGdpdmVuIExTCi0gKiBmYWxjb24gaW4gYSBzaW5nbGUgYmxvYi4gVGhpcyBzdHJ1Y3R1 cmUgZGVzY3JpYmVzIHdoZXJlIGV2ZXJ5dGhpbmcgaXMuCi0gKgotICogVGhpcyBjYW4gYmUgZ2Vu ZXJhdGVkIGZyb20gYSAoYm9vdGxvYWRlciwgY29kZSwgZGF0YSkgc2V0IGlmIHRoZXkgaGF2ZQot ICogYmVlbiBsb2FkZWQgc2VwYXJhdGVseSwgb3IgY29tZSBkaXJlY3RseSBmcm9tIGEgZmlsZS4K LSAqLwotc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjIHsKLQl1MzIgZGVzY3JpcHRvcl9zaXplOwot CXUzMiBpbWFnZV9zaXplOwotCXUzMiB0b29sc192ZXJzaW9uOwotCXUzMiBhcHBfdmVyc2lvbjsK LQljaGFyIGRhdGVbNjRdOwotCXUzMiBib290bG9hZGVyX3N0YXJ0X29mZnNldDsKLQl1MzIgYm9v dGxvYWRlcl9zaXplOwotCXUzMiBib290bG9hZGVyX2ltZW1fb2Zmc2V0OwotCXUzMiBib290bG9h ZGVyX2VudHJ5X3BvaW50OwotCXUzMiBhcHBfc3RhcnRfb2Zmc2V0OwotCXUzMiBhcHBfc2l6ZTsK LQl1MzIgYXBwX2ltZW1fb2Zmc2V0OwotCXUzMiBhcHBfaW1lbV9lbnRyeTsKLQl1MzIgYXBwX2Rt ZW1fb2Zmc2V0OwotCXUzMiBhcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ7Ci0JdTMyIGFwcF9yZXNp ZGVudF9jb2RlX3NpemU7Ci0JdTMyIGFwcF9yZXNpZGVudF9kYXRhX29mZnNldDsKLQl1MzIgYXBw X3Jlc2lkZW50X2RhdGFfc2l6ZTsKLQl1MzIgbmJfb3ZlcmxheXM7Ci0Jc3RydWN0IHt1MzIgc3Rh cnQ7IHUzMiBzaXplOyB9IGxvYWRfb3ZsWzY0XTsKLQl1MzIgY29tcHJlc3NlZDsKLX07Ci0KLS8q KgotICogc3RydWN0IGxzX3Vjb2RlX2ltZyAtIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBsb2FkZWQg TFMgZmlybXdhcmVzCi0gKiBAbm9kZToJCXRvIGxpbmsgd2l0aGluIGxzZl91Y29kZV9tZ3IKLSAq IEBmYWxjb25faWQ6CQlJRCBvZiB0aGUgZmFsY29uIHRoaXMgTFMgZmlybXdhcmUgaXMgZm9yCi0g KiBAdWNvZGVfZGVzYzoJCWxvYWRlZCBvciBnZW5lcmF0ZWQgbWFwIG9mIHVjb2RlX2RhdGEKLSAq IEB1Y29kZV9oZWFkZXI6CWhlYWRlciBvZiB0aGUgZmlybXdhcmUKLSAqIEB1Y29kZV9kYXRhOgkJ ZmlybXdhcmUgcGF5bG9hZCAoY29kZSBhbmQgZGF0YSkKLSAqIEB1Y29kZV9zaXplOgkJc2l6ZSBp biBieXRlcyBvZiBkYXRhIGluIHVjb2RlX2RhdGEKLSAqIEB3cHJfaGVhZGVyOgkJV1BSIGhlYWRl ciB0byBiZSB3cml0dGVuIHRvIHRoZSBMUyBibG9iCi0gKiBAbHNiX2hlYWRlcjoJCUxTQiBoZWFk ZXIgdG8gYmUgd3JpdHRlbiB0byB0aGUgTFMgYmxvYgotICoKLSAqIFByZXBhcmluZyB0aGUgV1BS IExTIGJsb2IgcmVxdWlyZXMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBMUyBmaXJtd2FyZXMK LSAqIChzaXplLCBldGMpIHRvIGJlIGtub3duLiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwg dGhlIGRhdGEgb2Ygb25lIExTCi0gKiBmaXJtd2FyZS4KLSAqLwotc3RydWN0IGxzX3Vjb2RlX2lt ZyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCWVudW0gbnZrbV9mYWxjb25pZHggZmFsY29u X2lkOwotCi0Jc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjIHVjb2RlX2Rlc2M7Ci0JdTMyICp1Y29k ZV9oZWFkZXI7Ci0JdTggKnVjb2RlX2RhdGE7Ci0JdTMyIHVjb2RlX3NpemU7Ci0KLQlzdHJ1Y3Qg bHNmX3dwcl9oZWFkZXIgd3ByX2hlYWRlcjsKLQlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgbHNiX2hl YWRlcjsKLX07Ci0KIC8qKgogICogc3RydWN0IGxzX3Vjb2RlX21nciAtIG1hbmFnZXIgZm9yIGFs bCBMUyBmYWxjb24gZmlybXdhcmVzCiAgKiBAY291bnQ6CW51bWJlciBvZiBtYW5hZ2VkIExTIGZh bGNvbnMKQEAgLTM0MCwxMiArMTcxLDYgQEAgc3RydWN0IGhzZmxjbl9hY3JfZGVzYyB7CiAJfSB2 cHJfZGVzYzsKIH07CiAKLQotc3RhdGljIGlubGluZSB1NjQgZmxjbjY0X3RvX3U2NChjb25zdCBz dHJ1Y3QgZmxjbl91NjQgZikKLXsKLQlyZXR1cm4gKCh1NjQpZi5oaSkgPDwgMzIgfCBmLmxvOwot fQotCiAvKioKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGR1cGxpY2F0ZSBhIGZpcm13YXJl IGZpbGUgaW4gbWVtb3J5IGFuZCBjaGVjayB0aGF0CiAgKiBpdCBoYXMgdGhlIHJlcXVpcmVkIG1p bmltdW0gc2l6ZS4KQEAgLTUwNywxNiArMzMyLDE0IEBAIGVycm9yOgogCiB0eXBlZGVmIGludCAo KmxzZl9sb2FkX2Z1bmMpKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqLCBzdHJ1Y3QgbHNfdWNv ZGVfaW1nICopOwogCi1zdGF0aWMgaW50Ci1sc191Y29kZV9pbWdfbG9hZF9mZWNzKGNvbnN0IHN0 cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LAotCQkgICAgICAgc3RydWN0IGxzX3Vjb2RlX2ltZyAq aW1nKQoraW50CithY3JfdjFfbHNfbG9hZF9mZWNzKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAq c3ViZGV2LCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcpCiB7CiAJcmV0dXJuIGxzX3Vjb2RlX2lt Z19sb2FkX2dlbmVyaWMoc3ViZGV2LCBpbWcsICJmZWNzIiwgTlZLTV9GQUxDT05fRkVDUyk7CiB9 CiAKLXN0YXRpYyBpbnQKLWxzX3Vjb2RlX2ltZ19sb2FkX2dwY2NzKGNvbnN0IHN0cnVjdCBudmtt X3N1YmRldiAqc3ViZGV2LAotCQkJc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nKQoraW50CithY3Jf djFfbHNfbG9hZF9ncGNjcyhjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwgc3RydWN0 IGxzX3Vjb2RlX2ltZyAqaW1nKQogewogCXJldHVybiBsc191Y29kZV9pbWdfbG9hZF9nZW5lcmlj KHN1YmRldiwgaW1nLCAiZ3BjY3MiLAogCQkJCQkgTlZLTV9GQUxDT05fR1BDQ1MpOwpAQCAtNTQ0 LDE0ICszNjcsOCBAQCBsc191Y29kZV9pbWdfbG9hZChjb25zdCBzdHJ1Y3QgbnZrbV9zdWJkZXYg KnN1YmRldiwgbHNmX2xvYWRfZnVuYyBsb2FkX2Z1bmMpCiAJcmV0dXJuIGltZzsKIH0KIAotc3Rh dGljIGNvbnN0IGxzZl9sb2FkX2Z1bmMgbHNmX2xvYWRfZnVuY3NbXSA9IHsKLQlbTlZLTV9GQUxD T05fRU5EXSA9IE5VTEwsIC8qIHJlc2VydmUgZW5vdWdoIHNwYWNlICovCi0JW05WS01fRkFMQ09O X0ZFQ1NdID0gbHNfdWNvZGVfaW1nX2xvYWRfZmVjcywKLQlbTlZLTV9GQUxDT05fR1BDQ1NdID0g bHNfdWNvZGVfaW1nX2xvYWRfZ3BjY3MsCi19OwotCiAvKioKLSAqIGxzX3Vjb2RlX2ltZ19wb3B1 bGF0ZV9ibF9kZXNjKCkgLSBwb3B1bGF0ZSBhIERNRU0gQkwgZGVzY3JpcHRvciBmb3IgTFMgaW1h Z2UKKyAqIGFjcl92MV9sc19nZW5lcmljX2JsX2Rlc2MoKSAtIHBvcHVsYXRlIGEgZ2VuZXJpYyBC TCBkZXNjcmlwdG9yIGZvciBMUyBpbWFnZQogICogQGltZzoJdWNvZGUgaW1hZ2UgdG8gZ2VuZXJh dGUgYWdhaW5zdAogICogQGRlc2M6CWRlc2NyaXB0b3IgdG8gcG9wdWxhdGUKICAqIEBzYjoJCXNl Y3VyZSBib290IHN0YXRlIHRvIHVzZSBmb3IgYmFzZSBhZGRyZXNzZXMKQEAgLTU2MSwxMCArMzc4 LDExIEBAIHN0YXRpYyBjb25zdCBsc2ZfbG9hZF9mdW5jIGxzZl9sb2FkX2Z1bmNzW10gPSB7CiAg KgogICovCiBzdGF0aWMgdm9pZAotbHNfdWNvZGVfaW1nX3BvcHVsYXRlX2JsX2Rlc2Moc3RydWN0 IGxzX3Vjb2RlX2ltZyAqaW1nLCB1NjQgd3ByX2FkZHIsCi0JCQkgICAgICBzdHJ1Y3QgYWNyX3Yx X2JsX2Rlc2MgKmRlc2MpCithY3JfdjFfbHNfZ2VuZXJpY19ibF9kZXNjKGNvbnN0IHN0cnVjdCBs c191Y29kZV9pbWcgKmltZywgdTY0IHdwcl9hZGRyLAorCQkJICB2b2lkICpfZGVzYykKIHsKLQlz dHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVfZGVzYzsKKwlzdHJ1 Y3QgYWNyX3YxX2JsX2Rlc2MgKmRlc2MgPSBfZGVzYzsKKwljb25zdCBzdHJ1Y3QgbHNfdWNvZGVf aW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVfZGVzYzsKIAl1NjQgYWRkcl9iYXNlOwogCiAJ YWRkcl9iYXNlID0gd3ByX2FkZHIgKyBpbWctPmxzYl9oZWFkZXIudWNvZGVfb2ZmICsKQEAgLTU3 MywxNCArMzkxLDE0IEBAIGxzX3Vjb2RlX2ltZ19wb3B1bGF0ZV9ibF9kZXNjKHN0cnVjdCBsc191 Y29kZV9pbWcgKmltZywgdTY0IHdwcl9hZGRyLAogCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRl c2MpKTsKIAlkZXNjLT5jdHhfZG1hID0gRkFMQ09OX0RNQUlEWF9VQ09ERTsKIAlkZXNjLT5jb2Rl X2RtYV9iYXNlLmxvID0gbG93ZXJfMzJfYml0cygKLQkJKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBf cmVzaWRlbnRfY29kZV9vZmZzZXQpKTsKKwkJCQkgKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBfcmVz aWRlbnRfY29kZV9vZmZzZXQpKTsKIAlkZXNjLT5jb2RlX2RtYV9iYXNlLmhpID0gdXBwZXJfMzJf Yml0cygKLQkJKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQpKTsK KwkJCQkgKGFkZHJfYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQpKTsKIAlk ZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplOwog CWRlc2MtPmRhdGFfZG1hX2Jhc2UubG8gPSBsb3dlcl8zMl9iaXRzKAotCQkoYWRkcl9iYXNlICsg cGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkpOworCQkJCSAoYWRkcl9iYXNlICsgcGRl c2MtPmFwcF9yZXNpZGVudF9kYXRhX29mZnNldCkpOwogCWRlc2MtPmRhdGFfZG1hX2Jhc2UuaGkg PSB1cHBlcl8zMl9iaXRzKAotCQkoYWRkcl9iYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRh X29mZnNldCkpOworCQkJCSAoYWRkcl9iYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRhX29m ZnNldCkpOwogCWRlc2MtPmRhdGFfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9zaXpl OwogCWRlc2MtPmNvZGVfZW50cnlfcG9pbnQgPSBwZGVzYy0+YXBwX2ltZW1fZW50cnk7CiB9CkBA IC02MDksNiArNDI3LDggQEAgbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgbnZrbV9h Y3JfdjEgKmFjciwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqaW1nLAogCXN0cnVjdCBsc2Zfd3ByX2hl YWRlciAqd2hkciA9ICZpbWctPndwcl9oZWFkZXI7CiAJc3RydWN0IGxzZl9sc2JfaGVhZGVyICps aGRyID0gJmltZy0+bHNiX2hlYWRlcjsKIAlzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgKmRlc2Mg PSAmaW1nLT51Y29kZV9kZXNjOworCWNvbnN0IHN0cnVjdCBudmttX2Fjcl92MV9sc19zaW5nbGVf ZnVuYyAqZnVuYyA9CisJCQkJCQkoKmFjci0+bHNfZnVuYylbaW1nLT5mYWxjb25faWRdOwogCiAJ aWYgKGltZy0+dWNvZGVfaGVhZGVyKSB7CiAJCW52a21fZmF0YWwoYWNyLT5iYXNlLnN1YmRldiwK QEAgLTY2OSw5ICs0ODksOCBAQCBsc191Y29kZV9pbWdfZmlsbF9oZWFkZXJzKHN0cnVjdCBudmtt X2Fjcl92MSAqYWNyLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsCiAJaWYgKGltZy0+ZmFsY29u X2lkID09IE5WS01fRkFMQ09OX0dQQ0NTKQogCQlsaGRyLT5mbGFncyB8PSBMU0ZfRkxBR19GT1JD RV9QUklWX0xPQUQ7CiAKLQkvKiBBbGlnbiAoc2l6ZSBibG9hdCkgYW5kIHNhdmUgb2ZmIEJMIGRl c2NyaXB0b3Igc2l6ZSAqLwotCWxoZHItPmJsX2RhdGFfc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1 Y3QgYWNyX3YxX2JsX2Rlc2MpLAotCQkJCSAgIExTRl9CTF9EQVRBX1NJWkVfQUxJR04pOworCS8q IEFsaWduIGFuZCBzYXZlIG9mZiBCTCBkZXNjcmlwdG9yIHNpemUgKi8KKwlsaGRyLT5ibF9kYXRh X3NpemUgPSBBTElHTihmdW5jLT5ibF9kZXNjX3NpemUsIExTRl9CTF9EQVRBX1NJWkVfQUxJR04p OwogCS8qCiAJICogQWxpZ24sIHNhdmUgb2ZmLCBhbmQgaW5jbHVkZSB0aGUgYWRkaXRpb25hbCBC TCBkYXRhCiAJICovCkBAIC03NTcsMTQgKzU3NiwxNCBAQCBsc191Y29kZV9tZ3Jfd3JpdGVfd3By KHN0cnVjdCBudmttX2Fjcl92MSAqYWNyLCBzdHJ1Y3QgbHNfdWNvZGVfbWdyICptZ3IsCiAKIAkJ LyogR2VuZXJhdGUgYW5kIHdyaXRlIEJMIGRlc2NyaXB0b3IgKi8KIAkJaWYgKCFpbWctPnVjb2Rl X2hlYWRlcikgewotCQkJdTggZGVzY1thY3ItPmZ1bmMtPmJsX2Rlc2Nfc2l6ZV07Ci0JCQlzdHJ1 Y3QgYWNyX3YxX2JsX2Rlc2MgZ2Rlc2M7CisJCQljb25zdCBzdHJ1Y3QgbnZrbV9hY3JfdjFfbHNf c2luZ2xlX2Z1bmMgKmxzX2Z1bmMgPQorCQkJCSgqYWNyLT5sc19mdW5jKVtpbWctPmZhbGNvbl9p ZF07CisJCQl1OCBnZGVzY1tsc19mdW5jLT5ibF9kZXNjX3NpemVdOwogCi0JCQlsc191Y29kZV9p bWdfcG9wdWxhdGVfYmxfZGVzYyhpbWcsIHdwcl9hZGRyLCAmZ2Rlc2MpOwotCQkJYWNyLT5mdW5j LT5nZW5lcmF0ZV9ibF9kZXNjKCZnZGVzYywgJmRlc2MpOworCQkJbHNfZnVuYy0+Z2VuZXJhdGVf YmxfZGVzYyhpbWcsIHdwcl9hZGRyLCAmZ2Rlc2MpOwogCQkJbnZrbV9ncHVvYmpfbWVtY3B5X3Rv KHdwcl9ibG9iLAogCQkJCQkgICAgICBpbWctPmxzYl9oZWFkZXIuYmxfZGF0YV9vZmYsCi0JCQkJ CSAgICAgICZkZXNjLCBhY3ItPmZ1bmMtPmJsX2Rlc2Nfc2l6ZSk7CisJCQkJCSAgICAgICZnZGVz YywgbHNfZnVuYy0+YmxfZGVzY19zaXplKTsKIAkJfQogCiAJCS8qIENvcHkgdWNvZGUgKi8KQEAg LTgwOSw3ICs2MjgsOCBAQCBhY3JfdjFfcHJlcGFyZV9sc19ibG9iKHN0cnVjdCBudmttX2Fjcl92 MSAqYWNyLCB1NjQgd3ByX2FkZHIsIHUzMiB3cHJfc2l6ZSkKIAlmb3JfZWFjaF9zZXRfYml0KGZh bGNvbl9pZCwgJm1hbmFnZWRfZmFsY29ucywgTlZLTV9GQUxDT05fRU5EKSB7CiAJCXN0cnVjdCBs c191Y29kZV9pbWcgKmltZzsKIAotCQlpbWcgPSBsc191Y29kZV9pbWdfbG9hZChzdWJkZXYsIGxz Zl9sb2FkX2Z1bmNzW2ZhbGNvbl9pZF0pOworCQlpbWcgPSBsc191Y29kZV9pbWdfbG9hZChzdWJk ZXYsCisJCQkJCSgqYWNyLT5sc19mdW5jKVtmYWxjb25faWRdLT5sb2FkKTsKIAkJaWYgKElTX0VS UihpbWcpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGltZyk7CiAJCQlnb3RvIGNsZWFudXA7CkBAIC0x MjY1LDYgKzEwODUsMjAgQEAgZ20yMDBfYWNyX3YxX2Z1bmMgPSB7CiAJLmdlbmVyYXRlX2JsX2Rl c2MgPSBhY3JfdjFfZ2VuZXJhdGVfYmxfZGVzYywKIH07CiAKK3N0YXRpYyBjb25zdCBudmttX2Fj cl92MV9sc19mdW5jCithY3JfdjFfbHNfZnVuYyA9IHsKKwlbTlZLTV9GQUxDT05fRkVDU10gPSAm KHN0cnVjdCBudmttX2Fjcl92MV9sc19zaW5nbGVfZnVuYykgeworCQkubG9hZCA9IGFjcl92MV9s c19sb2FkX2ZlY3MsCisJCS5nZW5lcmF0ZV9ibF9kZXNjID0gYWNyX3YxX2xzX2dlbmVyaWNfYmxf ZGVzYywKKwkJLmJsX2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNyX3YxX2JsX2Rlc2MpLAor CX0sCisJW05WS01fRkFMQ09OX0dQQ0NTXSA9ICYoc3RydWN0IG52a21fYWNyX3YxX2xzX3Npbmds ZV9mdW5jKSB7CisJCS5sb2FkID0gYWNyX3YxX2xzX2xvYWRfZ3BjY3MsCisJCS5nZW5lcmF0ZV9i bF9kZXNjID0gYWNyX3YxX2xzX2dlbmVyaWNfYmxfZGVzYywKKwkJLmJsX2Rlc2Nfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgYWNyX3YxX2JsX2Rlc2MpLAorCX0sCit9OworCiBzdGF0aWMgY29uc3Qgc3Ry dWN0IG52a21fYWNyX2Z1bmMKIGFjcl92MV9mdW5jID0gewogCS5tYW5hZ2VkX2ZhbGNvbnMgPSBC SVQoTlZLTV9GQUxDT05fRkVDUykgfApAQCAtMTI4OCw2ICsxMTIyLDcgQEAgbnZrbV9hY3JfdjFf bmV3KHZvaWQpCiAKIAlhY3ItPmJhc2UuZnVuYyA9ICZhY3JfdjFfZnVuYzsKIAlhY3ItPmZ1bmMg PSAmZ20yMDBfYWNyX3YxX2Z1bmM7CisJYWNyLT5sc19mdW5jID0gJmFjcl92MV9sc19mdW5jOwog CiAJcmV0dXJuICZhY3ItPmJhc2U7CiB9CmRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl92MS5oIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9h Y3JfdjEuaAppbmRleCBhYzEyNzNjZTkyZjQuLmEzMTExYzFlZDlmYiAxMDA2NDQKLS0tIGEvZHJt L25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9hY3JfdjEuaAorKysgYi9kcm0vbm91dmVhdS9u dmttL3N1YmRldi9zZWNib290L2Fjcl92MS5oCkBAIC0yNSwxMSArMjUsMjkgQEAKIAogI2luY2x1 ZGUgImFjci5oIgogCisvKioKKyAqIHN0cnVjdCBmbGNuX3U2NCAtIHU2NCBvcmRlcmVkIHRvIGJl IHJlYWQgYnkgYSBmYWxjb24uCisgKi8KIHN0cnVjdCBmbGNuX3U2NCB7CiAJdTMyIGxvOwogCXUz MiBoaTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdTY0IGZsY242NF90b191NjQoY29uc3Qgc3RydWN0 IGZsY25fdTY0IGYpCit7CisJcmV0dXJuICgodTY0KWYuaGkpIDw8IDMyIHwgZi5sbzsKK30KKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgZmxjbl91NjQgdTY0X3RvX2ZsY242NChjb25zdCB1NjQgdSkK K3sKKwlzdHJ1Y3QgZmxjbl91NjQgcmV0ID0geworCQkuaGkgPSB1cHBlcl8zMl9iaXRzKHUpLAor CQkubG8gPSBsb3dlcl8zMl9iaXRzKHUpLAorCX07CisKKwlyZXR1cm4gcmV0OworfQorCiAvKioK ICAqIHN0cnVjdCBhY3JfdjFfYmxfZGVzYyAtIERNRU0gYm9vdGxvYWRlciBkZXNjcmlwdG9yCiAg KiBAc2lnbmF0dXJlOgkJMTZCIHNpZ25hdHVyZSBmb3Igc2VjdXJlIGNvZGUuIDBzIGlmIG5vIHNl Y3VyZSBjb2RlCkBAIC02Nyw2ICs4NSwxNzQgQEAgc3RydWN0IGFjcl92MV9ibF9kZXNjIHsKIAl1 MzIgZGF0YV9zaXplOwogfTsKIAorLyoKKyAqCisgKiBMUyBibG9iIHN0cnVjdHVyZXMKKyAqCisg Ki8KKworLyoqCisgKiBzdHJ1Y3QgbHNmX3Vjb2RlX2Rlc2MgLSBMUyBmYWxjb24gc2lnbmF0dXJl cworICogQHByZF9rZXlzOgkJc2lnbmF0dXJlIHRvIHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gcHJv ZHVjdGlvbiBtb2RlCisgKiBAZGdiX2tleXM6CQlzaWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQ VSBpcyBpbiBkZWJ1ZyBtb2RlCisgKiBAYl9wcmRfcHJlc2VudDoJd2hldGhlciB0aGUgcHJvZHVj dGlvbiBrZXkgaXMgcHJlc2VudAorICogQGJfZGdiX3ByZXNlbnQ6CXdoZXRoZXIgdGhlIGRlYnVn IGtleSBpcyBwcmVzZW50CisgKiBAZmFsY29uX2lkOgkJSUQgb2YgdGhlIGZhbGNvbiB0aGUgdWNv ZGUgYXBwbGllcyB0bworICoKKyAqIERpcmVjdGx5IGxvYWRlZCBmcm9tIGEgc2lnbmF0dXJlIGZp bGUuCisgKi8KK3N0cnVjdCBsc2ZfdWNvZGVfZGVzYyB7CisJdTggIHByZF9rZXlzWzJdWzE2XTsK Kwl1OCAgZGJnX2tleXNbMl1bMTZdOworCXUzMiBiX3ByZF9wcmVzZW50OworCXUzMiBiX2RiZ19w cmVzZW50OworCXUzMiBmYWxjb25faWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBsc2ZfbHNiX2hl YWRlciAtIExTIGZpcm13YXJlIGhlYWRlcgorICogQHNpZ25hdHVyZToJCXNpZ25hdHVyZSB0byB2 ZXJpZnkgdGhlIGZpcm13YXJlIGFnYWluc3QKKyAqIEB1Y29kZV9vZmY6CQlvZmZzZXQgb2YgdGhl IHVjb2RlIGJsb2IgaW4gdGhlIFdQUiByZWdpb24uIFRoZSB1Y29kZQorICogICAgICAgICAgICAg ICAgICAgICAgYmxvYiBjb250YWlucyB0aGUgYm9vdGxvYWRlciwgY29kZSBhbmQgZGF0YSBvZiB0 aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIExTIGZhbGNvbgorICogQHVjb2RlX3NpemU6CQlz aXplIG9mIHRoZSB1Y29kZSBibG9iLCBpbmNsdWRpbmcgYm9vdGxvYWRlcgorICogQGRhdGFfc2l6 ZToJCXNpemUgb2YgdGhlIHVjb2RlIGJsb2IgZGF0YQorICogQGJsX2NvZGVfc2l6ZToJc2l6ZSBv ZiB0aGUgYm9vdGxvYWRlciBjb2RlCisgKiBAYmxfaW1lbV9vZmY6CW9mZnNldCBpbiBpbWVtIG9m IHRoZSBib290bG9hZGVyCisgKiBAYmxfZGF0YV9vZmY6CW9mZnNldCBvZiB0aGUgYm9vdGxvYWRl ciBkYXRhIGluIFdQUiByZWdpb24KKyAqIEBibF9kYXRhX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rs b2FkZXIgZGF0YQorICogQGFwcF9jb2RlX29mZjoJb2Zmc2V0IG9mIHRoZSBhcHAgY29kZSByZWxh dGl2ZSB0byB1Y29kZV9vZmYKKyAqIEBhcHBfY29kZV9zaXplOglzaXplIG9mIHRoZSBhcHAgY29k ZQorICogQGFwcF9kYXRhX29mZjoJb2Zmc2V0IG9mIHRoZSBhcHAgZGF0YSByZWxhdGl2ZSB0byB1 Y29kZV9vZmYKKyAqIEBhcHBfZGF0YV9zaXplOglzaXplIG9mIHRoZSBhcHAgZGF0YQorICogQGZs YWdzOgkJZmxhZ3MgZm9yIHRoZSBzZWN1cmUgYm9vdGxvYWRlcgorICoKKyAqIFRoaXMgc3RydWN0 dXJlIGlzIHdyaXR0ZW4gaW50byB0aGUgV1BSIHJlZ2lvbiBmb3IgZWFjaCBtYW5hZ2VkIGZhbGNv bi4gRWFjaAorICogaW5zdGFuY2UgaXMgcmVmZXJlbmNlZCBieSB0aGUgbHNiX29mZnNldCBtZW1i ZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGxzZl93cHJfaGVhZGVyLgorICovCitzdHJ1Y3Qg bHNmX2xzYl9oZWFkZXIgeworCXN0cnVjdCBsc2ZfdWNvZGVfZGVzYyBzaWduYXR1cmU7CisJdTMy IHVjb2RlX29mZjsKKwl1MzIgdWNvZGVfc2l6ZTsKKwl1MzIgZGF0YV9zaXplOworCXUzMiBibF9j b2RlX3NpemU7CisJdTMyIGJsX2ltZW1fb2ZmOworCXUzMiBibF9kYXRhX29mZjsKKwl1MzIgYmxf ZGF0YV9zaXplOworCXUzMiBhcHBfY29kZV9vZmY7CisJdTMyIGFwcF9jb2RlX3NpemU7CisJdTMy IGFwcF9kYXRhX29mZjsKKwl1MzIgYXBwX2RhdGFfc2l6ZTsKKwl1MzIgZmxhZ3M7CisjZGVmaW5l IExTRl9GTEFHX0xPQURfQ09ERV9BVF8wCQkxCisjZGVmaW5lIExTRl9GTEFHX0RNQUNUTF9SRVFf Q1RYCQk0CisjZGVmaW5lIExTRl9GTEFHX0ZPUkNFX1BSSVZfTE9BRAk4Cit9OworCisvKioKKyAq IHN0cnVjdCBsc2Zfd3ByX2hlYWRlciAtIExTIGJsb2IgV1BSIEhlYWRlcgorICogQGZhbGNvbl9p ZDoJCUxTIGZhbGNvbiBJRAorICogQGxzYl9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGxzYl9sc2Zf aGVhZGVyIGluIHRoZSBXUFIgcmVnaW9uCisgKiBAYm9vdHN0cmFwX293bmVyOglzZWN1cmUgZmFs Y29uIHJlcG9uc2libGUgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIExTIGZhbGNvbgorICogQGxhenlf Ym9vdHN0cmFwOglza2lwIGJvb3RzdHJhcHBpbmcgYnkgQUNSCisgKiBAc3RhdHVzOgkJYm9vdHN0 cmFwcGluZyBzdGF0dXMKKyAqCisgKiBBbiBhcnJheSBvZiB0aGVzZSBpcyB3cml0dGVuIGF0IHRo ZSBiZWdpbm5pbmcgb2YgdGhlIFdQUiByZWdpb24sIG9uZSBmb3IKKyAqIGVhY2ggbWFuYWdlZCBm YWxjb24uIFRoZSBhcnJheSBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGluc3RhbmNlIHdoaWNoIGZhbGNv bl9pZAorICogaXMgTFNGX0ZBTENPTl9JRF9JTlZBTElELgorICovCitzdHJ1Y3QgbHNmX3dwcl9o ZWFkZXIgeworCXUzMiAgZmFsY29uX2lkOworCXUzMiAgbHNiX29mZnNldDsKKwl1MzIgIGJvb3Rz dHJhcF9vd25lcjsKKwl1MzIgIGxhenlfYm9vdHN0cmFwOworCXUzMiAgc3RhdHVzOworI2RlZmlu ZSBMU0ZfSU1BR0VfU1RBVFVTX05PTkUJCQkJMAorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX0NP UFkJCQkJMQorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fQ09ERV9GQUlMRUQJ CTIKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX0RBVEFfRkFJTEVECQkzCisj ZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9ET05FCQk0CisjZGVmaW5lIExTRl9J TUFHRV9TVEFUVVNfVkFMSURBVElPTl9TS0lQUEVECQk1CisjZGVmaW5lIExTRl9JTUFHRV9TVEFU VVNfQk9PVFNUUkFQX1JFQURZCQk2Cit9OworCisKKy8qKgorICogc3RydWN0IGxzX3Vjb2RlX2lt Z19kZXNjIC0gZGVzY3JpcHRvciBvZiBmaXJtd2FyZSBpbWFnZQorICogQGRlc2NyaXB0b3Jfc2l6 ZToJCXNpemUgb2YgdGhpcyBkZXNjcmlwdG9yCisgKiBAaW1hZ2Vfc2l6ZToJCQlzaXplIG9mIHRo ZSB3aG9sZSBpbWFnZQorICogQGJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0OglzdGFydCBvZmZzZXQg b2YgdGhlIGJvb3Rsb2FkZXIgaW4gdWNvZGUgaW1hZ2UKKyAqIEBib290bG9hZGVyX3NpemU6CQlz aXplIG9mIHRoZSBib290bG9hZGVyCisgKiBAYm9vdGxvYWRlcl9pbWVtX29mZnNldDoJc3RhcnQg b2ZmIHNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiBJTUVNCisgKiBAYm9vdGxvYWRlcl9lbnRyeV9w b2ludDoJZW50cnkgcG9pbnQgb2YgdGhlIGJvb3Rsb2FkZXIgaW4gSU1FTQorICogQGFwcF9zdGFy dF9vZmZzZXQ6CQlzdGFydCBvZmZzZXQgb2YgdGhlIExTIGZpcm13YXJlCisgKiBAYXBwX3NpemU6 CQkJc2l6ZSBvZiB0aGUgTFMgZmlybXdhcmUncyBjb2RlIGFuZCBkYXRhCisgKiBAYXBwX2ltZW1f b2Zmc2V0OgkJb2Zmc2V0IG9mIHRoZSBhcHAgaW4gSU1FTQorICogQGFwcF9pbWVtX2VudHJ5OgkJ ZW50cnkgcG9pbnQgb2YgdGhlIGFwcCBpbiBJTUVNCisgKiBAYXBwX2RtZW1fb2Zmc2V0OgkJb2Zm c2V0IG9mIHRoZSBkYXRhIGluIERNRU0KKyAqIEBhcHBfcmVzaWRlbnRfY29kZV9vZmZzZXQ6CW9m ZnNldCBvZiBhcHAgY29kZSBmcm9tIGFwcF9zdGFydF9vZmZzZXQKKyAqIEBhcHBfcmVzaWRlbnRf Y29kZV9zaXplOglzaXplIG9mIHRoZSBjb2RlCisgKiBAYXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0 OglvZmZzZXQgb2YgZGF0YSBmcm9tIGFwcF9zdGFydF9vZmZzZXQKKyAqIEBhcHBfcmVzaWRlbnRf ZGF0YV9zaXplOglzaXplIG9mIGRhdGEKKyAqCisgKiBBIGZpcm13YXJlIGltYWdlIGNvbnRhaW5z IHRoZSBjb2RlLCBkYXRhLCBhbmQgYm9vdGxvYWRlciBvZiBhIGdpdmVuIExTCisgKiBmYWxjb24g aW4gYSBzaW5nbGUgYmxvYi4gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHdoZXJlIGV2ZXJ5dGhp bmcgaXMuCisgKgorICogVGhpcyBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYSAoYm9vdGxvYWRlciwg Y29kZSwgZGF0YSkgc2V0IGlmIHRoZXkgaGF2ZQorICogYmVlbiBsb2FkZWQgc2VwYXJhdGVseSwg b3IgY29tZSBkaXJlY3RseSBmcm9tIGEgZmlsZS4KKyAqLworc3RydWN0IGxzX3Vjb2RlX2ltZ19k ZXNjIHsKKwl1MzIgZGVzY3JpcHRvcl9zaXplOworCXUzMiBpbWFnZV9zaXplOworCXUzMiB0b29s c192ZXJzaW9uOworCXUzMiBhcHBfdmVyc2lvbjsKKwljaGFyIGRhdGVbNjRdOworCXUzMiBib290 bG9hZGVyX3N0YXJ0X29mZnNldDsKKwl1MzIgYm9vdGxvYWRlcl9zaXplOworCXUzMiBib290bG9h ZGVyX2ltZW1fb2Zmc2V0OworCXUzMiBib290bG9hZGVyX2VudHJ5X3BvaW50OworCXUzMiBhcHBf c3RhcnRfb2Zmc2V0OworCXUzMiBhcHBfc2l6ZTsKKwl1MzIgYXBwX2ltZW1fb2Zmc2V0OworCXUz MiBhcHBfaW1lbV9lbnRyeTsKKwl1MzIgYXBwX2RtZW1fb2Zmc2V0OworCXUzMiBhcHBfcmVzaWRl bnRfY29kZV9vZmZzZXQ7CisJdTMyIGFwcF9yZXNpZGVudF9jb2RlX3NpemU7CisJdTMyIGFwcF9y ZXNpZGVudF9kYXRhX29mZnNldDsKKwl1MzIgYXBwX3Jlc2lkZW50X2RhdGFfc2l6ZTsKKwl1MzIg bmJfb3ZlcmxheXM7CisJc3RydWN0IHt1MzIgc3RhcnQ7IHUzMiBzaXplOyB9IGxvYWRfb3ZsWzY0 XTsKKwl1MzIgY29tcHJlc3NlZDsKK307CisKKy8qKgorICogc3RydWN0IGxzX3Vjb2RlX2ltZyAt IHRlbXBvcmFyeSBzdG9yYWdlIGZvciBsb2FkZWQgTFMgZmlybXdhcmVzCisgKiBAbm9kZToJCXRv IGxpbmsgd2l0aGluIGxzZl91Y29kZV9tZ3IKKyAqIEBmYWxjb25faWQ6CQlJRCBvZiB0aGUgZmFs Y29uIHRoaXMgTFMgZmlybXdhcmUgaXMgZm9yCisgKiBAdWNvZGVfZGVzYzoJCWxvYWRlZCBvciBn ZW5lcmF0ZWQgbWFwIG9mIHVjb2RlX2RhdGEKKyAqIEB1Y29kZV9oZWFkZXI6CWhlYWRlciBvZiB0 aGUgZmlybXdhcmUKKyAqIEB1Y29kZV9kYXRhOgkJZmlybXdhcmUgcGF5bG9hZCAoY29kZSBhbmQg ZGF0YSkKKyAqIEB1Y29kZV9zaXplOgkJc2l6ZSBpbiBieXRlcyBvZiBkYXRhIGluIHVjb2RlX2Rh dGEKKyAqIEB3cHJfaGVhZGVyOgkJV1BSIGhlYWRlciB0byBiZSB3cml0dGVuIHRvIHRoZSBMUyBi bG9iCisgKiBAbHNiX2hlYWRlcjoJCUxTQiBoZWFkZXIgdG8gYmUgd3JpdHRlbiB0byB0aGUgTFMg YmxvYgorICoKKyAqIFByZXBhcmluZyB0aGUgV1BSIExTIGJsb2IgcmVxdWlyZXMgaW5mb3JtYXRp b24gYWJvdXQgYWxsIHRoZSBMUyBmaXJtd2FyZXMKKyAqIChzaXplLCBldGMpIHRvIGJlIGtub3du LiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgdGhlIGRhdGEgb2Ygb25lIExTCisgKiBmaXJt d2FyZS4KKyAqLworc3RydWN0IGxzX3Vjb2RlX2ltZyB7CisJc3RydWN0IGxpc3RfaGVhZCBub2Rl OworCWVudW0gbnZrbV9mYWxjb25pZHggZmFsY29uX2lkOworCisJc3RydWN0IGxzX3Vjb2RlX2lt Z19kZXNjIHVjb2RlX2Rlc2M7CisJdTMyICp1Y29kZV9oZWFkZXI7CisJdTggKnVjb2RlX2RhdGE7 CisJdTMyIHVjb2RlX3NpemU7CisKKwlzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgd3ByX2hlYWRlcjsK KwlzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgbHNiX2hlYWRlcjsKK307CiAKIC8qKgogICogc3RydWN0 IG52a21fYWNyX3YxX2Z1bmMgLSBtYW5hZ2VzIG51YW5jZXMgYmV0d2VlbiBBQ1IgdjEgaW5zdGFu Y2VzCkBAIC04MSw2ICsyNjcsMjkgQEAgc3RydWN0IG52a21fYWNyX3YxX2Z1bmMgewogfTsKIAog LyoqCisgKiBzdHJ1Y3QgbnZrbV9hY3JfdjFfbHNfc2luZ2xlX2Z1bmMgLSBtYW5hZ2VzIGEgc2lu Z2xlIExTIGZpcm13YXJlCisgKgorICogQGxvYWQ6CWxvYWQgdGhlIGV4dGVybmFsIGZpcm13YXJl IGludG8gYSBsc191Y29kZV9pbWcKKyAqIEBnZW5lcmF0ZV9ibF9kZXNjOiBmdW5jdGlvbiBjYWxs ZWQgb24gYSBibG9jayBvZiBibF9kZXNjX3NpemUgdG8gZ2VuZXJhdGUgdGhlCisgKgkJICAgcHJv cGVyIGJvb3Rsb2FkZXIgZGVzY3JpcHRvciBmb3IgdGhpcyBMUyBmaXJtd2FyZQorICogQGJsX2Rl c2Nfc2l6ZTogc2l6ZSBvZiB0aGUgYm9vdGxvYWRlciBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBu dmttX2Fjcl92MV9sc19zaW5nbGVfZnVuYyB7CisJaW50ICgqbG9hZCkoY29uc3Qgc3RydWN0IG52 a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7CisJdm9pZCAoKmdlbmVyYXRlX2Js X2Rlc2MpKGNvbnN0IHN0cnVjdCBsc191Y29kZV9pbWcgKiwgdTY0LCB2b2lkICopOworCXUzMiBi bF9kZXNjX3NpemU7Cit9OworCisvKioKKyAqIHR5cGVkZWYgbnZrbV9hY3JfdjFfbHNfZnVuYyAt IG1hbmFnZXMgYWxsIHRoZSBMUyBmaXJtd2FyZXMgZm9yIHRoaXMgQUNSCisgKi8KK3R5cGVkZWYg Y29uc3Qgc3RydWN0IG52a21fYWNyX3YxX2xzX3NpbmdsZV9mdW5jICoKK252a21fYWNyX3YxX2xz X2Z1bmNbTlZLTV9GQUxDT05fRU5EXTsKKworaW50IGFjcl92MV9sc19sb2FkX2ZlY3MoY29uc3Qg c3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29kZV9pbWcgKik7CitpbnQgYWNyX3Yx X2xzX2xvYWRfZ3BjY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191Y29k ZV9pbWcgKik7CisKKy8qKgogICogc3RydWN0IG52a21fYWNyX3YxIC0gdmVyc2lvbiAxIG9mIHRo ZSBBQ1IKICAqCiAgKiBBQ1IgdjEgcGVyZm9ybXMgYSB2ZXJ5IGJhc2ljIGZvcm0gb2Ygc2VjdXJl IGJvb3QuIEl0IGlzIG9ubHkgY2FwYWJsZSBvZgpAQCAtOTUsNiArMzA0LDcgQEAgc3RydWN0IG52 a21fYWNyX3YxX2Z1bmMgewogc3RydWN0IG52a21fYWNyX3YxIHsKIAlzdHJ1Y3QgbnZrbV9hY3Ig YmFzZTsKIAljb25zdCBzdHJ1Y3QgbnZrbV9hY3JfdjFfZnVuYyAqZnVuYzsKKwljb25zdCBudmtt X2Fjcl92MV9sc19mdW5jICpsc19mdW5jOwogCiAJLyoKIAkgKiBIUyBGVyAtIGxvY2sgV1BSIHJl Z2lvbiAoZEdQVSBvbmx5KSBhbmQgbG9hZCBMUyBGV3MKZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1 L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3YxX2dtMjBiLmMgYi9kcm0vbm91dmVhdS9udmttL3N1 YmRldi9zZWNib290L2Fjcl92MV9nbTIwYi5jCmluZGV4IGZjZjY0NGI5NjU2Yy4uMTA2MmQ0ZjZh MWZmIDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2Fjcl92MV9n bTIwYi5jCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jvb3QvYWNyX3YxX2dtMjBi LmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyoKICAqIFRoZSBCTCBoZWFkZXIgZm9ybWF0IHVzZWQg YnkgR00yMEIncyBmaXJtd2FyZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQKLSAqIGZyb20gdGhlIG9u ZSBvZiBHTTIwMC4gRml4IHRoZSBkaWZmZXJlbmNlcyBoZXJlLgorICogZnJvbSB0aGUgb25lIG9m IEdNMjAwLiBIYW5kbGUgdGhlIGRpZmZlcmVuY2VzIGhlcmUuCiAgKi8KIHN0cnVjdCBhY3JfdjFf Z20yMGJfYmxfZGVzYyB7CiAJdTMyIHJlc2VydmVkWzRdOwpAQCAtNzMsNiArNzMsMjUgQEAgZ20y MGJfYWNyX3YxX2dlbmVyYXRlX2JsX2Rlc2MoY29uc3Qgc3RydWN0IGFjcl92MV9ibF9kZXNjICpk ZXNjLCB2b2lkICpyZXQpCiAJZ2Rlc2MtPmRhdGFfc2l6ZSA9IGRlc2MtPmRhdGFfc2l6ZTsKIH0K IAorc3RhdGljIHZvaWQKK2Fjcl92MV9nbTIwYl9sc19nZW5lcmljX2JsX2Rlc2MoY29uc3Qgc3Ry dWN0IGxzX3Vjb2RlX2ltZyAqaW1nLCB1NjQgd3ByX2FkZHIsCisJCQkJdm9pZCAqX2Rlc2MpCit7 CisJc3RydWN0IGFjcl92MV9nbTIwYl9ibF9kZXNjICpkZXNjID0gX2Rlc2M7CisJY29uc3Qgc3Ry dWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9ICZpbWctPnVjb2RlX2Rlc2M7CisJdTY0IGJh c2U7CisKKwliYXNlID0gd3ByX2FkZHIgKyBpbWctPmxzYl9oZWFkZXIudWNvZGVfb2ZmICsgcGRl c2MtPmFwcF9zdGFydF9vZmZzZXQ7CisKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7 CisJZGVzYy0+Y3R4X2RtYSA9IEZBTENPTl9ETUFJRFhfVUNPREU7CisJZGVzYy0+Y29kZV9kbWFf YmFzZSA9IChiYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9jb2RlX29mZnNldCkgPj4gODsKKwlk ZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9IHBkZXNjLT5hcHBfcmVzaWRlbnRfY29kZV9zaXplOwor CWRlc2MtPmRhdGFfZG1hX2Jhc2UgPSAoYmFzZSArIHBkZXNjLT5hcHBfcmVzaWRlbnRfZGF0YV9v ZmZzZXQpID4+IDg7CisJZGVzYy0+ZGF0YV9zaXplID0gcGRlc2MtPmFwcF9yZXNpZGVudF9kYXRh X3NpemU7CisJZGVzYy0+Y29kZV9lbnRyeV9wb2ludCA9IHBkZXNjLT5hcHBfaW1lbV9lbnRyeTsK K30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBudmttX2Fjcl92MV9mdW5jCiBnbTIwYl9hY3JfdjFf ZnVuYyA9IHsKIAkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfdjFfZ20yMGJfYmxf ZGVzYyksCkBAIC05MCw2ICsxMDksMTUgQEAgZ20yMGJfYWNyX2Z1bmMgPSB7CiAJLnN0YXJ0ID0g YWNyX3YxX3N0YXJ0LAogfTsKIAorc3RhdGljIGNvbnN0IG52a21fYWNyX3YxX2xzX2Z1bmMKK2dt MjBiX2Fjcl92MV9sc19mdW5jID0geworCVtOVktNX0ZBTENPTl9GRUNTXSA9ICYoc3RydWN0IG52 a21fYWNyX3YxX2xzX3NpbmdsZV9mdW5jKSB7CisJCS5sb2FkID0gYWNyX3YxX2xzX2xvYWRfZmVj cywKKwkJLmdlbmVyYXRlX2JsX2Rlc2MgPSBhY3JfdjFfZ20yMGJfbHNfZ2VuZXJpY19ibF9kZXNj LAorCQkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3JfdjFfZ20yMGJfYmxfZGVzYyks CisJfSwKK307CisKIHN0cnVjdCBudmttX2FjciAqCiBudmttX2Fjcl92MV9nbTIwYl9uZXcodm9p ZCkKIHsKQEAgLTEwMSw2ICsxMjksNyBAQCBudmttX2Fjcl92MV9nbTIwYl9uZXcodm9pZCkKIAog CWFjci0+YmFzZS5mdW5jID0gJmdtMjBiX2Fjcl9mdW5jOwogCWFjci0+ZnVuYyA9ICZnbTIwYl9h Y3JfdjFfZnVuYzsKKwlhY3ItPmxzX2Z1bmMgPSAmZ20yMGJfYWNyX3YxX2xzX2Z1bmM7CiAKIAly ZXR1cm4gJmFjci0+YmFzZTsKIH0KLS0gCjIuMTAuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9ub3V2ZWF1Cg==