From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH v4.5 1/8] cgroup: Allow registration and lookup of cgroup private data (v3) Date: Wed, 21 Mar 2018 16:23:37 -0700 Message-ID: <20180321232344.20727-2-matthew.d.roper@intel.com> References: <20180321232344.20727-1-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180321232344.20727-1-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, cgroups@vger.kernel.org Cc: Tejun Heo , Roman Gushchin , Alexei Starovoitov List-Id: dri-devel@lists.freedesktop.org VGhlcmUgYXJlIGNhc2VzIHdoZXJlIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgbWF5IHdpc2gg dG8gc3RvcmUgZGF0YQphc3NvY2lhdGVkIHdpdGggaW5kaXZpZHVhbCBjZ3JvdXBzIHdpdGhvdXQg YnVpbGRpbmcgYSBmdWxsIGNncm91cApjb250cm9sbGVyLiAgTGV0J3MgYWRkIGludGVyZmFjZXMg dG8gYWxsb3cgdGhlbSB0byByZWdpc3RlciBhbmQgbG9va3VwCnRoaXMgcHJpdmF0ZSBkYXRhIGZv ciBpbmRpdmlkdWFsIGNncm91cHMuCgpBIGtlcm5lbCBzeXN0ZW0gKGUuZy4sIGEgZHJpdmVyKSB0 aGF0IHdpc2hlcyB0byByZWdpc3RlciBwcml2YXRlIGRhdGEKZm9yIGEgY2dyb3VwIHNob3VsZCBz dGFydCBieSBvYnRhaW5pbmcgYSB1bmlxdWUgcHJpdmF0ZSBkYXRhIGtleSBieQpjYWxsaW5nIGNn cm91cF9wcml2X2dldGtleSgpLiAgSXQgbWF5IHRoZW4gYXNzb2NpYXRlIHByaXZhdGUgZGF0YQp3 aXRoIGEgY2dyb3VwIGJ5IGNhbGxpbmcgY2dyb3VwX3ByaXZfaW5zdGFsbChjZ3JwLCBrZXksIHJl Zikgd2hlcmUgJ3JlZicKaXMgYSBwb2ludGVyIHRvIGEga3JlZiBmaWVsZCBpbnNpZGUgdGhlIHBy aXZhdGUgZGF0YSBzdHJ1Y3R1cmUuICBUaGUKcHJpdmF0ZSBkYXRhIG1heSBsYXRlciBiZSBsb29r ZWQgdXAgYnkgY2FsbGluZyBjZ3JvdXBfcHJpdl9nZXQoY2dycCwKa2V5KSB0byBvYnRhaW4gYSBu ZXcgcmVmZXJlbmNlIHRvIHRoZSBwcml2YXRlIGRhdGEuICBQcml2YXRlIGRhdGEgbWF5IGJlCnVu cmVnaXN0ZXJlZCB2aWEgY2dyb3VwX3ByaXZfcmVsZWFzZShjZ3JwLCBrZXkpLgoKSWYgYSBjZ3Jv dXAgaXMgcmVtb3ZlZCwgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYWxsIHByaXZhdGUgZGF0YSBv YmplY3RzCndpbGwgYmUgZGVjcmVtZW50ZWQuCgp2MjogIFNpZ25pZmljYW50IG92ZXJoYXVsIHN1 Z2dlc3RlZCBieSBUZWp1biwgQWxleGVpLCBhbmQgUm9tYW4KIC0gUmV3b3JrIGludGVyZmFjZSB0 byBtYWtlIGNvbnN1bWVycyBvYnRhaW4gYW4gaWRhLWJhc2VkIGtleSByYXRoZXIKICAgdGhhbiBz dXBwbHlpbmcgdGhlaXIgb3duIGFyYml0cmFyeSB2b2lkKgogLSBJbnRlcm5hbCBpbXBsZW1lbnRh dGlvbiBub3cgdXNlcyBwZXItY2dyb3VwIHJhZGl4dHJlZXMgd2hpY2ggc2hvdWxkCiAgIGFsbG93 IG11Y2ggZmFzdGVyIGxvb2t1cCB0aGFuIHRoZSBwcmV2aW91cyBoYXNodGFibGUgYXBwcm9hY2gK IC0gUHJpdmF0ZSBkYXRhIGlzIHJlZ2lzdGVyZWQgdmlhIGtyZWYsIGFsbG93aW5nIGEgc2luZ2xl IHByaXZhdGUgZGF0YQogICBzdHJ1Y3R1cmUgdG8gcG90ZW50aWFsbHkgYmUgYXNzaWduZWQgdG8g bXVsdGlwbGUgY2dyb3Vwcy4KCnYzOgogLSBTcGFyZSB3YXJuaW5nIGZpeGVzIChrYnVpbGQgdGVz dCByb2JvdCkKCkNjOiBUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CkNjOiBBbGV4ZWkgU3Rhcm92 b2l0b3YgPGFzdEBmYi5jb20+CkNjOiBSb21hbiBHdXNoY2hpbiA8Z3Vyb0BmYi5jb20+CkNjOiBj Z3JvdXBzQHZnZXIua2VybmVsLm9yZwpTaWduZWQtb2ZmLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3 LmQucm9wZXJAaW50ZWwuY29tPgoKZml4dXAhIGNncm91cDogQWxsb3cgcmVnaXN0cmF0aW9uIGFu ZCBsb29rdXAgb2YgY2dyb3VwIHByaXZhdGUgZGF0YSAodjIpCi0tLQogaW5jbHVkZS9saW51eC9j Z3JvdXAtZGVmcy5oIHwgIDEwICsrKwogaW5jbHVkZS9saW51eC9jZ3JvdXAuaCAgICAgIHwgICA3 ICsrCiBrZXJuZWwvY2dyb3VwL2Nncm91cC5jICAgICAgfCAxODMgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTk4IGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAt ZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCmluZGV4IDlmMjQyYjg3NmZkZS4u OTA4NmQ5NjNjYzBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKKysr IGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCkBAIC00MjcsNiArNDI3LDE2IEBAIHN0cnVj dCBjZ3JvdXAgewogCS8qIHVzZWQgdG8gc3RvcmUgZUJQRiBwcm9ncmFtcyAqLwogCXN0cnVjdCBj Z3JvdXBfYnBmIGJwZjsKIAorCS8qCisJICogY2dyb3VwIHByaXZhdGUgZGF0YSByZWdpc3RlcmVk IGJ5IG90aGVyIG5vbi1jb250cm9sbGVyIHBhcnRzIG9mIHRoZQorCSAqIGtlcm5lbC4gIEluc2Vy dGlvbnMgYXJlIHByb3RlY3RlZCBieSBwcml2ZGF0YV9sb2NrLCBsb29rdXBzIGJ5CisJICogcmN1 X3JlYWRfbG9jaygpLgorCSAqLworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcHJpdmRhdGE7CisK KwkvKiBQcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBpbnNlcnRpb25zL2RlbGV0aW9ucyB0byBw cml2ZGF0YSAqLworCXNwaW5sb2NrX3QgcHJpdmRhdGFfbG9jazsKKwogCS8qIGlkcyBvZiB0aGUg YW5jZXN0b3JzIGF0IGVhY2ggbGV2ZWwgaW5jbHVkaW5nIHNlbGYgKi8KIAlpbnQgYW5jZXN0b3Jf aWRzW107CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUv bGludXgvY2dyb3VwLmgKaW5kZXggNDczZTBjMGFiYjg2Li42M2QyMmRmYTAwYmQgMTAwNjQ0Ci0t LSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApA QCAtODMzLDQgKzgzMywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nncm91cF9ucyhzdHJ1 Y3QgY2dyb3VwX25hbWVzcGFjZSAqbnMpCiAJCWZyZWVfY2dyb3VwX25zKG5zKTsKIH0KIAorLyog Y2dyb3VwIHByaXZhdGUgZGF0YSBoYW5kbGluZyAqLworaW50IGNncm91cF9wcml2X2dldGtleSh2 b2lkICgqZnJlZSkoc3RydWN0IGtyZWYgKikpOwordm9pZCBjZ3JvdXBfcHJpdl9kZXN0cm95a2V5 KGludCBrZXkpOworaW50IGNncm91cF9wcml2X2luc3RhbGwoc3RydWN0IGNncm91cCAqY2dycCwg aW50IGtleSwgc3RydWN0IGtyZWYgKnJlZik7CitzdHJ1Y3Qga3JlZiAqY2dyb3VwX3ByaXZfZ2V0 KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGludCBrZXkpOwordm9pZCBjZ3JvdXBfcHJpdl9yZWxlYXNl KHN0cnVjdCBjZ3JvdXAgKmNncnAsIGludCBrZXkpOworCiAjZW5kaWYgLyogX0xJTlVYX0NHUk9V UF9IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91 cC9jZ3JvdXAuYwppbmRleCA4Y2RhM2JjM2FlMjIuLjMyNjhhMjFlODE1OCAxMDA2NDQKLS0tIGEv a2VybmVsL2Nncm91cC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCkBAIC04 MSw4ICs4MSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChjc3Nfc2V0X2xvY2spOwogI2VuZGlmCiAK IC8qCi0gKiBQcm90ZWN0cyBjZ3JvdXBfaWRyIGFuZCBjc3NfaWRyIHNvIHRoYXQgSURzIGNhbiBi ZSByZWxlYXNlZCB3aXRob3V0Ci0gKiBncmFiYmluZyBjZ3JvdXBfbXV0ZXguCisgKiBJRCBhbGxv Y2F0b3IgZm9yIGNncm91cCBwcml2YXRlIGRhdGEga2V5czsgdGhlIElEJ3MgYWxsb2NhdGVkIGhl cmUgd2lsbAorICogYmUgdXNlZCB0byBpbmRleCBhbGwgcGVyLWNncm91cCByYWRpeCB0cmVlcy4g IFRoZSByYWRpeCB0cmVlIGJ1aWx0IGludG8KKyAqIHRoZSBJRFIgaXRzZWxmIHdpbGwgc3RvcmUg YSBrZXktc3BlY2lmaWMgZnVuY3Rpb24gdG8gYmUgcGFzc2VkIHRvIGtyZWZfcHV0LgorICovCitz dGF0aWMgREVGSU5FX0lEUihjZ3JvdXBfcHJpdl9pZHIpOworCisvKgorICogUHJvdGVjdHMgY2dy b3VwX2lkciwgY3NzX2lkciwgYW5kIGNncm91cF9wcml2X2lkciBzbyB0aGF0IElEcyBjYW4gYmUK KyAqIHJlbGVhc2VkIHdpdGhvdXQgZ3JhYmJpbmcgY2dyb3VwX211dGV4LgogICovCiBzdGF0aWMg REVGSU5FX1NQSU5MT0NLKGNncm91cF9pZHJfbG9jayk7CiAKQEAgLTE4MzksNiArMTg0Niw4IEBA IHN0YXRpYyB2b2lkIGluaXRfY2dyb3VwX2hvdXNla2VlcGluZyhzdHJ1Y3QgY2dyb3VwICpjZ3Jw KQogCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jc2V0X2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgm Y2dycC0+cGlkbGlzdHMpOwogCW11dGV4X2luaXQoJmNncnAtPnBpZGxpc3RfbXV0ZXgpOworCUlO SVRfUkFESVhfVFJFRSgmY2dycC0+cHJpdmRhdGEsIEdGUF9OT1dBSVQpOworCXNwaW5fbG9ja19p bml0KCZjZ3JwLT5wcml2ZGF0YV9sb2NrKTsKIAljZ3JwLT5zZWxmLmNncm91cCA9IGNncnA7CiAJ Y2dycC0+c2VsZi5mbGFncyB8PSBDU1NfT05MSU5FOwogCWNncnAtPmRvbV9jZ3JwID0gY2dycDsK QEAgLTQ1NzgsNiArNDU4Nyw4IEBAIHN0YXRpYyB2b2lkIGNzc19yZWxlYXNlX3dvcmtfZm4oc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNncm91 cF9zdWJzeXNfc3RhdGUsIGRlc3Ryb3lfd29yayk7CiAJc3RydWN0IGNncm91cF9zdWJzeXMgKnNz ID0gY3NzLT5zczsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3NzLT5jZ3JvdXA7CisJc3RydWN0 IHJhZGl4X3RyZWVfaXRlciBpdGVyOworCXZvaWQgX19yY3UgKipzbG90OwogCiAJbXV0ZXhfbG9j aygmY2dyb3VwX211dGV4KTsKIApAQCAtNDYxNyw2ICs0NjI4LDEyIEBAIHN0YXRpYyB2b2lkIGNz c19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkJCQkgTlVMTCk7 CiAKIAkJY2dyb3VwX2JwZl9wdXQoY2dycCk7CisKKwkJLyogRHJvcCByZWZlcmVuY2Ugb24gYW55 IHByaXZhdGUgZGF0YSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXJhZGl4X3RyZWVfZm9yX2Vh Y2hfc2xvdChzbG90LCAmY2dycC0+cHJpdmRhdGEsICZpdGVyLCAwKQorCQkJY2dyb3VwX3ByaXZf cmVsZWFzZShjZ3JwLCBpdGVyLmluZGV4KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJ bXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwpAQCAtNTkzMiwzICs1OTQ5LDE2NSBAQCBzdGF0 aWMgaW50IF9faW5pdCBjZ3JvdXBfc3lzZnNfaW5pdCh2b2lkKQogfQogc3Vic3lzX2luaXRjYWxs KGNncm91cF9zeXNmc19pbml0KTsKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KKworLyoqCisg KiBjZ3JvdXBfcHJpdl9nZXRrZXkgLSBvYnRhaW4gYSBuZXcgY2dyb3VwX3ByaXYgbG9va3VwIGtl eQorICogQGZyZWU6IEZ1bmN0aW9uIHRvIHJlbGVhc2UgcHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQg d2l0aCB0aGlzIGtleQorICoKKyAqIEFsbG93cyBub24tY29udHJvbGxlciBrZXJuZWwgc3Vic3lz dGVtcyB0byByZWdpc3RlciBhIG5ldyBrZXkgdGhhdCB3aWxsCisgKiBiZSB1c2VkIHRvIGluc2Vy dC9sb29rdXAgcHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBpbmRpdmlkdWFsIGNncm91cHMu CisgKiBQcml2YXRlIGRhdGEgbG9va3VwIHRhYmxlcyBhcmUgaW1wbGVtZW50ZWQgYXMgcGVyLWNn cm91cCByYWRpeCB0cmVlcy4KKyAqCisgKiBSZXR1cm5zOgorICogQSBwb3NpdGl2ZSBpbnRlZ2Vy IGxvb2t1cCBrZXkgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiBv biBmYWlsdXJlIChlLmcuLCBpZiBJRCBhbGxvY2F0aW9uIGZhaWxzKS4KKyAqLworaW50CitjZ3Jv dXBfcHJpdl9nZXRrZXkodm9pZCAoKmZyZWUpKHN0cnVjdCBrcmVmICpyKSkKK3sKKwlpbnQgcmV0 OworCisJV0FSTl9PTighZnJlZSk7CisKKwlpZHJfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlzcGlu X2xvY2tfYmgoJmNncm91cF9pZHJfbG9jayk7CisJcmV0ID0gaWRyX2FsbG9jKCZjZ3JvdXBfcHJp dl9pZHIsIGZyZWUsIDEsIDAsIEdGUF9OT1dBSVQpOworCXNwaW5fdW5sb2NrX2JoKCZjZ3JvdXBf aWRyX2xvY2spOworCWlkcl9wcmVsb2FkX2VuZCgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGNncm91cF9wcml2X2dldGtleSk7CisKKy8qKgorICogY2dyb3VwX3ByaXZf ZGVzdHJveWtleSAtIHJlbGVhc2UgYSBjZ3JvdXBfcHJpdiBrZXkKKyAqIEBrZXk6IFByaXZhdGUg ZGF0YSBrZXkgdG8gYmUgcmVsZWFzZWQKKyAqCisgKiBSZW1vdmVzIGEgY2dyb3VwIHByaXZhdGUg ZGF0YSBrZXkgYW5kIGFsbCBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqIGtl eSBpbiBhbnkgY2dyb3VwLiAgVGhpcyBpcyBhIGhlYXZ5IG9wZXJhdGlvbiB0aGF0IHdpbGwgdGFr ZSBjZ3JvdXBfbXV0ZXguCisgKi8KK3ZvaWQKK2Nncm91cF9wcml2X2Rlc3Ryb3lrZXkoaW50IGtl eSkKK3sKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwOworCisJV0FSTl9PTihrZXkgPT0gMCk7CisKKwlt dXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCWNncm91cF9mb3JfZWFjaF9saXZlX2NoaWxkKGNn cnAsICZjZ3JwX2RmbF9yb290LmNncnApCisJCWNncm91cF9wcml2X3JlbGVhc2UoY2dycCwga2V5 KTsKKwlpZHJfcmVtb3ZlKCZjZ3JvdXBfcHJpdl9pZHIsIGtleSk7CisJbXV0ZXhfdW5sb2NrKCZj Z3JvdXBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX3ByaXZfZGVzdHJveWtl eSk7CisKKy8qKgorICogY2dyb3VwX3ByaXZfaW5zdGFsbCAtIGluc3RhbGwgbmV3IGNncm91cCBw cml2YXRlIGRhdGEKKyAqIEBjZ3JwOiBjZ3JvdXAgdG8gc3RvcmUgcHJpdmF0ZSBkYXRhIGZvcgor ICogQGtleToga2V5IHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtlcm5lbCBvd25lciBvZiBwcml2YXRl IGRhdGEKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGtyZWYgZmllbGQgb2YgcHJpdmF0ZSBkYXRhIHN0 cnVjdHVyZQorICoKKyAqIEFsbG93cyBub24tY29udHJvbGxlciBrZXJuZWwgc3Vic3lzdGVtcyB0 byByZWdpc3RlciB0aGVpciBvd24gcHJpdmF0ZSBkYXRhCisgKiBhc3NvY2lhdGVkIHdpdGggYSBj Z3JvdXAuICBUaGlzIHdpbGwgb2Z0ZW4gYmUgdXNlZCBieSBkcml2ZXJzIHdoaWNoIHdpc2ggdG8K KyAqIHRyYWNrIHRoZWlyIG93biBwZXItY2dyb3VwIGRhdGEgd2l0aG91dCBidWlsZGluZyBhIGZ1 bGwgY2dyb3VwIGNvbnRyb2xsZXIuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBm b3IgZW5zdXJpbmcgdGhhdCBubyBwcml2YXRlIGRhdGEgYWxyZWFkeSBleGlzdHMKKyAqIGZvciB0 aGUgZ2l2ZW4ga2V5LgorICoKKyAqIFJlZ2lzdGVyaW5nIGNncm91cCBwcml2YXRlIGRhdGEgd2l0 aCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVtZW50IHRoZQorICogcmVmZXJlbmNlIGNvdW50IGZv ciB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4gIElmIHRoZSBjZ3JvdXAgaXMgcmVtb3ZlZCwK KyAqIHRoZSByZWZlcmVuY2UgY291bnQgd2lsbCBiZSBkZWNyZW1lbnRlZCwgYWxsb3dpbmcgdGhl IHByaXZhdGUgZGF0YSB0bworICogYmUgZnJlZWQgaWYgdGhlcmUgYXJlIG5vIG90aGVyIG91dHN0 YW5kaW5nIHJlZmVyZW5jZXMuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2Vzcywgb3Ro ZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQKK2Nncm91 cF9wcml2X2luc3RhbGwoc3RydWN0IGNncm91cCAqY2dycCwgaW50IGtleSwgc3RydWN0IGtyZWYg KnJlZikKK3sKKwlpbnQgcmV0OworCisJV0FSTl9PTihjZ3JwLT5yb290ICE9ICZjZ3JwX2RmbF9y b290KTsKKwlXQVJOX09OKGtleSA9PSAwKTsKKworCWtyZWZfZ2V0KHJlZik7CisKKwlyZXQgPSBy YWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXNwaW5fbG9ja19iaCgmY2dycC0+cHJpdmRhdGFfbG9jayk7CisJcmV0ID0gcmFkaXhfdHJl ZV9pbnNlcnQoJmNncnAtPnByaXZkYXRhLCBrZXksIHJlZik7CisJc3Bpbl91bmxvY2tfYmgoJmNn cnAtPnByaXZkYXRhX2xvY2spOworCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKworCXJldHVy biByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfcHJpdl9pbnN0YWxsKTsKKworLyoq CisgKiBjZ3JvdXBfcHJpdl9nZXQgLSBsb29rcyB1cCBjZ3JvdXAgcHJpdmF0ZSBkYXRhCisgKiBA Y2dycDogY2dyb3VwIHRvIGxvb2t1cCBwcml2YXRlIGRhdGEgZm9yCisgKiBAa2V5OiBrZXkgdW5p cXVlbHkgaWRlbnRpZnlpbmcgb3duZXIgb2YgcHJpdmF0ZSBkYXRhIHRvIGxvb2t1cAorICoKKyAq IExvb2tzIHVwIHRoZSBjZ3JvdXAgcHJpdmF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGtleS4g IFRoZSBwcml2YXRlCisgKiBkYXRhJ3MgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGFu ZCBhIHBvaW50ZXIgdG8gaXRzIGtyZWYgZmllbGQKKyAqIGlzIHJldHVybmVkIHRvIHRoZSBjYWxs ZXIgKHdoaWNoIGNhbiB1c2UgY29udGFpbmVyX29mKCkpIHRvIG9idGFpbgorICogdGhlIHByaXZh dGUgZGF0YSBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAqIEEgcG9pbnRlciB0byB0aGUgcHJp dmF0ZSBkYXRhJ3Mga3JlZiBmaWVsZCwgb3IgTlVMTCBpZiBubyBwcml2YXRlIGRhdGEgaGFzCisg KiBiZWVuIHJlZ2lzdGVyZWQuCisgKi8KK3N0cnVjdCBrcmVmICoKK2Nncm91cF9wcml2X2dldChz dHJ1Y3QgY2dyb3VwICpjZ3JwLCBpbnQga2V5KQoreworCXN0cnVjdCBrcmVmICpyZWY7CisKKwlX QVJOX09OKGNncnAtPnJvb3QgIT0gJmNncnBfZGZsX3Jvb3QpOworCVdBUk5fT04oa2V5ID09IDAp OworCisJcmN1X3JlYWRfbG9jaygpOworCisJcmVmID0gcmFkaXhfdHJlZV9sb29rdXAoJmNncnAt PnByaXZkYXRhLCBrZXkpOworCWlmIChyZWYpCisJCWtyZWZfZ2V0KHJlZik7CisKKwlyY3VfcmVh ZF91bmxvY2soKTsKKworCXJldHVybiByZWY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBf cHJpdl9nZXQpOworCisvKioKKyAqIGNncm91cF9wcml2X2ZyZWUgLSBmcmVlIGNncm91cCBwcml2 YXRlIGRhdGEKKyAqIEBjZ3JwOiBjZ3JvdXAgdG8gcmVsZWFzZSBwcml2YXRlIGRhdGEgZm9yCisg KiBAa2V5OiBrZXkgdW5pcXVlbHkgaWRlbnRpZnlpbmcgb3duZXIgb2YgcHJpdmF0ZSBkYXRhIHRv IGZyZWUKKyAqCisgKiBSZW1vdmVzIHByaXZhdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdp dmVuIGtleSBmcm9tIGEgY2dyb3VwJ3MgaW50ZXJuYWwKKyAqIHRhYmxlIGFuZCBkZWNyZW1lbnRz IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBwcml2YXRlIGRhdGEgcmVtb3ZlZCwKKyAqIGFs bG93aW5nIGl0IHRvIGZyZWVkIGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgZXhpc3QuCisgKi8KK3Zv aWQKK2Nncm91cF9wcml2X3JlbGVhc2Uoc3RydWN0IGNncm91cCAqY2dycCwgaW50IGtleSkKK3sK KwlzdHJ1Y3Qga3JlZiAqcmVmOworCXZvaWQgKCpmcmVlKShzdHJ1Y3Qga3JlZiAqcik7CisKKwlX QVJOX09OKGNncnAtPnJvb3QgIT0gJmNncnBfZGZsX3Jvb3QpOworCVdBUk5fT04oa2V5ID09IDAp OworCisJcmN1X3JlYWRfbG9jaygpOworCisJZnJlZSA9IGlkcl9maW5kKCZjZ3JvdXBfcHJpdl9p ZHIsIGtleSk7CisJV0FSTl9PTighZnJlZSk7CisKKwlzcGluX2xvY2tfYmgoJmNncnAtPnByaXZk YXRhX2xvY2spOworCXJlZiA9IHJhZGl4X3RyZWVfZGVsZXRlKCZjZ3JwLT5wcml2ZGF0YSwga2V5 KTsKKwlzcGluX3VubG9ja19iaCgmY2dycC0+cHJpdmRhdGFfbG9jayk7CisJaWYgKHJlZikKKwkJ a3JlZl9wdXQocmVmLCBmcmVlKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoY2dyb3VwX3ByaXZfcmVsZWFzZSk7Ci0tIAoyLjE0LjMKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=