From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandre Courbot Subject: [PATCH v2 06/14] secboot: add low-secure firmware hooks Date: Thu, 27 Oct 2016 13:37:00 +0900 Message-ID: <20161027043708.22538-7-acourbot@nvidia.com> References: <20161027043708.22538-1-acourbot@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161027043708.22538-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+Ci0tLQogZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jIHwgMjM5 ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcm0vbm91dmVhdS9udmttL3N1YmRl di9zZWNib290L2dtMjBiLmMgfCAgMjkgKysrKwogZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9wcml2LmggIHwgMTkzICsrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDI2NCBpbnNlcnRpb25zKCspLCAxOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jIGIvZHJtL25vdXZlYXUvbnZr bS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jCmluZGV4IGUxYzUxZjgyOTNjOC4uODU3MWE0YjRkNTZj IDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9zZWNib290L2dtMjAwLmMKKysr IGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwMC5jCkBAIC0xMzAsMTc1ICsx MzAsNiBAQCBzdHJ1Y3QgZndfYmxfZGVzYyB7CiB9OwogCiAKLS8qCi0gKgotICogTFMgYmxvYiBz dHJ1Y3R1cmVzCi0gKgotICovCi0KLS8qKgotICogc3RydWN0IGxzZl91Y29kZV9kZXNjIC0gTFMg ZmFsY29uIHNpZ25hdHVyZXMKLSAqIEBwcmRfa2V5czoJCXNpZ25hdHVyZSB0byB1c2Ugd2hlbiB0 aGUgR1BVIGlzIGluIHByb2R1Y3Rpb24gbW9kZQotICogQGRnYl9rZXlzOgkJc2lnbmF0dXJlIHRv IHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gZGVidWcgbW9kZQotICogQGJfcHJkX3ByZXNlbnQ6CXdo ZXRoZXIgdGhlIHByb2R1Y3Rpb24ga2V5IGlzIHByZXNlbnQKLSAqIEBiX2RnYl9wcmVzZW50Ogl3 aGV0aGVyIHRoZSBkZWJ1ZyBrZXkgaXMgcHJlc2VudAotICogQGZhbGNvbl9pZDoJCUlEIG9mIHRo ZSBmYWxjb24gdGhlIHVjb2RlIGFwcGxpZXMgdG8KLSAqCi0gKiBEaXJlY3RseSBsb2FkZWQgZnJv bSBhIHNpZ25hdHVyZSBmaWxlLgotICovCi1zdHJ1Y3QgbHNmX3Vjb2RlX2Rlc2MgewotCXU4ICBw cmRfa2V5c1syXVsxNl07Ci0JdTggIGRiZ19rZXlzWzJdWzE2XTsKLQl1MzIgYl9wcmRfcHJlc2Vu dDsKLQl1MzIgYl9kYmdfcHJlc2VudDsKLQl1MzIgZmFsY29uX2lkOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgbHNmX2xzYl9oZWFkZXIgLSBMUyBmaXJtd2FyZSBoZWFkZXIKLSAqIEBzaWduYXR1cmU6 CQlzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBmaXJtd2FyZSBhZ2FpbnN0Ci0gKiBAdWNvZGVfb2Zm OgkJb2Zmc2V0IG9mIHRoZSB1Y29kZSBibG9iIGluIHRoZSBXUFIgcmVnaW9uLiBUaGUgdWNvZGUK LSAqICAgICAgICAgICAgICAgICAgICAgIGJsb2IgY29udGFpbnMgdGhlIGJvb3Rsb2FkZXIsIGNv ZGUgYW5kIGRhdGEgb2YgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICBMUyBmYWxjb24KLSAq IEB1Y29kZV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNvZGUgYmxvYiwgaW5jbHVkaW5nIGJvb3Rsb2Fk ZXIKLSAqIEBkYXRhX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBibG9iIGRhdGEKLSAqIEBibF9j b2RlX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgY29kZQotICogQGJsX2ltZW1fb2ZmOglv ZmZzZXQgaW4gaW1lbSBvZiB0aGUgYm9vdGxvYWRlcgotICogQGJsX2RhdGFfb2ZmOglvZmZzZXQg b2YgdGhlIGJvb3Rsb2FkZXIgZGF0YSBpbiBXUFIgcmVnaW9uCi0gKiBAYmxfZGF0YV9zaXplOglz aXplIG9mIHRoZSBib290bG9hZGVyIGRhdGEKLSAqIEBhcHBfY29kZV9vZmY6CW9mZnNldCBvZiB0 aGUgYXBwIGNvZGUgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCi0gKiBAYXBwX2NvZGVfc2l6ZToJc2l6 ZSBvZiB0aGUgYXBwIGNvZGUKLSAqIEBhcHBfZGF0YV9vZmY6CW9mZnNldCBvZiB0aGUgYXBwIGRh dGEgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCi0gKiBAYXBwX2RhdGFfc2l6ZToJc2l6ZSBvZiB0aGUg YXBwIGRhdGEKLSAqIEBmbGFnczoJCWZsYWdzIGZvciB0aGUgc2VjdXJlIGJvb3Rsb2FkZXIKLSAq Ci0gKiBUaGlzIHN0cnVjdHVyZSBpcyB3cml0dGVuIGludG8gdGhlIFdQUiByZWdpb24gZm9yIGVh Y2ggbWFuYWdlZCBmYWxjb24uIEVhY2gKLSAqIGluc3RhbmNlIGlzIHJlZmVyZW5jZWQgYnkgdGhl IGxzYl9vZmZzZXQgbWVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBsc2Zfd3ByX2hlYWRl ci4KLSAqLwotc3RydWN0IGxzZl9sc2JfaGVhZGVyIHsKLQlzdHJ1Y3QgbHNmX3Vjb2RlX2Rlc2Mg c2lnbmF0dXJlOwotCXUzMiB1Y29kZV9vZmY7Ci0JdTMyIHVjb2RlX3NpemU7Ci0JdTMyIGRhdGFf c2l6ZTsKLQl1MzIgYmxfY29kZV9zaXplOwotCXUzMiBibF9pbWVtX29mZjsKLQl1MzIgYmxfZGF0 YV9vZmY7Ci0JdTMyIGJsX2RhdGFfc2l6ZTsKLQl1MzIgYXBwX2NvZGVfb2ZmOwotCXUzMiBhcHBf Y29kZV9zaXplOwotCXUzMiBhcHBfZGF0YV9vZmY7Ci0JdTMyIGFwcF9kYXRhX3NpemU7Ci0JdTMy IGZsYWdzOwotI2RlZmluZSBMU0ZfRkxBR19MT0FEX0NPREVfQVRfMAkJMQotI2RlZmluZSBMU0Zf RkxBR19ETUFDVExfUkVRX0NUWAkJNAotI2RlZmluZSBMU0ZfRkxBR19GT1JDRV9QUklWX0xPQUQJ OAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgLSBMUyBibG9iIFdQUiBIZWFk ZXIKLSAqIEBmYWxjb25faWQ6CQlMUyBmYWxjb24gSUQKLSAqIEBsc2Jfb2Zmc2V0OgkJb2Zmc2V0 IG9mIHRoZSBsc2JfbHNmX2hlYWRlciBpbiB0aGUgV1BSIHJlZ2lvbgotICogQGJvb3RzdHJhcF9v d25lcjoJc2VjdXJlIGZhbGNvbiByZXBvbnNpYmxlIGZvciBib290c3RyYXBwaW5nIHRoZSBMUyBm YWxjb24KLSAqIEBsYXp5X2Jvb3RzdHJhcDoJc2tpcCBib290c3RyYXBwaW5nIGJ5IEFDUgotICog QHN0YXR1czoJCWJvb3RzdHJhcHBpbmcgc3RhdHVzCi0gKgotICogQW4gYXJyYXkgb2YgdGhlc2Ug aXMgd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBXUFIgcmVnaW9uLCBvbmUgZm9yCi0g KiBlYWNoIG1hbmFnZWQgZmFsY29uLiBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieSBhbiBpbnN0 YW5jZSB3aGljaCBmYWxjb25faWQKLSAqIGlzIExTRl9GQUxDT05fSURfSU5WQUxJRC4KLSAqLwot c3RydWN0IGxzZl93cHJfaGVhZGVyIHsKLQl1MzIgIGZhbGNvbl9pZDsKLQl1MzIgIGxzYl9vZmZz ZXQ7Ci0JdTMyICBib290c3RyYXBfb3duZXI7Ci0JdTMyICBsYXp5X2Jvb3RzdHJhcDsKLQl1MzIg IHN0YXR1czsKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19OT05FCQkJCTAKLSNkZWZpbmUgTFNG X0lNQUdFX1NUQVRVU19DT1BZCQkJCTEKLSNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFU SU9OX0NPREVfRkFJTEVECQkyCi0jZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFMSURBVElPTl9E QVRBX0ZBSUxFRAkJMwotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fRE9ORQkJ NAotI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJT05fU0tJUFBFRAkJNQotI2RlZmlu ZSBMU0ZfSU1BR0VfU1RBVFVTX0JPT1RTVFJBUF9SRUFEWQkJNgotfTsKLQotCi0vKioKLSAqIHN0 cnVjdCBsc191Y29kZV9pbWdfZGVzYyAtIGRlc2NyaXB0b3Igb2YgZmlybXdhcmUgaW1hZ2UKLSAq IEBkZXNjcmlwdG9yX3NpemU6CQlzaXplIG9mIHRoaXMgZGVzY3JpcHRvcgotICogQGltYWdlX3Np emU6CQkJc2l6ZSBvZiB0aGUgd2hvbGUgaW1hZ2UKLSAqIEBib290bG9hZGVyX3N0YXJ0X29mZnNl dDoJc3RhcnQgb2Zmc2V0IG9mIHRoZSBib290bG9hZGVyIGluIHVjb2RlIGltYWdlCi0gKiBAYm9v dGxvYWRlcl9zaXplOgkJc2l6ZSBvZiB0aGUgYm9vdGxvYWRlcgotICogQGJvb3Rsb2FkZXJfaW1l bV9vZmZzZXQ6CXN0YXJ0IG9mZiBzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgaW4gSU1FTQotICogQGJv b3Rsb2FkZXJfZW50cnlfcG9pbnQ6CWVudHJ5IHBvaW50IG9mIHRoZSBib290bG9hZGVyIGluIElN RU0KLSAqIEBhcHBfc3RhcnRfb2Zmc2V0OgkJc3RhcnQgb2Zmc2V0IG9mIHRoZSBMUyBmaXJtd2Fy ZQotICogQGFwcF9zaXplOgkJCXNpemUgb2YgdGhlIExTIGZpcm13YXJlJ3MgY29kZSBhbmQgZGF0 YQotICogQGFwcF9pbWVtX29mZnNldDoJCW9mZnNldCBvZiB0aGUgYXBwIGluIElNRU0KLSAqIEBh cHBfaW1lbV9lbnRyeToJCWVudHJ5IHBvaW50IG9mIHRoZSBhcHAgaW4gSU1FTQotICogQGFwcF9k bWVtX29mZnNldDoJCW9mZnNldCBvZiB0aGUgZGF0YSBpbiBETUVNCi0gKiBAYXBwX3Jlc2lkZW50 X2NvZGVfb2Zmc2V0OglvZmZzZXQgb2YgYXBwIGNvZGUgZnJvbSBhcHBfc3RhcnRfb2Zmc2V0Ci0g KiBAYXBwX3Jlc2lkZW50X2NvZGVfc2l6ZToJc2l6ZSBvZiB0aGUgY29kZQotICogQGFwcF9yZXNp ZGVudF9kYXRhX29mZnNldDoJb2Zmc2V0IG9mIGRhdGEgZnJvbSBhcHBfc3RhcnRfb2Zmc2V0Ci0g KiBAYXBwX3Jlc2lkZW50X2RhdGFfc2l6ZToJc2l6ZSBvZiBkYXRhCi0gKgotICogQSBmaXJtd2Fy ZSBpbWFnZSBjb250YWlucyB0aGUgY29kZSwgZGF0YSwgYW5kIGJvb3Rsb2FkZXIgb2YgYSBnaXZl biBMUwotICogZmFsY29uIGluIGEgc2luZ2xlIGJsb2IuIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJl cyB3aGVyZSBldmVyeXRoaW5nIGlzLgotICoKLSAqIFRoaXMgY2FuIGJlIGdlbmVyYXRlZCBmcm9t IGEgKGJvb3Rsb2FkZXIsIGNvZGUsIGRhdGEpIHNldCBpZiB0aGV5IGhhdmUKLSAqIGJlZW4gbG9h ZGVkIHNlcGFyYXRlbHksIG9yIGNvbWUgZGlyZWN0bHkgZnJvbSBhIGZpbGUuCi0gKi8KLXN0cnVj dCBsc191Y29kZV9pbWdfZGVzYyB7Ci0JdTMyIGRlc2NyaXB0b3Jfc2l6ZTsKLQl1MzIgaW1hZ2Vf c2l6ZTsKLQl1MzIgdG9vbHNfdmVyc2lvbjsKLQl1MzIgYXBwX3ZlcnNpb247Ci0JY2hhciBkYXRl WzY0XTsKLQl1MzIgYm9vdGxvYWRlcl9zdGFydF9vZmZzZXQ7Ci0JdTMyIGJvb3Rsb2FkZXJfc2l6 ZTsKLQl1MzIgYm9vdGxvYWRlcl9pbWVtX29mZnNldDsKLQl1MzIgYm9vdGxvYWRlcl9lbnRyeV9w b2ludDsKLQl1MzIgYXBwX3N0YXJ0X29mZnNldDsKLQl1MzIgYXBwX3NpemU7Ci0JdTMyIGFwcF9p bWVtX29mZnNldDsKLQl1MzIgYXBwX2ltZW1fZW50cnk7Ci0JdTMyIGFwcF9kbWVtX29mZnNldDsK LQl1MzIgYXBwX3Jlc2lkZW50X2NvZGVfb2Zmc2V0OwotCXUzMiBhcHBfcmVzaWRlbnRfY29kZV9z aXplOwotCXUzMiBhcHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQ7Ci0JdTMyIGFwcF9yZXNpZGVudF9k YXRhX3NpemU7Ci0JdTMyIG5iX292ZXJsYXlzOwotCXN0cnVjdCB7dTMyIHN0YXJ0OyB1MzIgc2l6 ZTsgfSBsb2FkX292bFs2NF07Ci0JdTMyIGNvbXByZXNzZWQ7Ci19OwotCi0vKioKLSAqIHN0cnVj dCBsc191Y29kZV9pbWcgLSB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgbG9hZGVkIExTIGZpcm13YXJl cwotICogQG5vZGU6CQl0byBsaW5rIHdpdGhpbiBsc2ZfdWNvZGVfbWdyCi0gKiBAZmFsY29uX2lk OgkJSUQgb2YgdGhlIGZhbGNvbiB0aGlzIExTIGZpcm13YXJlIGlzIGZvcgotICogQHVjb2RlX2Rl c2M6CQlsb2FkZWQgb3IgZ2VuZXJhdGVkIG1hcCBvZiB1Y29kZV9kYXRhCi0gKiBAdWNvZGVfaGVh ZGVyOgloZWFkZXIgb2YgdGhlIGZpcm13YXJlCi0gKiBAdWNvZGVfZGF0YToJCWZpcm13YXJlIHBh eWxvYWQgKGNvZGUgYW5kIGRhdGEpCi0gKiBAdWNvZGVfc2l6ZToJCXNpemUgaW4gYnl0ZXMgb2Yg ZGF0YSBpbiB1Y29kZV9kYXRhCi0gKiBAd3ByX2hlYWRlcjoJCVdQUiBoZWFkZXIgdG8gYmUgd3Jp dHRlbiB0byB0aGUgTFMgYmxvYgotICogQGxzYl9oZWFkZXI6CQlMU0IgaGVhZGVyIHRvIGJlIHdy aXR0ZW4gdG8gdGhlIExTIGJsb2IKLSAqCi0gKiBQcmVwYXJpbmcgdGhlIFdQUiBMUyBibG9iIHJl cXVpcmVzIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgTFMgZmlybXdhcmVzCi0gKiAoc2l6ZSwg ZXRjKSB0byBiZSBrbm93bi4gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHRoZSBkYXRhIG9m IG9uZSBMUwotICogZmlybXdhcmUuCi0gKi8KLXN0cnVjdCBsc191Y29kZV9pbWcgewotCXN0cnVj dCBsaXN0X2hlYWQgbm9kZTsKLQllbnVtIG52a21fZmFsY29uaWR4IGZhbGNvbl9pZDsKLQotCXN0 cnVjdCBsc191Y29kZV9pbWdfZGVzYyB1Y29kZV9kZXNjOwotCXUzMiAqdWNvZGVfaGVhZGVyOwot CXU4ICp1Y29kZV9kYXRhOwotCXUzMiB1Y29kZV9zaXplOwotCi0Jc3RydWN0IGxzZl93cHJfaGVh ZGVyIHdwcl9oZWFkZXI7Ci0Jc3RydWN0IGxzZl9sc2JfaGVhZGVyIGxzYl9oZWFkZXI7Ci19Owot CiAvKioKICAqIHN0cnVjdCBsc191Y29kZV9tZ3IgLSBtYW5hZ2VyIGZvciBhbGwgTFMgZmFsY29u IGZpcm13YXJlcwogICogQGNvdW50OgludW1iZXIgb2YgbWFuYWdlZCBMUyBmYWxjb25zCkBAIC0z NjMsNyArMTk0LDcgQEAgc3RydWN0IGhzZl9sb2FkX2hlYWRlciB7CiAgKiBpdCBoYXMgdGhlIHJl cXVpcmVkIG1pbmltdW0gc2l6ZS4KICAqLwogc3RhdGljIHZvaWQgKgotZ20yMDBfc2VjYm9vdF9s b2FkX2Zpcm13YXJlKHN0cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBjb25zdCBjaGFyICpuYW1l LAorZ20yMDBfc2VjYm9vdF9sb2FkX2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAq c3ViZGV2LCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgc2l6ZV90IG1pbl9zaXplKQogewogCWNv bnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC00NTYsNyArMjg3LDcgQEAgbHNfdWNvZGVfaW1n X2J1aWxkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYmwsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAq Y29kZSwKICAqIGJsb2IuIEFsc28gZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgdWNvZGUgZGVz Y3JpcHRvci4KICAqLwogc3RhdGljIGludAotbHNfdWNvZGVfaW1nX2xvYWRfZ2VuZXJpYyhzdHJ1 Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwKK2xzX3Vjb2RlX2ltZ19sb2FkX2dlbmVyaWMoY29uc3Qg c3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsCiAJCQkgIHN0cnVjdCBsc191Y29kZV9pbWcgKmlt ZywgY29uc3QgY2hhciAqZmFsY29uX25hbWUsCiAJCQkgIGNvbnN0IHUzMiBmYWxjb25faWQpCiB7 CkBAIC01MTcsMTcgKzM0OCwxNyBAQCBlcnJvcjoKIAlyZXR1cm4gcmV0OwogfQogCi10eXBlZGVm IGludCAoKmxzZl9sb2FkX2Z1bmMpKHN0cnVjdCBudmttX3N1YmRldiAqLCBzdHJ1Y3QgbHNfdWNv ZGVfaW1nICopOwordHlwZWRlZiBpbnQgKCpsc2ZfbG9hZF9mdW5jKShjb25zdCBzdHJ1Y3QgbnZr bV9zdWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKIAotc3RhdGljIGludAotbHNfdWNv ZGVfaW1nX2xvYWRfZmVjcyhzdHJ1Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiwgc3RydWN0IGxzX3Vj b2RlX2ltZyAqaW1nKQoraW50CitnbTIwMF9sc19sb2FkX2ZlY3MoY29uc3Qgc3RydWN0IG52a21f c3ViZGV2ICpzdWJkZXYsIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZykKIHsKIAlyZXR1cm4gbHNf dWNvZGVfaW1nX2xvYWRfZ2VuZXJpYyhzdWJkZXYsIGltZywgImZlY3MiLAogCQkJCQkgTlZLTV9G QUxDT05fRkVDUyk7CiB9CiAKLXN0YXRpYyBpbnQKLWxzX3Vjb2RlX2ltZ19sb2FkX2dwY2NzKHN0 cnVjdCBudmttX3N1YmRldiAqc3ViZGV2LCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcpCitpbnQK K2dtMjAwX2xzX2xvYWRfZ3BjY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICpzdWJkZXYsIHN0 cnVjdCBsc191Y29kZV9pbWcgKmltZykKIHsKIAlyZXR1cm4gbHNfdWNvZGVfaW1nX2xvYWRfZ2Vu ZXJpYyhzdWJkZXYsIGltZywgImdwY2NzIiwKIAkJCQkJIE5WS01fRkFMQ09OX0dQQ0NTKTsKQEAg LTU1NSwxNCArMzg2LDggQEAgbHNfdWNvZGVfaW1nX2xvYWQoc3RydWN0IG52a21fc3ViZGV2ICpz dWJkZXYsIGxzZl9sb2FkX2Z1bmMgbG9hZF9mdW5jKQogCXJldHVybiBpbWc7CiB9CiAKLXN0YXRp YyBjb25zdCBsc2ZfbG9hZF9mdW5jIGxzZl9sb2FkX2Z1bmNzW10gPSB7Ci0JW05WS01fRkFMQ09O X0VORF0gPSBOVUxMLCAvKiByZXNlcnZlIGVub3VnaCBzcGFjZSAqLwotCVtOVktNX0ZBTENPTl9G RUNTXSA9IGxzX3Vjb2RlX2ltZ19sb2FkX2ZlY3MsCi0JW05WS01fRkFMQ09OX0dQQ0NTXSA9IGxz X3Vjb2RlX2ltZ19sb2FkX2dwY2NzLAotfTsKLQogLyoqCi0gKiBsc191Y29kZV9pbWdfcG9wdWxh dGVfYmxfZGVzYygpIC0gcG9wdWxhdGUgYSBETUVNIEJMIGRlc2NyaXB0b3IgZm9yIExTIGltYWdl CisgKiBnbTIwMF9zZWNib290X2xzX2JsX2Rlc2MoKSAtIHBvcHVsYXRlIGEgRE1FTSBCTCBkZXNj cmlwdG9yIGZvciBMUyBpbWFnZQogICogQGltZzoJdWNvZGUgaW1hZ2UgdG8gZ2VuZXJhdGUgYWdh aW5zdAogICogQGRlc2M6CWRlc2NyaXB0b3IgdG8gcG9wdWxhdGUKICAqIEBzYjoJCXNlY3VyZSBi b290IHN0YXRlIHRvIHVzZSBmb3IgYmFzZSBhZGRyZXNzZXMKQEAgLTU3MiwxMCArMzk3LDExIEBA IHN0YXRpYyBjb25zdCBsc2ZfbG9hZF9mdW5jIGxzZl9sb2FkX2Z1bmNzW10gPSB7CiAgKgogICov CiBzdGF0aWMgdm9pZAotbHNfdWNvZGVfaW1nX3BvcHVsYXRlX2JsX2Rlc2Moc3RydWN0IGxzX3Vj b2RlX2ltZyAqaW1nLCB1NjQgd3ByX2FkZHIsCi0JCQkgICAgICBzdHJ1Y3QgZ20yMDBfZmxjbl9i bF9kZXNjICpkZXNjKQorZ20yMDBfc2VjYm9vdF9sc19ibF9kZXNjKGNvbnN0IHN0cnVjdCBsc191 Y29kZV9pbWcgKmltZywgdTY0IHdwcl9hZGRyLAorCQkJIHZvaWQgKl9kZXNjKQogewotCXN0cnVj dCBsc191Y29kZV9pbWdfZGVzYyAqcGRlc2MgPSAmaW1nLT51Y29kZV9kZXNjOworCXN0cnVjdCBn bTIwMF9mbGNuX2JsX2Rlc2MgKmRlc2MgPSBfZGVzYzsKKwljb25zdCBzdHJ1Y3QgbHNfdWNvZGVf aW1nX2Rlc2MgKnBkZXNjID0gJmltZy0+dWNvZGVfZGVzYzsKIAl1NjQgYWRkcl9iYXNlOwogCiAJ YWRkcl9iYXNlID0gd3ByX2FkZHIgKyBpbWctPmxzYl9oZWFkZXIudWNvZGVfb2ZmICsKQEAgLTYy MCw2ICs0NDYsOCBAQCBsc191Y29kZV9pbWdfZmlsbF9oZWFkZXJzKHN0cnVjdCBnbTIwMF9zZWNi b290ICpnc2IsIHN0cnVjdCBsc191Y29kZV9pbWcgKmltZywKIAlzdHJ1Y3QgbHNmX3dwcl9oZWFk ZXIgKndoZHIgPSAmaW1nLT53cHJfaGVhZGVyOwogCXN0cnVjdCBsc2ZfbHNiX2hlYWRlciAqbGhk ciA9ICZpbWctPmxzYl9oZWFkZXI7CiAJc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpkZXNjID0g JmltZy0+dWNvZGVfZGVzYzsKKwljb25zdCBzdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYyAq ZnVuYyA9CisJCQkJCQkoKmdzYi0+bHNfZnVuYylbaW1nLT5mYWxjb25faWRdOwogCiAJaWYgKGlt Zy0+dWNvZGVfaGVhZGVyKSB7CiAJCW52a21fZmF0YWwoJmdzYi0+YmFzZS5zdWJkZXYsCkBAIC02 ODAsOSArNTA4LDkgQEAgbHNfdWNvZGVfaW1nX2ZpbGxfaGVhZGVycyhzdHJ1Y3QgZ20yMDBfc2Vj Ym9vdCAqZ3NiLCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsCiAJaWYgKGltZy0+ZmFsY29uX2lk ID09IE5WS01fRkFMQ09OX0dQQ0NTKQogCQlsaGRyLT5mbGFncyB8PSBMU0ZfRkxBR19GT1JDRV9Q UklWX0xPQUQ7CiAKLQkvKiBBbGlnbiAoc2l6ZSBibG9hdCkgYW5kIHNhdmUgb2ZmIEJMIGRlc2Ny aXB0b3Igc2l6ZSAqLwotCWxoZHItPmJsX2RhdGFfc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3Qg Z20yMDBfZmxjbl9ibF9kZXNjKSwKLQkJCQkgICBMU0ZfQkxfREFUQV9TSVpFX0FMSUdOKTsKKwkv KiBBbGlnbiBhbmQgc2F2ZSBvZmYgQkwgZGVzY3JpcHRvciBzaXplICovCisJbGhkci0+YmxfZGF0 YV9zaXplID0gQUxJR04oZnVuYy0+YmxfZGVzY19zaXplLCBMU0ZfQkxfREFUQV9TSVpFX0FMSUdO KTsKKwogCS8qCiAJICogQWxpZ24sIHNhdmUgb2ZmLCBhbmQgaW5jbHVkZSB0aGUgYWRkaXRpb25h bCBCTCBkYXRhCiAJICovCkBAIC03NjgsMTUgKzU5NiwxNiBAQCBsc191Y29kZV9tZ3Jfd3JpdGVf d3ByKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IsIHN0cnVjdCBsc191Y29kZV9tZ3IgKm1nciwK IAogCQkvKiBHZW5lcmF0ZSBhbmQgd3JpdGUgQkwgZGVzY3JpcHRvciAqLwogCQlpZiAoIWltZy0+ dWNvZGVfaGVhZGVyKSB7Ci0JCQl1OCBkZXNjW2dzYi0+ZnVuYy0+YmxfZGVzY19zaXplXTsKLQkJ CXN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rlc2MgZ2Rlc2M7CisJCQljb25zdCBzdHJ1Y3Qgc2VjYm9v dF9sc19zaW5nbGVfZnVuYyAqbHNfZnVuYyA9CisJCQkJCQkoKmdzYi0+bHNfZnVuYylbaW1nLT5m YWxjb25faWRdOworCQkJdTggZ2Rlc2NbbHNfZnVuYy0+YmxfZGVzY19zaXplXTsKKworCQkJbHNf ZnVuYy0+Z2VuZXJhdGVfYmxfZGVzYyhpbWcsIGdzYi0+YWNyX3dwcl9hZGRyLAorCQkJCQkJICAm Z2Rlc2MpOwogCi0JCQlsc191Y29kZV9pbWdfcG9wdWxhdGVfYmxfZGVzYyhpbWcsIGdzYi0+YWNy X3dwcl9hZGRyLAotCQkJCQkJICAgICAgJmdkZXNjKTsKLQkJCWdzYi0+ZnVuYy0+Zml4dXBfYmxf ZGVzYygmZ2Rlc2MsICZkZXNjKTsKIAkJCW52a21fZ3B1b2JqX21lbWNweV90byh3cHJfYmxvYiwK IAkJCQkJICAgICAgaW1nLT5sc2JfaGVhZGVyLmJsX2RhdGFfb2ZmLAotCQkJCQkgICAgICAmZGVz YywgZ3NiLT5mdW5jLT5ibF9kZXNjX3NpemUpOworCQkJCQkgICAgICAmZ2Rlc2MsIGxzX2Z1bmMt PmJsX2Rlc2Nfc2l6ZSk7CiAJCX0KIAogCQkvKiBDb3B5IHVjb2RlICovCkBAIC04MTUsMTEgKzY0 NCwxMiBAQCBnbTIwMF9zZWNib290X3ByZXBhcmVfbHNfYmxvYihzdHJ1Y3QgZ20yMDBfc2VjYm9v dCAqZ3NiKQogCWxzX3Vjb2RlX21ncl9pbml0KCZtZ3IpOwogCiAJLyogTG9hZCBhbGwgTFMgYmxv YnMgKi8KLQlmb3JfZWFjaF9zZXRfYml0KGZhbGNvbl9pZCwgJmdzYi0+YmFzZS5mdW5jLT5tYW5h Z2VkX2ZhbGNvbnMsCisJZm9yX2VhY2hfc2V0X2JpdChmYWxjb25faWQsICZzYi0+ZnVuYy0+bWFu YWdlZF9mYWxjb25zLAogCQkJIE5WS01fRkFMQ09OX0VORCkgewogCQlzdHJ1Y3QgbHNfdWNvZGVf aW1nICppbWc7CiAKLQkJaW1nID0gbHNfdWNvZGVfaW1nX2xvYWQoJnNiLT5zdWJkZXYsIGxzZl9s b2FkX2Z1bmNzW2ZhbGNvbl9pZF0pOworCQlpbWcgPSBsc191Y29kZV9pbWdfbG9hZCgmc2ItPnN1 YmRldiwKKwkJCQkJKCpnc2ItPmxzX2Z1bmMpW2ZhbGNvbl9pZF0tPmxvYWQpOwogCiAJCWlmIChJ U19FUlIoaW1nKSkgewogCQkJcmV0ID0gUFRSX0VSUihpbWcpOwpAQCAtODY0LDYgKzY5NCwyMCBA QCBjbGVhbnVwOgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzZWNib290X2xzX2Z1 bmMKK2dtMjAwX2xzX2Z1bmMgPSB7CisJW05WS01fRkFMQ09OX0ZFQ1NdID0gJihzdHJ1Y3Qgc2Vj Ym9vdF9sc19zaW5nbGVfZnVuYykgeworCQkubG9hZCA9IGdtMjAwX2xzX2xvYWRfZmVjcywKKwkJ LmdlbmVyYXRlX2JsX2Rlc2MgPSBnbTIwMF9zZWNib290X2xzX2JsX2Rlc2MsCisJCS5ibF9kZXNj X3NpemUgPSBzaXplb2Yoc3RydWN0IGdtMjAwX2ZsY25fYmxfZGVzYyksCisJfSwKKwlbTlZLTV9G QUxDT05fR1BDQ1NdID0gJihzdHJ1Y3Qgc2VjYm9vdF9sc19zaW5nbGVfZnVuYykgeworCQkubG9h ZCA9IGdtMjAwX2xzX2xvYWRfZ3BjY3MsCisJCS5nZW5lcmF0ZV9ibF9kZXNjID0gZ20yMDBfc2Vj Ym9vdF9sc19ibF9kZXNjLAorCQkuYmxfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBnbTIwMF9m bGNuX2JsX2Rlc2MpLAorCX0sCit9OworCiAvKgogICogSGlnaC1zZWN1cmUgYmxvYiBjcmVhdGlv bgogICovCkBAIC0xNDk2LDYgKzEzNDAsNyBAQCBnbTIwMF9zZWNib290X25ldyhzdHJ1Y3QgbnZr bV9kZXZpY2UgKmRldmljZSwgaW50IGluZGV4LAogCQlyZXR1cm4gcmV0OwogCiAJZ3NiLT5mdW5j ID0gJmdtMjAwX3NlY2Jvb3RfZnVuYzsKKwlnc2ItPmxzX2Z1bmMgPSAmZ20yMDBfbHNfZnVuYzsK IAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2Vj Ym9vdC9nbTIwYi5jIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9nbTIwYi5jCmlu ZGV4IDNkOWYzNzQ4ODY0Zi4uZDA2MmNjYzAxNjZmIDEwMDY0NAotLS0gYS9kcm0vbm91dmVhdS9u dmttL3N1YmRldi9zZWNib290L2dtMjBiLmMKKysrIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYv c2VjYm9vdC9nbTIwYi5jCkBAIC00Miw2ICs0MiwyNSBAQCBzdHJ1Y3QgZ20yMGJfZmxjbl9ibF9k ZXNjIHsKIAl1MzIgZGF0YV9zaXplOwogfTsKIAorc3RhdGljIHZvaWQKK2dtMjBiX3NlY2Jvb3Rf bHNfYmxfZGVzYyhjb25zdCBzdHJ1Y3QgbHNfdWNvZGVfaW1nICppbWcsIHU2NCB3cHJfYWRkciwK KwkJCSB2b2lkICpfZGVzYykKK3sKKwlzdHJ1Y3QgZ20yMGJfZmxjbl9ibF9kZXNjICpkZXNjID0g X2Rlc2M7CisJY29uc3Qgc3RydWN0IGxzX3Vjb2RlX2ltZ19kZXNjICpwZGVzYyA9ICZpbWctPnVj b2RlX2Rlc2M7CisJdTY0IGJhc2U7CisKKwliYXNlID0gd3ByX2FkZHIgKyBpbWctPmxzYl9oZWFk ZXIudWNvZGVfb2ZmICsgcGRlc2MtPmFwcF9zdGFydF9vZmZzZXQ7CisKKwltZW1zZXQoZGVzYywg MCwgc2l6ZW9mKCpkZXNjKSk7CisJZGVzYy0+Y3R4X2RtYSA9IEZBTENPTl9ETUFJRFhfVUNPREU7 CisJZGVzYy0+Y29kZV9kbWFfYmFzZSA9IChiYXNlICsgcGRlc2MtPmFwcF9yZXNpZGVudF9jb2Rl X29mZnNldCkgPj4gODsKKwlkZXNjLT5ub25fc2VjX2NvZGVfc2l6ZSA9IHBkZXNjLT5hcHBfcmVz aWRlbnRfY29kZV9zaXplOworCWRlc2MtPmRhdGFfZG1hX2Jhc2UgPSAoYmFzZSArIHBkZXNjLT5h cHBfcmVzaWRlbnRfZGF0YV9vZmZzZXQpID4+IDg7CisJZGVzYy0+ZGF0YV9zaXplID0gcGRlc2Mt PmFwcF9yZXNpZGVudF9kYXRhX3NpemU7CisJZGVzYy0+Y29kZV9lbnRyeV9wb2ludCA9IHBkZXNj LT5hcHBfaW1lbV9lbnRyeTsKK30KKwogc3RhdGljIGludAogZ20yMGJfc2VjYm9vdF9wcmVwYXJl X2Jsb2JzKHN0cnVjdCBnbTIwMF9zZWNib290ICpnc2IpCiB7CkBAIC0xODUsNiArMjA0LDE1IEBA IGdtMjBiX3NlY2Jvb3QgPSB7CiAJLmJvb3RfZmFsY29uID0gTlZLTV9GQUxDT05fUE1VLAogfTsK IAorc3RhdGljIGNvbnN0IHNlY2Jvb3RfbHNfZnVuYworZ20yMGJfbHNfZnVuYyA9IHsKKwlbTlZL TV9GQUxDT05fRkVDU10gPSAmKHN0cnVjdCBzZWNib290X2xzX3NpbmdsZV9mdW5jKSB7CisJCS5s b2FkID0gZ20yMDBfbHNfbG9hZF9mZWNzLAorCQkuZ2VuZXJhdGVfYmxfZGVzYyA9IGdtMjBiX3Nl Y2Jvb3RfbHNfYmxfZGVzYywKKwkJLmJsX2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ20yMGJf Zmxjbl9ibF9kZXNjKSwKKwl9LAorfTsKKwogaW50CiBnbTIwYl9zZWNib290X25ldyhzdHJ1Y3Qg bnZrbV9kZXZpY2UgKmRldmljZSwgaW50IGluZGV4LAogCQkgIHN0cnVjdCBudmttX3NlY2Jvb3Qg Kipwc2IpCkBAIC0yMDQsNiArMjMyLDcgQEAgZ20yMGJfc2VjYm9vdF9uZXcoc3RydWN0IG52a21f ZGV2aWNlICpkZXZpY2UsIGludCBpbmRleCwKIAkJcmV0dXJuIHJldDsKIAogCWdzYi0+ZnVuYyA9 ICZnbTIwYl9zZWNib290X2Z1bmM7CisJZ3NiLT5sc19mdW5jID0gJmdtMjBiX2xzX2Z1bmM7CiAK IAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvcHJpdi5oIGIvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvc2VjYm9vdC9wcml2LmgKaW5kZXgg Y2UwZjNjODcyMTJiLi4yYTRjNGQ1YTNjOTAgMTAwNjQ0Ci0tLSBhL2RybS9ub3V2ZWF1L252a20v c3ViZGV2L3NlY2Jvb3QvcHJpdi5oCisrKyBiL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3NlY2Jv b3QvcHJpdi5oCkBAIC00NCw2ICs0NCwxNzUgQEAgaW50IG52a21fc2VjYm9vdF9jdG9yKGNvbnN0 IHN0cnVjdCBudmttX3NlY2Jvb3RfZnVuYyAqLCBzdHJ1Y3QgbnZrbV9kZXZpY2UgKiwKIGludCBu dmttX3NlY2Jvb3RfZmFsY29uX3Jlc2V0KHN0cnVjdCBudmttX3NlY2Jvb3QgKik7CiBpbnQgbnZr bV9zZWNib290X2ZhbGNvbl9ydW4oc3RydWN0IG52a21fc2VjYm9vdCAqKTsKIAorLyoKKyAqCisg KiBMUyBibG9iIHN0cnVjdHVyZXMKKyAqCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgbHNmX3Vjb2Rl X2Rlc2MgLSBMUyBmYWxjb24gc2lnbmF0dXJlcworICogQHByZF9rZXlzOgkJc2lnbmF0dXJlIHRv IHVzZSB3aGVuIHRoZSBHUFUgaXMgaW4gcHJvZHVjdGlvbiBtb2RlCisgKiBAZGdiX2tleXM6CQlz aWduYXR1cmUgdG8gdXNlIHdoZW4gdGhlIEdQVSBpcyBpbiBkZWJ1ZyBtb2RlCisgKiBAYl9wcmRf cHJlc2VudDoJd2hldGhlciB0aGUgcHJvZHVjdGlvbiBrZXkgaXMgcHJlc2VudAorICogQGJfZGdi X3ByZXNlbnQ6CXdoZXRoZXIgdGhlIGRlYnVnIGtleSBpcyBwcmVzZW50CisgKiBAZmFsY29uX2lk OgkJSUQgb2YgdGhlIGZhbGNvbiB0aGUgdWNvZGUgYXBwbGllcyB0bworICoKKyAqIERpcmVjdGx5 IGxvYWRlZCBmcm9tIGEgc2lnbmF0dXJlIGZpbGUuCisgKi8KK3N0cnVjdCBsc2ZfdWNvZGVfZGVz YyB7CisJdTggcHJkX2tleXNbMl1bMTZdOworCXU4IGRiZ19rZXlzWzJdWzE2XTsKKwl1MzIgYl9w cmRfcHJlc2VudDsKKwl1MzIgYl9kYmdfcHJlc2VudDsKKwl1MzIgZmFsY29uX2lkOworfTsKKwor LyoqCisgKiBzdHJ1Y3QgbHNmX2xzYl9oZWFkZXIgLSBMUyBmaXJtd2FyZSBoZWFkZXIKKyAqIEBz aWduYXR1cmU6CQlzaWduYXR1cmUgdG8gdmVyaWZ5IHRoZSBmaXJtd2FyZSBhZ2FpbnN0CisgKiBA dWNvZGVfb2ZmOgkJb2Zmc2V0IG9mIHRoZSB1Y29kZSBibG9iIGluIHRoZSBXUFIgcmVnaW9uLiBU aGUgdWNvZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJsb2IgY29udGFpbnMgdGhlIGJvb3Rs b2FkZXIsIGNvZGUgYW5kIGRhdGEgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBMUyBm YWxjb24KKyAqIEB1Y29kZV9zaXplOgkJc2l6ZSBvZiB0aGUgdWNvZGUgYmxvYiwgaW5jbHVkaW5n IGJvb3Rsb2FkZXIKKyAqIEBkYXRhX3NpemU6CQlzaXplIG9mIHRoZSB1Y29kZSBibG9iIGRhdGEK KyAqIEBibF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIgY29kZQorICogQGJsX2lt ZW1fb2ZmOglvZmZzZXQgaW4gaW1lbSBvZiB0aGUgYm9vdGxvYWRlcgorICogQGJsX2RhdGFfb2Zm OglvZmZzZXQgb2YgdGhlIGJvb3Rsb2FkZXIgZGF0YSBpbiBXUFIgcmVnaW9uCisgKiBAYmxfZGF0 YV9zaXplOglzaXplIG9mIHRoZSBib290bG9hZGVyIGRhdGEKKyAqIEBhcHBfY29kZV9vZmY6CW9m ZnNldCBvZiB0aGUgYXBwIGNvZGUgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCisgKiBAYXBwX2NvZGVf c2l6ZToJc2l6ZSBvZiB0aGUgYXBwIGNvZGUKKyAqIEBhcHBfZGF0YV9vZmY6CW9mZnNldCBvZiB0 aGUgYXBwIGRhdGEgcmVsYXRpdmUgdG8gdWNvZGVfb2ZmCisgKiBAYXBwX2RhdGFfc2l6ZToJc2l6 ZSBvZiB0aGUgYXBwIGRhdGEKKyAqIEBmbGFnczoJCWZsYWdzIGZvciB0aGUgc2VjdXJlIGJvb3Rs b2FkZXIKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB3cml0dGVuIGludG8gdGhlIFdQUiByZWdp b24gZm9yIGVhY2ggbWFuYWdlZCBmYWxjb24uIEVhY2gKKyAqIGluc3RhbmNlIGlzIHJlZmVyZW5j ZWQgYnkgdGhlIGxzYl9vZmZzZXQgbWVtYmVyIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgKiBsc2Zf d3ByX2hlYWRlci4KKyAqLworc3RydWN0IGxzZl9sc2JfaGVhZGVyIHsKKwlzdHJ1Y3QgbHNmX3Vj b2RlX2Rlc2Mgc2lnbmF0dXJlOworCXUzMiB1Y29kZV9vZmY7CisJdTMyIHVjb2RlX3NpemU7CisJ dTMyIGRhdGFfc2l6ZTsKKwl1MzIgYmxfY29kZV9zaXplOworCXUzMiBibF9pbWVtX29mZjsKKwl1 MzIgYmxfZGF0YV9vZmY7CisJdTMyIGJsX2RhdGFfc2l6ZTsKKwl1MzIgYXBwX2NvZGVfb2ZmOwor CXUzMiBhcHBfY29kZV9zaXplOworCXUzMiBhcHBfZGF0YV9vZmY7CisJdTMyIGFwcF9kYXRhX3Np emU7CisJdTMyIGZsYWdzOworI2RlZmluZSBMU0ZfRkxBR19MT0FEX0NPREVfQVRfMAkJMQorI2Rl ZmluZSBMU0ZfRkxBR19ETUFDVExfUkVRX0NUWAkJNAorI2RlZmluZSBMU0ZfRkxBR19GT1JDRV9Q UklWX0xPQUQJOAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbHNmX3dwcl9oZWFkZXIgLSBMUyBibG9i IFdQUiBIZWFkZXIKKyAqIEBmYWxjb25faWQ6CQlMUyBmYWxjb24gSUQKKyAqIEBsc2Jfb2Zmc2V0 OgkJb2Zmc2V0IG9mIHRoZSBsc2JfbHNmX2hlYWRlciBpbiB0aGUgV1BSIHJlZ2lvbgorICogQGJv b3RzdHJhcF9vd25lcjoJc2VjdXJlIGZhbGNvbiByZXBvbnNpYmxlIGZvciBib290c3RyYXBwaW5n IHRoZSBMUyBmYWxjb24KKyAqIEBsYXp5X2Jvb3RzdHJhcDoJc2tpcCBib290c3RyYXBwaW5nIGJ5 IEFDUgorICogQHN0YXR1czoJCWJvb3RzdHJhcHBpbmcgc3RhdHVzCisgKgorICogQW4gYXJyYXkg b2YgdGhlc2UgaXMgd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBXUFIgcmVnaW9uLCBv bmUgZm9yCisgKiBlYWNoIG1hbmFnZWQgZmFsY29uLiBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBi eSBhbiBpbnN0YW5jZSB3aGljaCBmYWxjb25faWQKKyAqIGlzIExTRl9GQUxDT05fSURfSU5WQUxJ RC4KKyAqLworc3RydWN0IGxzZl93cHJfaGVhZGVyIHsKKwl1MzIgZmFsY29uX2lkOworCXUzMiBs c2Jfb2Zmc2V0OworCXUzMiBib290c3RyYXBfb3duZXI7CisJdTMyIGxhenlfYm9vdHN0cmFwOwor CXUzMiBzdGF0dXM7CisjZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfTk9ORQkJCQkwCisjZGVmaW5l IExTRl9JTUFHRV9TVEFUVVNfQ09QWQkJCQkxCisjZGVmaW5lIExTRl9JTUFHRV9TVEFUVVNfVkFM SURBVElPTl9DT0RFX0ZBSUxFRAkJMgorI2RlZmluZSBMU0ZfSU1BR0VfU1RBVFVTX1ZBTElEQVRJ T05fREFUQV9GQUlMRUQJCTMKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX0RP TkUJCTQKKyNkZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19WQUxJREFUSU9OX1NLSVBQRUQJCTUKKyNk ZWZpbmUgTFNGX0lNQUdFX1NUQVRVU19CT09UU1RSQVBfUkVBRFkJCTYKK307CisKKworLyoqCisg KiBzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgLSBkZXNjcmlwdG9yIG9mIGZpcm13YXJlIGltYWdl CisgKiBAZGVzY3JpcHRvcl9zaXplOgkJc2l6ZSBvZiB0aGlzIGRlc2NyaXB0b3IKKyAqIEBpbWFn ZV9zaXplOgkJCXNpemUgb2YgdGhlIHdob2xlIGltYWdlCisgKiBAYm9vdGxvYWRlcl9zdGFydF9v ZmZzZXQ6CXN0YXJ0IG9mZnNldCBvZiB0aGUgYm9vdGxvYWRlciBpbiB1Y29kZSBpbWFnZQorICog QGJvb3Rsb2FkZXJfc2l6ZToJCXNpemUgb2YgdGhlIGJvb3Rsb2FkZXIKKyAqIEBib290bG9hZGVy X2ltZW1fb2Zmc2V0OglzdGFydCBvZmYgc2V0IG9mIHRoZSBib290bG9hZGVyIGluIElNRU0KKyAq IEBib290bG9hZGVyX2VudHJ5X3BvaW50OgllbnRyeSBwb2ludCBvZiB0aGUgYm9vdGxvYWRlciBp biBJTUVNCisgKiBAYXBwX3N0YXJ0X29mZnNldDoJCXN0YXJ0IG9mZnNldCBvZiB0aGUgTFMgZmly bXdhcmUKKyAqIEBhcHBfc2l6ZToJCQlzaXplIG9mIHRoZSBMUyBmaXJtd2FyZSdzIGNvZGUgYW5k IGRhdGEKKyAqIEBhcHBfaW1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGFwcCBpbiBJTUVNCisg KiBAYXBwX2ltZW1fZW50cnk6CQllbnRyeSBwb2ludCBvZiB0aGUgYXBwIGluIElNRU0KKyAqIEBh cHBfZG1lbV9vZmZzZXQ6CQlvZmZzZXQgb2YgdGhlIGRhdGEgaW4gRE1FTQorICogQGFwcF9yZXNp ZGVudF9jb2RlX29mZnNldDoJb2Zmc2V0IG9mIGFwcCBjb2RlIGZyb20gYXBwX3N0YXJ0X29mZnNl dAorICogQGFwcF9yZXNpZGVudF9jb2RlX3NpemU6CXNpemUgb2YgdGhlIGNvZGUKKyAqIEBhcHBf cmVzaWRlbnRfZGF0YV9vZmZzZXQ6CW9mZnNldCBvZiBkYXRhIGZyb20gYXBwX3N0YXJ0X29mZnNl dAorICogQGFwcF9yZXNpZGVudF9kYXRhX3NpemU6CXNpemUgb2YgZGF0YQorICoKKyAqIEEgZmly bXdhcmUgaW1hZ2UgY29udGFpbnMgdGhlIGNvZGUsIGRhdGEsIGFuZCBib290bG9hZGVyIG9mIGEg Z2l2ZW4gTFMKKyAqIGZhbGNvbiBpbiBhIHNpbmdsZSBibG9iLiBUaGlzIHN0cnVjdHVyZSBkZXNj cmliZXMgd2hlcmUgZXZlcnl0aGluZyBpcy4KKyAqCisgKiBUaGlzIGNhbiBiZSBnZW5lcmF0ZWQg ZnJvbSBhIChib290bG9hZGVyLCBjb2RlLCBkYXRhKSBzZXQgaWYgdGhleSBoYXZlCisgKiBiZWVu IGxvYWRlZCBzZXBhcmF0ZWx5LCBvciBjb21lIGRpcmVjdGx5IGZyb20gYSBmaWxlLgorICovCitz dHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgeworCXUzMiBkZXNjcmlwdG9yX3NpemU7CisJdTMyIGlt YWdlX3NpemU7CisJdTMyIHRvb2xzX3ZlcnNpb247CisJdTMyIGFwcF92ZXJzaW9uOworCWNoYXIg ZGF0ZVs2NF07CisJdTMyIGJvb3Rsb2FkZXJfc3RhcnRfb2Zmc2V0OworCXUzMiBib290bG9hZGVy X3NpemU7CisJdTMyIGJvb3Rsb2FkZXJfaW1lbV9vZmZzZXQ7CisJdTMyIGJvb3Rsb2FkZXJfZW50 cnlfcG9pbnQ7CisJdTMyIGFwcF9zdGFydF9vZmZzZXQ7CisJdTMyIGFwcF9zaXplOworCXUzMiBh cHBfaW1lbV9vZmZzZXQ7CisJdTMyIGFwcF9pbWVtX2VudHJ5OworCXUzMiBhcHBfZG1lbV9vZmZz ZXQ7CisJdTMyIGFwcF9yZXNpZGVudF9jb2RlX29mZnNldDsKKwl1MzIgYXBwX3Jlc2lkZW50X2Nv ZGVfc2l6ZTsKKwl1MzIgYXBwX3Jlc2lkZW50X2RhdGFfb2Zmc2V0OworCXUzMiBhcHBfcmVzaWRl bnRfZGF0YV9zaXplOworCXUzMiBuYl9vdmVybGF5czsKKwlzdHJ1Y3Qge3UzMiBzdGFydDsgdTMy IHNpemU7IH0gbG9hZF9vdmxbNjRdOworCXUzMiBjb21wcmVzc2VkOworfTsKKworLyoqCisgKiBz dHJ1Y3QgbHNfdWNvZGVfaW1nIC0gdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGxvYWRlZCBMUyBmaXJt d2FyZXMKKyAqIEBub2RlOgkJdG8gbGluayB3aXRoaW4gbHNmX3Vjb2RlX21ncgorICogQGZhbGNv bl9pZDoJCUlEIG9mIHRoZSBmYWxjb24gdGhpcyBMUyBmaXJtd2FyZSBpcyBmb3IKKyAqIEB1Y29k ZV9kZXNjOgkJbG9hZGVkIG9yIGdlbmVyYXRlZCBtYXAgb2YgdWNvZGVfZGF0YQorICogQHVjb2Rl X2hlYWRlcjoJaGVhZGVyIG9mIHRoZSBmaXJtd2FyZQorICogQHVjb2RlX2RhdGE6CQlmaXJtd2Fy ZSBwYXlsb2FkIChjb2RlIGFuZCBkYXRhKQorICogQHVjb2RlX3NpemU6CQlzaXplIGluIGJ5dGVz IG9mIGRhdGEgaW4gdWNvZGVfZGF0YQorICogQHdwcl9oZWFkZXI6CQlXUFIgaGVhZGVyIHRvIGJl IHdyaXR0ZW4gdG8gdGhlIExTIGJsb2IKKyAqIEBsc2JfaGVhZGVyOgkJTFNCIGhlYWRlciB0byBi ZSB3cml0dGVuIHRvIHRoZSBMUyBibG9iCisgKgorICogUHJlcGFyaW5nIHRoZSBXUFIgTFMgYmxv YiByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIExTIGZpcm13YXJlcworICogKHNp emUsIGV0YykgdG8gYmUga25vd24uIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0aGUgZGF0 YSBvZiBvbmUgTFMKKyAqIGZpcm13YXJlLgorICovCitzdHJ1Y3QgbHNfdWNvZGVfaW1nIHsKKwlz dHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJZW51bSBudmttX2ZhbGNvbmlkeCBmYWxjb25faWQ7CisK KwlzdHJ1Y3QgbHNfdWNvZGVfaW1nX2Rlc2MgdWNvZGVfZGVzYzsKKwl1MzIgKnVjb2RlX2hlYWRl cjsKKwl1OCAqdWNvZGVfZGF0YTsKKwl1MzIgdWNvZGVfc2l6ZTsKKworCXN0cnVjdCBsc2Zfd3By X2hlYWRlciB3cHJfaGVhZGVyOworCXN0cnVjdCBsc2ZfbHNiX2hlYWRlciBsc2JfaGVhZGVyOwor fTsKKwogc3RydWN0IGZsY25fdTY0IHsKIAl1MzIgbG87CiAJdTMyIGhpOwpAQCAtOTEsNiArMjYw LDI5IEBAIHN0cnVjdCBnbTIwMF9mbGNuX2JsX2Rlc2MgewogfTsKIAogLyoqCisgKiBzdHJ1Y3Qg c2VjYm9vdF9sc19zaW5nbGVfZnVuYyAtIG1hbmFnZXMgYSBzaW5nbGUgTFMgZmlybXdhcmUKKyAq CisgKiBAbG9hZDogbG9hZCB0aGUgZXh0ZXJuYWwgZmlybXdhcmUgaW50byBhIGxzX3Vjb2RlX2lt ZworICogQGdlbmVyYXRlX2JsX2Rlc2M6IGZ1bmN0aW9uIGNhbGxlZCBvbiBhIGJsb2NrIG9mIGJs X2Rlc2Nfc2l6ZSB0byBnZW5lcmF0ZSB0aGUKKyAqCQkgICAgICBwcm9wZXIgYm9vdGxvYWRlciBk ZXNjcmlwdG9yIGZvciB0aGlzIExTIGZpcm13YXJlCisgKiBAYmxfZGVzY19zaXplOiBzaXplIG9m IHRoZSBib290bG9hZGVyIGRlc2NyaXB0b3IKKyAqLworc3RydWN0IHNlY2Jvb3RfbHNfc2luZ2xl X2Z1bmMgeworCWludCAoKmxvYWQpKGNvbnN0IHN0cnVjdCBudmttX3N1YmRldiAqLCBzdHJ1Y3Qg bHNfdWNvZGVfaW1nICopOworCXZvaWQgKCpnZW5lcmF0ZV9ibF9kZXNjKShjb25zdCBzdHJ1Y3Qg bHNfdWNvZGVfaW1nICosIHU2NCwgdm9pZCAqKTsKKwl1MzIgYmxfZGVzY19zaXplOworfTsKKwor LyoqCisgKiB0eXBlZGVmIHNlY2Jvb3RfbHNfZnVuYyAtIG1hbmFnZXMgYWxsIHRoZSBMUyBmaXJt d2FyZXMgZm9yIHRoaXMgQUNSCisgKi8KK3R5cGVkZWYgY29uc3Qgc3RydWN0IHNlY2Jvb3RfbHNf c2luZ2xlX2Z1bmMgKgorc2VjYm9vdF9sc19mdW5jW05WS01fRkFMQ09OX0VORF07CisKK2ludCBn bTIwMF9sc19sb2FkX2ZlY3MoY29uc3Qgc3RydWN0IG52a21fc3ViZGV2ICosIHN0cnVjdCBsc191 Y29kZV9pbWcgKik7CitpbnQgZ20yMDBfbHNfbG9hZF9ncGNjcyhjb25zdCBzdHJ1Y3QgbnZrbV9z dWJkZXYgKiwgc3RydWN0IGxzX3Vjb2RlX2ltZyAqKTsKKworLyoqCiAgKiBDb250YWlucyB0aGUg d2hvbGUgc2VjdXJlIGJvb3Qgc3RhdGUsIGFsbG93aW5nIGl0IHRvIGJlIHBlcmZvcm1lZCBhcyBu ZWVkZWQKICAqIEB3cHJfYWRkcjoJCXBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFdQUiByZWdpb24K ICAqIEB3cHJfc2l6ZToJCXNpemUgaW4gYnl0ZXMgb2YgdGhlIFdQUiByZWdpb24KQEAgLTExMCw2 ICszMDIsNyBAQCBzdHJ1Y3QgZ20yMDBfZmxjbl9ibF9kZXNjIHsKIHN0cnVjdCBnbTIwMF9zZWNi b290IHsKIAlzdHJ1Y3QgbnZrbV9zZWNib290IGJhc2U7CiAJY29uc3Qgc3RydWN0IGdtMjAwX3Nl Y2Jvb3RfZnVuYyAqZnVuYzsKKwljb25zdCBzZWNib290X2xzX2Z1bmMgKmxzX2Z1bmM7CiAKIAkv KgogCSAqIEFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIGZpeGVkIFdQUiByZWdpb24sIGlmIGFueS4g T24gVGVncmEgdGhpcwotLSAKMi4xMC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L25vdXZlYXUK