From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gilad Ben-Yossef Subject: [PATCH v3] dm: switch dm-verity to async hash crypto API Date: Sun, 19 Feb 2017 14:46:07 +0200 Message-ID: <1487508367-16036-1-git-send-email-gilad@benyossef.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: gilad.benyossef@arm.com, Eric Biggers , linux-crypto@vger.kernel.org, =?UTF-8?q?Ondrej=20Mosn=C3=A1=C4=8Dek?= , Milan Broz , Ofir Drang To: dm-devel@redhat.com, Alasdair Kergon , MIKE Snitzer Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com List-Id: linux-crypto.vger.kernel.org VXNlIG9mIHRoZSBzeW5jaHJvbm91cyBkaWdlc3QgQVBJIGxpbWl0cyBkbS12ZXJpdHkgdG8gdXNp bmcgcHVyZQpDUFUgYmFzZWQgYWxnb3JpdGhtIHByb3ZpZGVycyBhbmQgcnVsZXMgb3V0IHRoZSB1 c2Ugb2Ygb2ZmIENQVQphbGdvcml0aG0gcHJvdmlkZXJzIHdoaWNoIGFyZSBub3JtYWxseSBhc3lu Y2hyb25vdXMgYnkgbmF0dXJlLApwb3RlbnRpYWxseSBmcmVlaW5nIENQVSBjeWNsZXMuCgpUaGlz IGNhbiByZWR1Y2UgcGVyZm9ybWFuY2UgcGVyIFdhdHQgaW4gc2l0dWF0aW9ucyBzdWNoIGFzIGR1 cmluZwpib290IHRpbWUgd2hlbiBhIGxvdCBvZiBjb25jdXJyZW50IGZpbGUgYWNjZXNzZXMgYXJl IG1hZGUgdG8gdGhlCnByb3RlY3RlZCB2b2x1bWUuCgpNb3ZlIERNX1ZFUklUWSB0byB0aGUgYXN5 bmNocm9ub3VzIGhhc2ggQVBJLgoKU2lnbmVkLW9mZi1ieTogR2lsYWQgQmVuLVlvc3NlZiA8Z2ls YWRAYmVueW9zc2VmLmNvbT4KQ0M6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnMzQGdtYWlsLmNvbT4K Q0M6IE9uZHJlaiBNb3Nuw6HEjWVrIDxvbW9zbmFjZWsrbGludXgtY3J5cHRvQGdtYWlsLmNvbT4K Q0M6IE1pbGFuIEJyb3ogPGdtYXp5bGFuZEBnbWFpbC5jb20+Ci0tLQoKVGhlIHBhdGNoIHdhcyB0 ZXN0ZWQgb24gYW4gQXJtdjcgYmFzZWQgZHVhbCBjb3JlIFp5bnEgWkM3MDYgZGV2ZWxvcG1lbnQK Ym9hcmQgd2l0aCBTSEEyNTYtYXNtLCBTSEEyNTYtbmVvbiBzeW5jaHJvbm91cyBwcm92aWRlcnMg d2l0aCBubyB2aXNpYmxlCmRlZ3JhZGF0aW9uIG9mIHBlcmZvcm1hbmNlLCB3aXRoIGNyeXB0ZCBi YXNlZCBhc3luY2hyb25vdXMgdmVyc2lvbnMgb2YgdGhlIApzYW1lIGFuZCB3aXRoIGFuIG9mZiB0 cmVlIEFybSBDcnlwdG9DZWxsIGFzeW5jaHJvbm91cyBwcm92aWRlci4KCkNoYW5nZXMgZnJvbSB2 MjoKCi0gVXNlIGNvbXBsZXRpb24gdG8gcG90ZW50aWFsbHkgd2FpdCBhbHNvIG9uIGNyeXB0b19h aGFzaF9pbml0KCkgYXMgaXQKICBtYXkgZmluaXNoIGFzeW5jaHJvbm91c2x5IGFzIHdlbGwgaW4g c29tZSBkcml2ZXJzLCBzdWNoIGFzIGNyeXB0ZCwgYXMKICBkaXNjb3ZlcmVkIGJ5IE1pbGFuIEJy b3ouCi0gVXNlIHNnX2luaXRfb25lKCkgd2hlcmUgYXByb3ByaWF0ZSBhcyBwb2ludGVkIG91dCBi eSBNaWxhbiBCcm96LgoKQ2hhbmdlcyBmcm9tIHYxOgoKLSBVc2UgYSAwIG1hc2sgdG8gYWxsb2Nh dGUgY3J5cHRvIGFsZyBpbmRpY2F0aW5nIHdlIHdlbGNvbWUgYXN5bmMgYWxnbyAKICBwcm92aWRl cnMsIGFzIHN1Z2dlc3RlZCBieSBPbmRyZWogTW9zbsOhxI1lay4KLSBGaXggdXNlIG9mIHVuLWlu aXRpYWxpemVkIGNvbXBsZXRpb24gd2hlbiB1c2luZyBhc3luYyBwcm92aWRlciBmb3IgSU8KICBi bG9ja3MgaGFzaGluZwotIFBhc3MgZmxhZyBpbmRpY2F0aW5nIHdlIGFyZSBPSyB3aXRoIGNyeXB0 byBwcm92aWRlciBiYWNrbG9nCi0gUmUtZmFjdG9yIGNoZWNraW5nIGZvciBuZWVkIHRvIHdhaXQg aW50byBhIGNvbW1vbiBmdW5jdGlvbgoKIGRyaXZlcnMvbWQvZG0tdmVyaXR5LWZlYy5jICAgIHwg ICA0ICstCiBkcml2ZXJzL21kL2RtLXZlcml0eS10YXJnZXQuYyB8IDIwMiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvbWQvZG0tdmVyaXR5LmggICAg ICAgIHwgIDIzICsrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA3MSBk ZWxldGlvbnMoLSkKCgogZHJpdmVycy9tZC9kbS12ZXJpdHktZmVjLmMgICAgfCAgIDQgKy0KIGRy aXZlcnMvbWQvZG0tdmVyaXR5LXRhcmdldC5jIHwgMjAxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLQogZHJpdmVycy9tZC9kbS12ZXJpdHkuaCAgICAgICAgfCAgMjMg KysrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTU3IGluc2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdmVyaXR5LWZlYy5jIGIvZHJpdmVycy9tZC9k bS12ZXJpdHktZmVjLmMKaW5kZXggMGYwZWI4YS4uZGFiOThmZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9tZC9kbS12ZXJpdHktZmVjLmMKKysrIGIvZHJpdmVycy9tZC9kbS12ZXJpdHktZmVjLmMKQEAg LTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgaW50IGZlY19kZWNvZGVfYnVmcyhzdHJ1Y3QgZG1fdmVy aXR5ICp2LCBzdHJ1Y3QgZG1fdmVyaXR5X2ZlY19pbyAqZmlvLAogc3RhdGljIGludCBmZWNfaXNf ZXJhc3VyZShzdHJ1Y3QgZG1fdmVyaXR5ICp2LCBzdHJ1Y3QgZG1fdmVyaXR5X2lvICppbywKIAkJ CSAgdTggKndhbnRfZGlnZXN0LCB1OCAqZGF0YSkKIHsKLQlpZiAodW5saWtlbHkodmVyaXR5X2hh c2godiwgdmVyaXR5X2lvX2hhc2hfZGVzYyh2LCBpbyksCisJaWYgKHVubGlrZWx5KHZlcml0eV9o YXNoKHYsIHZlcml0eV9pb19oYXNoX3JlcSh2LCBpbyksCiAJCQkJIGRhdGEsIDEgPDwgdi0+ZGF0 YV9kZXZfYmxvY2tfYml0cywKIAkJCQkgdmVyaXR5X2lvX3JlYWxfZGlnZXN0KHYsIGlvKSkpKQog CQlyZXR1cm4gMDsKQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgaW50IGZlY19kZWNvZGVfcnNi KHN0cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBkbV92ZXJpdHlfaW8gKmlvLAogCX0KIAogCS8q IEFsd2F5cyByZS12YWxpZGF0ZSB0aGUgY29ycmVjdGVkIGJsb2NrIGFnYWluc3QgdGhlIGV4cGVj dGVkIGhhc2ggKi8KLQlyID0gdmVyaXR5X2hhc2godiwgdmVyaXR5X2lvX2hhc2hfZGVzYyh2LCBp byksIGZpby0+b3V0cHV0LAorCXIgPSB2ZXJpdHlfaGFzaCh2LCB2ZXJpdHlfaW9faGFzaF9yZXEo diwgaW8pLCBmaW8tPm91dHB1dCwKIAkJCTEgPDwgdi0+ZGF0YV9kZXZfYmxvY2tfYml0cywKIAkJ CXZlcml0eV9pb19yZWFsX2RpZ2VzdCh2LCBpbykpOwogCWlmICh1bmxpa2VseShyIDwgMCkpCmRp ZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXZlcml0eS10YXJnZXQuYyBiL2RyaXZlcnMvbWQvZG0t dmVyaXR5LXRhcmdldC5jCmluZGV4IDczMzVkOGEuLjk3ZGU5NjEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbWQvZG0tdmVyaXR5LXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdmVyaXR5LXRhcmdl dC5jCkBAIC05Myw4MSArOTMsMTIzIEBAIHN0YXRpYyBzZWN0b3JfdCB2ZXJpdHlfcG9zaXRpb25f YXRfbGV2ZWwoc3RydWN0IGRtX3Zlcml0eSAqdiwgc2VjdG9yX3QgYmxvY2ssCiB9CiAKIC8qCi0g KiBXcmFwcGVyIGZvciBjcnlwdG9fc2hhc2hfaW5pdCwgd2hpY2ggaGFuZGxlcyB2ZXJpdHkgc2Fs dGluZy4KKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBhc3luY2hybm91cyBjcnlwdG8gQVBJIGNv bXBsZXRpb24gbm90aWZpY2F0aW9uCiAgKi8KLXN0YXRpYyBpbnQgdmVyaXR5X2hhc2hfaW5pdChz dHJ1Y3QgZG1fdmVyaXR5ICp2LCBzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKK3N0YXRpYyB2b2lk IHZlcml0eV9vcF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYmFzZSwgaW50IGVy cikKIHsKLQlpbnQgcjsKKwlzdHJ1Y3QgdmVyaXR5X3Jlc3VsdCAqcmVzID0gKHN0cnVjdCB2ZXJp dHlfcmVzdWx0ICopYmFzZS0+ZGF0YTsKIAotCWRlc2MtPnRmbSA9IHYtPnRmbTsKLQlkZXNjLT5m bGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVT UykKKwkJcmV0dXJuOwogCi0JciA9IGNyeXB0b19zaGFzaF9pbml0KGRlc2MpOworCXJlcy0+ZXJy ID0gZXJyOworCWNvbXBsZXRlKCZyZXMtPmNvbXBsZXRpb24pOworfQogCi0JaWYgKHVubGlrZWx5 KHIgPCAwKSkgewotCQlETUVSUigiY3J5cHRvX3NoYXNoX2luaXQgZmFpbGVkOiAlZCIsIHIpOwot CQlyZXR1cm4gcjsKLQl9CisvKgorICogV2FpdCBmb3IgYXN5bmMgY3J5cHRvIEFQSSBjYWxsYmFj aworICovCitzdGF0aWMgaW5saW5lIGludCB2ZXJpdHlfY29tcGxldGVfb3Aoc3RydWN0IHZlcml0 eV9yZXN1bHQgKnJlcywgaW50IHJldCkKK3sKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDoKKwkJ YnJlYWs7CiAKLQlpZiAobGlrZWx5KHYtPnZlcnNpb24gPj0gMSkpIHsKLQkJciA9IGNyeXB0b19z aGFzaF91cGRhdGUoZGVzYywgdi0+c2FsdCwgdi0+c2FsdF9zaXplKTsKKwljYXNlIC1FSU5QUk9H UkVTUzoKKwljYXNlIC1FQlVTWToKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1 cHRpYmxlKCZyZXMtPmNvbXBsZXRpb24pOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlcy0+ZXJy OworCQlyZWluaXRfY29tcGxldGlvbigmcmVzLT5jb21wbGV0aW9uKTsKKwkJYnJlYWs7CiAKLQkJ aWYgKHVubGlrZWx5KHIgPCAwKSkgewotCQkJRE1FUlIoImNyeXB0b19zaGFzaF91cGRhdGUgZmFp bGVkOiAlZCIsIHIpOwotCQkJcmV0dXJuIHI7Ci0JCX0KKwlkZWZhdWx0OgorCQlETUVSUigidmVy aXR5X3dhaXRfaGFzaDogY3J5cHRvIG9wIHN1Ym1pc3Npb24gZmFpbGVkOiAlZCIsIHJldCk7CiAJ fQogCi0JcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlETUVSUigidmVyaXR5 X3dhaXRfaGFzaDogY3J5cHRvIG9wIGZhaWxlZDogJWQiLCByZXQpOworCisJcmV0dXJuIHJldDsK IH0KIAotc3RhdGljIGludCB2ZXJpdHlfaGFzaF91cGRhdGUoc3RydWN0IGRtX3Zlcml0eSAqdiwg c3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCi0JCQkgICAgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90 IGxlbikKK3N0YXRpYyBpbnQgdmVyaXR5X2hhc2hfdXBkYXRlKHN0cnVjdCBkbV92ZXJpdHkgKnYs IHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsCisJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBs ZW4sCisJCQkJc3RydWN0IHZlcml0eV9yZXN1bHQgKnJlcykKIHsKLQlpbnQgciA9IGNyeXB0b19z aGFzaF91cGRhdGUoZGVzYywgZGF0YSwgbGVuKTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAK LQlpZiAodW5saWtlbHkociA8IDApKQotCQlETUVSUigiY3J5cHRvX3NoYXNoX3VwZGF0ZSBmYWls ZWQ6ICVkIiwgcik7CisJc2dfaW5pdF9vbmUoJnNnLCBkYXRhLCBsZW4pOworCWFoYXNoX3JlcXVl c3Rfc2V0X2NyeXB0KHJlcSwgJnNnLCBOVUxMLCBsZW4pOworCisJcmV0dXJuIHZlcml0eV9jb21w bGV0ZV9vcChyZXMsIGNyeXB0b19haGFzaF91cGRhdGUocmVxKSk7Cit9CisKKy8qCisgKiBXcmFw cGVyIGZvciBjcnlwdG9fYWhhc2hfaW5pdCwgd2hpY2ggaGFuZGxlcyB2ZXJpdHkgc2FsdGluZy4K KyAqLworc3RhdGljIGludCB2ZXJpdHlfaGFzaF9pbml0KHN0cnVjdCBkbV92ZXJpdHkgKnYsIHN0 cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsCisJCQkJc3RydWN0IHZlcml0eV9yZXN1bHQgKnJlcykK K3sKKwlpbnQgcjsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbShyZXEsIHYtPnRmbSk7CisJYWhh c2hfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAgfAor CQkJCQlDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKKwkJCQkJdmVyaXR5X29wX2RvbmUsICh2 b2lkICopcmVzKTsKKwlpbml0X2NvbXBsZXRpb24oJnJlcy0+Y29tcGxldGlvbik7CisKKwlyID0g dmVyaXR5X2NvbXBsZXRlX29wKHJlcywgY3J5cHRvX2FoYXNoX2luaXQocmVxKSk7CisKKwlpZiAo dW5saWtlbHkociA8IDApKSB7CisJCURNRVJSKCJjcnlwdG9fYWhhc2hfaW5pdCBmYWlsZWQ6ICVk Iiwgcik7CisJCXJldHVybiByOworCX0KKworCWlmIChsaWtlbHkodi0+dmVyc2lvbiA+PSAxKSkK KwkJciA9IHZlcml0eV9oYXNoX3VwZGF0ZSh2LCByZXEsIHYtPnNhbHQsIHYtPnNhbHRfc2l6ZSwg cmVzKTsKIAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IHZlcml0eV9oYXNoX2ZpbmFsKHN0 cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLAotCQkJICAgICB1OCAq ZGlnZXN0KQorc3RhdGljIGludCB2ZXJpdHlfaGFzaF9maW5hbChzdHJ1Y3QgZG1fdmVyaXR5ICp2 LCBzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLAorCQkJICAgICB1OCAqZGlnZXN0LCBzdHJ1Y3Qg dmVyaXR5X3Jlc3VsdCAqcmVzKQogewogCWludCByOwogCiAJaWYgKHVubGlrZWx5KCF2LT52ZXJz aW9uKSkgewotCQlyID0gY3J5cHRvX3NoYXNoX3VwZGF0ZShkZXNjLCB2LT5zYWx0LCB2LT5zYWx0 X3NpemUpOworCQlyID0gdmVyaXR5X2hhc2hfdXBkYXRlKHYsIHJlcSwgdi0+c2FsdCwgdi0+c2Fs dF9zaXplLCByZXMpOwogCiAJCWlmIChyIDwgMCkgewotCQkJRE1FUlIoImNyeXB0b19zaGFzaF91 cGRhdGUgZmFpbGVkOiAlZCIsIHIpOwotCQkJcmV0dXJuIHI7CisJCQlETUVSUigidmVyaXR5X2hh c2hfZmluYWwgZmFpbGVkIHVwZGF0aW5nIHNhbHQ6ICVkIiwgcik7CisJCQlnb3RvIG91dDsKIAkJ fQogCX0KIAotCXIgPSBjcnlwdG9fc2hhc2hfZmluYWwoZGVzYywgZGlnZXN0KTsKLQotCWlmICh1 bmxpa2VseShyIDwgMCkpCi0JCURNRVJSKCJjcnlwdG9fc2hhc2hfZmluYWwgZmFpbGVkOiAlZCIs IHIpOwotCisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBOVUxMLCBkaWdlc3QsIDApOwor CXIgPSB2ZXJpdHlfY29tcGxldGVfb3AocmVzLCBjcnlwdG9fYWhhc2hfZmluYWwocmVxKSk7Citv dXQ6CiAJcmV0dXJuIHI7CiB9CiAKLWludCB2ZXJpdHlfaGFzaChzdHJ1Y3QgZG1fdmVyaXR5ICp2 LCBzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKK2ludCB2ZXJpdHlfaGFzaChzdHJ1Y3QgZG1fdmVy aXR5ICp2LCBzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLAogCQljb25zdCB1OCAqZGF0YSwgc2l6 ZV90IGxlbiwgdTggKmRpZ2VzdCkKIHsKIAlpbnQgcjsKKwlzdHJ1Y3QgdmVyaXR5X3Jlc3VsdCBy ZXM7CiAKLQlyID0gdmVyaXR5X2hhc2hfaW5pdCh2LCBkZXNjKTsKKwlyID0gdmVyaXR5X2hhc2hf aW5pdCh2LCByZXEsICZyZXMpOwogCWlmICh1bmxpa2VseShyIDwgMCkpCi0JCXJldHVybiByOwor CQlnb3RvIG91dDsKIAotCXIgPSB2ZXJpdHlfaGFzaF91cGRhdGUodiwgZGVzYywgZGF0YSwgbGVu KTsKKwlyID0gdmVyaXR5X2hhc2hfdXBkYXRlKHYsIHJlcSwgZGF0YSwgbGVuLCAmcmVzKTsKIAlp ZiAodW5saWtlbHkociA8IDApKQotCQlyZXR1cm4gcjsKKwkJZ290byBvdXQ7CisKKwlyID0gdmVy aXR5X2hhc2hfZmluYWwodiwgcmVxLCBkaWdlc3QsICZyZXMpOwogCi0JcmV0dXJuIHZlcml0eV9o YXNoX2ZpbmFsKHYsIGRlc2MsIGRpZ2VzdCk7CitvdXQ6CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRp YyB2b2lkIHZlcml0eV9oYXNoX2F0X2xldmVsKHN0cnVjdCBkbV92ZXJpdHkgKnYsIHNlY3Rvcl90 IGJsb2NrLCBpbnQgbGV2ZWwsCkBAIC0yNzUsNyArMzE3LDcgQEAgc3RhdGljIGludCB2ZXJpdHlf dmVyaWZ5X2xldmVsKHN0cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBkbV92ZXJpdHlfaW8gKmlv LAogCQkJZ290byByZWxlYXNlX3JldF9yOwogCQl9CiAKLQkJciA9IHZlcml0eV9oYXNoKHYsIHZl cml0eV9pb19oYXNoX2Rlc2ModiwgaW8pLAorCQlyID0gdmVyaXR5X2hhc2godiwgdmVyaXR5X2lv X2hhc2hfcmVxKHYsIGlvKSwKIAkJCQlkYXRhLCAxIDw8IHYtPmhhc2hfZGV2X2Jsb2NrX2JpdHMs CiAJCQkJdmVyaXR5X2lvX3JlYWxfZGlnZXN0KHYsIGlvKSk7CiAJCWlmICh1bmxpa2VseShyIDwg MCkpCkBAIC0zNDQsNiArMzg2LDQ5IEBAIGludCB2ZXJpdHlfaGFzaF9mb3JfYmxvY2soc3RydWN0 IGRtX3Zlcml0eSAqdiwgc3RydWN0IGRtX3Zlcml0eV9pbyAqaW8sCiB9CiAKIC8qCisgKiBDYWxj dWxhdGVzIHRoZSBkaWdlc3QgZm9yIHRoZSBnaXZlbiBiaW8KKyAqLworaW50IHZlcml0eV9mb3Jf aW9fYmxvY2soc3RydWN0IGRtX3Zlcml0eSAqdiwgc3RydWN0IGRtX3Zlcml0eV9pbyAqaW8sCisJ CQlzdHJ1Y3QgYnZlY19pdGVyICppdGVyLCBzdHJ1Y3QgdmVyaXR5X3Jlc3VsdCAqcmVzKQorewor CXVuc2lnbmVkIGludCB0b2RvID0gMSA8PCB2LT5kYXRhX2Rldl9ibG9ja19iaXRzOworCXN0cnVj dCBiaW8gKmJpbyA9IGRtX2Jpb19mcm9tX3Blcl9iaW9fZGF0YShpbywgdi0+dGktPnBlcl9pb19k YXRhX3NpemUpOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVz dCAqcmVxID0gdmVyaXR5X2lvX2hhc2hfcmVxKHYsIGlvKTsKKworCWRvIHsKKwkJaW50IHI7CisJ CXVuc2lnbmVkIGludCBsZW47CisJCXN0cnVjdCBiaW9fdmVjIGJ2ID0gYmlvX2l0ZXJfaW92ZWMo YmlvLCAqaXRlcik7CisKKwkJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCisJCWxlbiA9IGJ2LmJ2 X2xlbjsKKworCQlpZiAobGlrZWx5KGxlbiA+PSB0b2RvKSkKKwkJCWxlbiA9IHRvZG87CisJCS8q CisJCSAqIE9wZXJhdGluZyBvbiBhIHNpbmdsZSBwYWdlIGF0IGEgdGltZSBsb29rcyBzdWJvcHRp bWFsCisJCSAqIHVudGlsIHlvdSBjb25zaWRlciB0aGUgdHlwaWNhbCBibG9jayBzaXplIGlzIDQs MDk2Qi4KKwkJICogR29pbmcgdGhyb3VnaCB0aGlzIGxvb3BzIHR3aWNlIHNob3VsZCBiZSB2ZXJ5 IHJhcmUuCisJCSAqLworCQlzZ19zZXRfcGFnZSgmc2csIGJ2LmJ2X3BhZ2UsIGxlbiwgYnYuYnZf b2Zmc2V0KTsKKwkJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCAmc2csIE5VTEwsIGxlbik7 CisJCXIgPSB2ZXJpdHlfY29tcGxldGVfb3AocmVzLCBjcnlwdG9fYWhhc2hfdXBkYXRlKHJlcSkp OworCisJCWlmICh1bmxpa2VseShyIDwgMCkpIHsKKwkJCURNRVJSKCJ2ZXJpdHlfZm9yX2lvX2Js b2NrIGNyeXB0byBvcCBmYWlsZWQ6ICVkIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCisJCWJp b19hZHZhbmNlX2l0ZXIoYmlvLCBpdGVyLCBsZW4pOworCQl0b2RvIC09IGxlbjsKKwl9IHdoaWxl ICh0b2RvKTsKKworCXJldHVybiAwOworfQorCisvKgogICogQ2FsbHMgZnVuY3Rpb24gcHJvY2Vz cyBmb3IgMSA8PCB2LT5kYXRhX2Rldl9ibG9ja19iaXRzIGJ5dGVzIGluIHRoZSBiaW9fdmVjCiAg KiBzdGFydGluZyBmcm9tIGl0ZXIuCiAgKi8KQEAgLTM4MSwxMiArNDY2LDYgQEAgaW50IHZlcml0 eV9mb3JfYnZfYmxvY2soc3RydWN0IGRtX3Zlcml0eSAqdiwgc3RydWN0IGRtX3Zlcml0eV9pbyAq aW8sCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaXR5X2J2X2hhc2hfdXBkYXRlKHN0 cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBkbV92ZXJpdHlfaW8gKmlvLAotCQkJCSB1OCAqZGF0 YSwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gdmVyaXR5X2hhc2hfdXBkYXRlKHYsIHZlcml0eV9p b19oYXNoX2Rlc2ModiwgaW8pLCBkYXRhLCBsZW4pOwotfQotCiBzdGF0aWMgaW50IHZlcml0eV9i dl96ZXJvKHN0cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBkbV92ZXJpdHlfaW8gKmlvLAogCQkJ ICB1OCAqZGF0YSwgc2l6ZV90IGxlbikKIHsKQEAgLTQwMywxMCArNDgyLDExIEBAIHN0YXRpYyBp bnQgdmVyaXR5X3ZlcmlmeV9pbyhzdHJ1Y3QgZG1fdmVyaXR5X2lvICppbykKIAlzdHJ1Y3QgZG1f dmVyaXR5ICp2ID0gaW8tPnY7CiAJc3RydWN0IGJ2ZWNfaXRlciBzdGFydDsKIAl1bnNpZ25lZCBi OworCXN0cnVjdCB2ZXJpdHlfcmVzdWx0IHJlczsKIAogCWZvciAoYiA9IDA7IGIgPCBpby0+bl9i bG9ja3M7IGIrKykgewogCQlpbnQgcjsKLQkJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSB2ZXJp dHlfaW9faGFzaF9kZXNjKHYsIGlvKTsKKwkJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSA9IHZl cml0eV9pb19oYXNoX3JlcSh2LCBpbyk7CiAKIAkJciA9IHZlcml0eV9oYXNoX2Zvcl9ibG9jayh2 LCBpbywgaW8tPmJsb2NrICsgYiwKIAkJCQkJICB2ZXJpdHlfaW9fd2FudF9kaWdlc3QodiwgaW8p LApAQCAtNDI3LDE2ICs1MDcsMTcgQEAgc3RhdGljIGludCB2ZXJpdHlfdmVyaWZ5X2lvKHN0cnVj dCBkbV92ZXJpdHlfaW8gKmlvKQogCQkJY29udGludWU7CiAJCX0KIAotCQlyID0gdmVyaXR5X2hh c2hfaW5pdCh2LCBkZXNjKTsKKwkJciA9IHZlcml0eV9oYXNoX2luaXQodiwgcmVxLCAmcmVzKTsK IAkJaWYgKHVubGlrZWx5KHIgPCAwKSkKIAkJCXJldHVybiByOwogCiAJCXN0YXJ0ID0gaW8tPml0 ZXI7Ci0JCXIgPSB2ZXJpdHlfZm9yX2J2X2Jsb2NrKHYsIGlvLCAmaW8tPml0ZXIsIHZlcml0eV9i dl9oYXNoX3VwZGF0ZSk7CisJCXIgPSB2ZXJpdHlfZm9yX2lvX2Jsb2NrKHYsIGlvLCAmaW8tPml0 ZXIsICZyZXMpOwogCQlpZiAodW5saWtlbHkociA8IDApKQogCQkJcmV0dXJuIHI7CiAKLQkJciA9 IHZlcml0eV9oYXNoX2ZpbmFsKHYsIGRlc2MsIHZlcml0eV9pb19yZWFsX2RpZ2VzdCh2LCBpbykp OworCQlyID0gdmVyaXR5X2hhc2hfZmluYWwodiwgcmVxLCB2ZXJpdHlfaW9fcmVhbF9kaWdlc3Qo diwgaW8pLAorCQkJCQkmcmVzKTsKIAkJaWYgKHVubGlrZWx5KHIgPCAwKSkKIAkJCXJldHVybiBy OwogCkBAIC03MDUsNyArNzg2LDcgQEAgc3RhdGljIHZvaWQgdmVyaXR5X2R0cihzdHJ1Y3QgZG1f dGFyZ2V0ICp0aSkKIAlrZnJlZSh2LT56ZXJvX2RpZ2VzdCk7CiAKIAlpZiAodi0+dGZtKQotCQlj cnlwdG9fZnJlZV9zaGFzaCh2LT50Zm0pOworCQljcnlwdG9fZnJlZV9haGFzaCh2LT50Zm0pOwog CiAJa2ZyZWUodi0+YWxnX25hbWUpOwogCkBAIC03MjMsNyArODA0LDcgQEAgc3RhdGljIHZvaWQg dmVyaXR5X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHN0YXRpYyBpbnQgdmVyaXR5X2FsbG9j X3plcm9fZGlnZXN0KHN0cnVjdCBkbV92ZXJpdHkgKnYpCiB7CiAJaW50IHIgPSAtRU5PTUVNOwot CXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXE7CiAJ dTggKnplcm9fZGF0YTsKIAogCXYtPnplcm9fZGlnZXN0ID0ga21hbGxvYyh2LT5kaWdlc3Rfc2l6 ZSwgR0ZQX0tFUk5FTCk7CkBAIC03MzEsOSArODEyLDkgQEAgc3RhdGljIGludCB2ZXJpdHlfYWxs b2NfemVyb19kaWdlc3Qoc3RydWN0IGRtX3Zlcml0eSAqdikKIAlpZiAoIXYtPnplcm9fZGlnZXN0 KQogCQlyZXR1cm4gcjsKIAotCWRlc2MgPSBrbWFsbG9jKHYtPnNoYXNoX2Rlc2NzaXplLCBHRlBf S0VSTkVMKTsKKwlyZXEgPSBrbWFsbG9jKHYtPmFoYXNoX3JlcXNpemUsIEdGUF9LRVJORUwpOwog Ci0JaWYgKCFkZXNjKQorCWlmICghcmVxKQogCQlyZXR1cm4gcjsgLyogdmVyaXR5X2R0ciB3aWxs IGZyZWUgemVyb19kaWdlc3QgKi8KIAogCXplcm9fZGF0YSA9IGt6YWxsb2MoMSA8PCB2LT5kYXRh X2Rldl9ibG9ja19iaXRzLCBHRlBfS0VSTkVMKTsKQEAgLTc0MSwxMSArODIyLDExIEBAIHN0YXRp YyBpbnQgdmVyaXR5X2FsbG9jX3plcm9fZGlnZXN0KHN0cnVjdCBkbV92ZXJpdHkgKnYpCiAJaWYg KCF6ZXJvX2RhdGEpCiAJCWdvdG8gb3V0OwogCi0JciA9IHZlcml0eV9oYXNoKHYsIGRlc2MsIHpl cm9fZGF0YSwgMSA8PCB2LT5kYXRhX2Rldl9ibG9ja19iaXRzLAorCXIgPSB2ZXJpdHlfaGFzaCh2 LCByZXEsIHplcm9fZGF0YSwgMSA8PCB2LT5kYXRhX2Rldl9ibG9ja19iaXRzLAogCQkJdi0+emVy b19kaWdlc3QpOwogCiBvdXQ6Ci0Ja2ZyZWUoZGVzYyk7CisJa2ZyZWUocmVxKTsKIAlrZnJlZSh6 ZXJvX2RhdGEpOwogCiAJcmV0dXJuIHI7CkBAIC05MjMsMjEgKzEwMDQsMjEgQEAgc3RhdGljIGlu dCB2ZXJpdHlfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBhcmdjLCBjaGFyICoq YXJndikKIAkJZ290byBiYWQ7CiAJfQogCi0Jdi0+dGZtID0gY3J5cHRvX2FsbG9jX3NoYXNoKHYt PmFsZ19uYW1lLCAwLCAwKTsKKwl2LT50Zm0gPSBjcnlwdG9fYWxsb2NfYWhhc2godi0+YWxnX25h bWUsIDAsIDApOwogCWlmIChJU19FUlIodi0+dGZtKSkgewogCQl0aS0+ZXJyb3IgPSAiQ2Fubm90 IGluaXRpYWxpemUgaGFzaCBmdW5jdGlvbiI7CiAJCXIgPSBQVFJfRVJSKHYtPnRmbSk7CiAJCXYt PnRmbSA9IE5VTEw7CiAJCWdvdG8gYmFkOwogCX0KLQl2LT5kaWdlc3Rfc2l6ZSA9IGNyeXB0b19z aGFzaF9kaWdlc3RzaXplKHYtPnRmbSk7CisJdi0+ZGlnZXN0X3NpemUgPSBjcnlwdG9fYWhhc2hf ZGlnZXN0c2l6ZSh2LT50Zm0pOwogCWlmICgoMSA8PCB2LT5oYXNoX2Rldl9ibG9ja19iaXRzKSA8 IHYtPmRpZ2VzdF9zaXplICogMikgewogCQl0aS0+ZXJyb3IgPSAiRGlnZXN0IHNpemUgdG9vIGJp ZyI7CiAJCXIgPSAtRUlOVkFMOwogCQlnb3RvIGJhZDsKIAl9Ci0Jdi0+c2hhc2hfZGVzY3NpemUg PQotCQlzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKHYt PnRmbSk7CisJdi0+YWhhc2hfcmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWhhc2hfcmVxdWVzdCkg KworCQljcnlwdG9fYWhhc2hfcmVxc2l6ZSh2LT50Zm0pOwogCiAJdi0+cm9vdF9kaWdlc3QgPSBr bWFsbG9jKHYtPmRpZ2VzdF9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXYtPnJvb3RfZGlnZXN0 KSB7CkBAIC0xMDM3LDcgKzExMTgsNyBAQCBzdGF0aWMgaW50IHZlcml0eV9jdHIoc3RydWN0IGRt X3RhcmdldCAqdGksIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCXRpLT5wZXJf aW9fZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkbV92ZXJpdHlfaW8pICsKLQkJCQl2LT5zaGFz aF9kZXNjc2l6ZSArIHYtPmRpZ2VzdF9zaXplICogMjsKKwkJCQl2LT5haGFzaF9yZXFzaXplICsg di0+ZGlnZXN0X3NpemUgKiAyOwogCiAJciA9IHZlcml0eV9mZWNfY3RyKHYpOwogCWlmIChyKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS12ZXJpdHkuaCBiL2RyaXZlcnMvbWQvZG0tdmVyaXR5 LmgKaW5kZXggZmI0MTlmNC4uYTU5ZTBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS12ZXJp dHkuaAorKysgYi9kcml2ZXJzL21kL2RtLXZlcml0eS5oCkBAIC0zNyw3ICszNyw3IEBAIHN0cnVj dCBkbV92ZXJpdHkgewogCXN0cnVjdCBkbV90YXJnZXQgKnRpOwogCXN0cnVjdCBkbV9idWZpb19j bGllbnQgKmJ1ZmlvOwogCWNoYXIgKmFsZ19uYW1lOwotCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRm bTsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm07CiAJdTggKnJvb3RfZGlnZXN0OwkvKiBkaWdl c3Qgb2YgdGhlIHJvb3QgYmxvY2sgKi8KIAl1OCAqc2FsdDsJCS8qIHNhbHQ6IGl0cyBzaXplIGlz IHNhbHRfc2l6ZSAqLwogCXU4ICp6ZXJvX2RpZ2VzdDsJLyogZGlnZXN0IGZvciBhIHplcm8gYmxv Y2sgKi8KQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IGRtX3Zlcml0eSB7CiAJdW5zaWduZWQgY2hh ciBsZXZlbHM7CS8qIHRoZSBudW1iZXIgb2YgdHJlZSBsZXZlbHMgKi8KIAl1bnNpZ25lZCBjaGFy IHZlcnNpb247CiAJdW5zaWduZWQgZGlnZXN0X3NpemU7CS8qIGRpZ2VzdCBzaXplIGZvciB0aGUg Y3VycmVudCBoYXNoIGFsZ29yaXRobSAqLwotCXVuc2lnbmVkIHNoYXNoX2Rlc2NzaXplOy8qIHRo ZSBzaXplIG9mIHRlbXBvcmFyeSBzcGFjZSBmb3IgY3J5cHRvICovCisJdW5zaWduZWQgaW50IGFo YXNoX3JlcXNpemU7LyogdGhlIHNpemUgb2YgdGVtcG9yYXJ5IHNwYWNlIGZvciBjcnlwdG8gKi8K IAlpbnQgaGFzaF9mYWlsZWQ7CS8qIHNldCB0byAxIGlmIGhhc2ggb2YgYW55IGJsb2NrIGZhaWxl ZCAqLwogCWVudW0gdmVyaXR5X21vZGUgbW9kZTsJLyogbW9kZSBmb3IgaGFuZGxpbmcgdmVyaWZp Y2F0aW9uIGVycm9ycyAqLwogCXVuc2lnbmVkIGNvcnJ1cHRlZF9lcnJzOy8qIE51bWJlciBvZiBl cnJvcnMgZm9yIGNvcnJ1cHRlZCBibG9ja3MgKi8KQEAgLTgxLDMxICs4MSwzNiBAQCBzdHJ1Y3Qg ZG1fdmVyaXR5X2lvIHsKIAkvKgogCSAqIFRocmVlIHZhcmlhYmx5LXNpemUgZmllbGRzIGZvbGxv dyB0aGlzIHN0cnVjdDoKIAkgKgotCSAqIHU4IGhhc2hfZGVzY1t2LT5zaGFzaF9kZXNjc2l6ZV07 CisJICogdTggaGFzaF9yZXFbdi0+YWhhc2hfcmVxc2l6ZV07CiAJICogdTggcmVhbF9kaWdlc3Rb di0+ZGlnZXN0X3NpemVdOwogCSAqIHU4IHdhbnRfZGlnZXN0W3YtPmRpZ2VzdF9zaXplXTsKIAkg KgotCSAqIFRvIGFjY2VzcyB0aGVtIHVzZTogdmVyaXR5X2lvX2hhc2hfZGVzYygpLCB2ZXJpdHlf aW9fcmVhbF9kaWdlc3QoKQorCSAqIFRvIGFjY2VzcyB0aGVtIHVzZTogdmVyaXR5X2lvX2hhc2hf cmVxKCksIHZlcml0eV9pb19yZWFsX2RpZ2VzdCgpCiAJICogYW5kIHZlcml0eV9pb193YW50X2Rp Z2VzdCgpLgogCSAqLwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hhc2hfZGVzYyAqdmVy aXR5X2lvX2hhc2hfZGVzYyhzdHJ1Y3QgZG1fdmVyaXR5ICp2LAorc3RydWN0IHZlcml0eV9yZXN1 bHQgeworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CisJaW50IGVycjsKK307CisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGFoYXNoX3JlcXVlc3QgKnZlcml0eV9pb19oYXNoX3JlcShzdHJ1 Y3QgZG1fdmVyaXR5ICp2LAogCQkJCQkJICAgICBzdHJ1Y3QgZG1fdmVyaXR5X2lvICppbykKIHsK LQlyZXR1cm4gKHN0cnVjdCBzaGFzaF9kZXNjICopKGlvICsgMSk7CisJcmV0dXJuIChzdHJ1Y3Qg YWhhc2hfcmVxdWVzdCAqKShpbyArIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHU4ICp2ZXJpdHlf aW9fcmVhbF9kaWdlc3Qoc3RydWN0IGRtX3Zlcml0eSAqdiwKIAkJCQkJc3RydWN0IGRtX3Zlcml0 eV9pbyAqaW8pCiB7Ci0JcmV0dXJuICh1OCAqKShpbyArIDEpICsgdi0+c2hhc2hfZGVzY3NpemU7 CisJcmV0dXJuICh1OCAqKShpbyArIDEpICsgdi0+YWhhc2hfcmVxc2l6ZTsKIH0KIAogc3RhdGlj IGlubGluZSB1OCAqdmVyaXR5X2lvX3dhbnRfZGlnZXN0KHN0cnVjdCBkbV92ZXJpdHkgKnYsCiAJ CQkJCXN0cnVjdCBkbV92ZXJpdHlfaW8gKmlvKQogewotCXJldHVybiAodTggKikoaW8gKyAxKSAr IHYtPnNoYXNoX2Rlc2NzaXplICsgdi0+ZGlnZXN0X3NpemU7CisJcmV0dXJuICh1OCAqKShpbyAr IDEpICsgdi0+YWhhc2hfcmVxc2l6ZSArIHYtPmRpZ2VzdF9zaXplOwogfQogCiBzdGF0aWMgaW5s aW5lIHU4ICp2ZXJpdHlfaW9fZGlnZXN0X2VuZChzdHJ1Y3QgZG1fdmVyaXR5ICp2LApAQCAtMTIw LDcgKzEyNSw3IEBAIGV4dGVybiBpbnQgdmVyaXR5X2Zvcl9idl9ibG9jayhzdHJ1Y3QgZG1fdmVy aXR5ICp2LCBzdHJ1Y3QgZG1fdmVyaXR5X2lvICppbywKIAkJCQkJICAgICAgc3RydWN0IGRtX3Zl cml0eV9pbyAqaW8sCiAJCQkJCSAgICAgIHU4ICpkYXRhLCBzaXplX3QgbGVuKSk7CiAKLWV4dGVy biBpbnQgdmVyaXR5X2hhc2goc3RydWN0IGRtX3Zlcml0eSAqdiwgc3RydWN0IHNoYXNoX2Rlc2Mg KmRlc2MsCitleHRlcm4gaW50IHZlcml0eV9oYXNoKHN0cnVjdCBkbV92ZXJpdHkgKnYsIHN0cnVj dCBhaGFzaF9yZXF1ZXN0ICpyZXEsCiAJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxl biwgdTggKmRpZ2VzdCk7CiAKIGV4dGVybiBpbnQgdmVyaXR5X2hhc2hfZm9yX2Jsb2NrKHN0cnVj dCBkbV92ZXJpdHkgKnYsIHN0cnVjdCBkbV92ZXJpdHlfaW8gKmlvLAotLSAKMi4xLjQKCi0tCmRt LWRldmVsIG1haWxpbmcgbGlzdApkbS1kZXZlbEByZWRoYXQuY29tCmh0dHBzOi8vd3d3LnJlZGhh dC5jb20vbWFpbG1hbi9saXN0aW5mby9kbS1kZXZlbA==