From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v1 15/34] KVM: introspection: add KVMI_VCPU_SET_EPT_VIEW Date: Wed, 22 Jul 2020 19:01:02 +0300 Message-ID: <20200722160121.9601-16-alazar@bitdefender.com> References: <20200722160121.9601-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20200722160121.9601-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" To: kvm@vger.kernel.org Cc: =?UTF-8?q?Adalbert=20Laz=C4=83r?= , Paolo Bonzini , =?UTF-8?q?=C8=98tefan=20=C8=98icleru?= , virtualization@lists.linux-foundation.org List-Id: virtualization@lists.linuxfoundation.org RnJvbTogyJh0ZWZhbiDImGljbGVydSA8c3NpY2xlcnVAYml0ZGVmZW5kZXIuY29tPgoKVGhlIGlu dHJvc3BlY3Rpb24gdG9vbCB1c2VzIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGhhcmR3YXJl IHN1cHBvcnQKZm9yIEVQVCBzd2l0Y2hpbmcsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNpbmdsZXN0 ZXAgdkNQVXMKb24gYSB1bnByb3RlY3RlZCBFUFQgdmlldy4KClNpZ25lZC1vZmYtYnk6IMiYdGVm YW4gyJhpY2xlcnUgPHNzaWNsZXJ1QGJpdGRlZmVuZGVyLmNvbT4KU2lnbmVkLW9mZi1ieTogQWRh bGJlcnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgotLS0KIERvY3VtZW50YXRpb24v dmlydC9rdm0va3ZtaS5yc3QgICAgICAgICAgICAgICB8IDM2ICsrKysrKysrKysrKysrKysKIGFy Y2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtaS5oICAgICAgICAgICAgICB8ICA2ICsrKwogYXJj aC94ODYva3ZtL2t2bWkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKwogaW5j bHVkZS91YXBpL2xpbnV4L2t2bWkuaCAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogLi4uL3Rl c3Rpbmcvc2VsZnRlc3RzL2t2bS94ODZfNjQva3ZtaV90ZXN0LmMgIHwgNDMgKysrKysrKysrKysr KysrKysrKwogdmlydC9rdm0vaW50cm9zcGVjdGlvbi9rdm1pX2ludC5oICAgICAgICAgICAgIHwg IDYgKysrCiB2aXJ0L2t2bS9pbnRyb3NwZWN0aW9uL2t2bWlfbXNnLmMgICAgICAgICAgICAgfCAy MCArKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTIxIGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2t2bWkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0 L2t2bS9rdm1pLnJzdAppbmRleCA3NmEyZDAxMjVmNzguLjAyZjAzYzYyYWRlZiAxMDA2NDQKLS0t IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9rdm1pLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL3Zp cnQva3ZtL2t2bWkucnN0CkBAIC0xMTU0LDYgKzExNTQsNDIgQEAgYmUgemVyby4KICogLUtWTV9F SU5WQUwgLSB0aGUgcGFkZGluZyBpcyBub3QgemVybwogKiAtS1ZNX0VBR0FJTiAtIHRoZSBzZWxl Y3RlZCB2Q1BVIGNhbid0IGJlIGludHJvc3BlY3RlZCB5ZXQKIAorMjcuIEtWTUlfVkNQVV9TRVRf RVBUX1ZJRVcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpBcmNoaXRlY3R1cmU6IHg4 NgorOlZlcnNpb25zOiA+PSAxCis6UGFyYW1ldGVyczoKKworOjoKKworCXN0cnVjdCBrdm1pX3Zj cHVfaGRyOworCXN0cnVjdCBrdm1pX3ZjcHVfc2V0X2VwdF92aWV3IHsKKwkJX191MTYgdmlldzsK KwkJX191MTYgcGFkZGluZzE7CisJCV9fdTMyIHBhZGRpbmcyOworCX07CisKKzpSZXR1cm5zOgor Cis6OgorCisJc3RydWN0IGt2bWlfZXJyb3JfY29kZTsKKworQ29uZmlndXJlcyB0aGUgdkNQVSB0 byB1c2UgdGhlIHByb3ZpZGVkIGBgdmlld2BgLgorCitCZWZvcmUgc3dpdGNoaW5nIEVQVCB2aWV3 cywgdGhlIGludHJvc3BlY3Rpb24gdG9vbCBzaG91bGQgdXNlCisqS1ZNSV9HRVRfVkVSU0lPTiog dG8gY2hlY2sgaWYgdGhlIGhhcmR3YXJlIGhhcyBzdXBwb3J0IGZvciBWTUZVTkMgYW5kCitFUFRQ IHN3aXRjaGluZyBtZWNoYW5pc20gKHNlZSAqKktWTUlfR0VUX1ZFUlNJT04qKikuCisKKzpFcnJv cnM6CisKKyogLUtWTV9FSU5WQUwgLSB0aGUgc2VsZWN0ZWQgdkNQVSBpcyBpbnZhbGlkCisqIC1L Vk1fRUlOVkFMIC0gcGFkZGluZyBpcyBub3QgemVybworKiAtS1ZNX0VJTlZBTCAtIHRoZSBzZWxl Y3RlZCBFUFQgdmlldyBpcyBpbnZhbGlkCisqIC1LVk1fRUFHQUlOIC0gdGhlIHNlbGVjdGVkIHZD UFUgY2FuJ3QgYmUgaW50cm9zcGVjdGVkIHlldAorKiAtS1ZNX0VPUE5PVFNVUFAgLSBhbiBFUFQg dmlldyB3YXMgc2VsZWN0ZWQgYnV0IHRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgaXQKKwog RXZlbnRzCiA9PT09PT0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9r dm1pLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bWkuaAppbmRleCBhMTNhOThmYTg2 M2YuLmY3YTA4MGQ1ZTIyNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9r dm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1pLmgKQEAgLTE2MCw0ICsx NjAsMTAgQEAgc3RydWN0IGt2bWlfdmNwdV9nZXRfZXB0X3ZpZXdfcmVwbHkgewogCV9fdTMyIHBh ZGRpbmcyOwogfTsKIAorc3RydWN0IGt2bWlfdmNwdV9zZXRfZXB0X3ZpZXcgeworCV9fdTE2IHZp ZXc7CisJX191MTYgcGFkZGluZzE7CisJX191MzIgcGFkZGluZzI7Cit9OworCiAjZW5kaWYgLyog X1VBUElfQVNNX1g4Nl9LVk1JX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1pLmMg Yi9hcmNoL3g4Ni9rdm0va3ZtaS5jCmluZGV4IDI5MjYwNjkwMjMzOC4uOTllYThlZjcwYmUyIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtaS5jCisrKyBiL2FyY2gveDg2L2t2bS9rdm1pLmMK QEAgLTE0MjMsMyArMTQyMywxMiBAQCB1MTYga3ZtaV9hcmNoX2NtZF9nZXRfZXB0X3ZpZXcoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiBrdm1fZ2V0X2VwdF92aWV3KHZjcHUpOwog fQorCitpbnQga3ZtaV9hcmNoX2NtZF9zZXRfZXB0X3ZpZXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LCB1MTYgdmlldykKK3sKKworCWlmICgha3ZtX3g4Nl9vcHMuc2V0X2VwdF92aWV3KQorCQlyZXR1 cm4gLUtWTV9FSU5WQUw7CisKKwlyZXR1cm4ga3ZtX3g4Nl9vcHMuc2V0X2VwdF92aWV3KHZjcHUs IHZpZXcpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaCBiL2luY2x1 ZGUvdWFwaS9saW51eC9rdm1pLmgKaW5kZXggY2YzNDIyZWM2MGE4Li44MjA0NjYxZDk0NGQgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm1pLmgKKysrIGIvaW5jbHVkZS91YXBpL2xp bnV4L2t2bWkuaApAQCAtNTAsNiArNTAsNyBAQCBlbnVtIHsKIAlLVk1JX1ZDUFVfQ09OVFJPTF9T SU5HTEVTVEVQID0gMjQsCiAJS1ZNSV9WQ1BVX1RSQU5TTEFURV9HVkEgICAgICA9IDI1LAogCUtW TUlfVkNQVV9HRVRfRVBUX1ZJRVcgICAgICAgPSAyNiwKKwlLVk1JX1ZDUFVfU0VUX0VQVF9WSUVX ICAgICAgID0gMjcsCiAKIAlLVk1JX05VTV9NRVNTQUdFUwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xz L3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODZfNjQva3ZtaV90ZXN0LmMgYi90b29scy90ZXN0aW5n L3NlbGZ0ZXN0cy9rdm0veDg2XzY0L2t2bWlfdGVzdC5jCmluZGV4IDc0ZWFmYmNhZTE0YS4uYzZm N2QxMDU2M2RiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2XzY0 L2t2bWlfdGVzdC5jCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODZfNjQva3Zt aV90ZXN0LmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlICJsaW51eC9rdm1fcGFyYS5oIgog I2luY2x1ZGUgImxpbnV4L2t2bWkuaCIKIAorI2RlZmluZSBLVk1fTUFYX0VQVF9WSUVXUyAzCisK ICNkZWZpbmUgVkNQVV9JRCAgICAgICAgIDUKIAogI2RlZmluZSBYODZfRkVBVFVSRV9YU0FWRQko MTw8MjYpCkBAIC0yMDk4LDYgKzIxMDAsNDYgQEAgc3RhdGljIHZvaWQgdGVzdF9jbWRfdmNwdV9n ZXRfZXB0X3ZpZXcoc3RydWN0IGt2bV92bSAqdm0pCiAJcHJfaW5mbygiRVBUIHZpZXcgJXVcbiIs IHZpZXcpOwogfQogCitzdGF0aWMgdm9pZCBzZXRfZXB0X3ZpZXcoc3RydWN0IGt2bV92bSAqdm0s IF9fdTE2IHZpZXcpCit7CisJc3RydWN0IHsKKwkJc3RydWN0IGt2bWlfbXNnX2hkciBoZHI7CisJ CXN0cnVjdCBrdm1pX3ZjcHVfaGRyIHZjcHVfaGRyOworCQlzdHJ1Y3Qga3ZtaV92Y3B1X3NldF9l cHRfdmlldyBjbWQ7CisJfSByZXEgPSB7fTsKKworCXJlcS5jbWQudmlldyA9IHZpZXc7CisKKwl0 ZXN0X3ZjcHUwX2NvbW1hbmQodm0sIEtWTUlfVkNQVV9TRVRfRVBUX1ZJRVcsCisJCQkgICAmcmVx Lmhkciwgc2l6ZW9mKHJlcSksIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2NtZF92 Y3B1X3NldF9lcHRfdmlldyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKK3sKKwlfX3UxNiBvbGRfdmlldzsK KwlfX3UxNiBuZXdfdmlldzsKKwlfX3UxNiBjaGVja192aWV3OworCisJaWYgKCFmZWF0dXJlcy5l cHRwKSB7CisJCXByaW50X3NraXAoIkVQVCB2aWV3cyBub3Qgc3VwcG9ydGVkIik7CisJCXJldHVy bjsKKwl9CisKKwlvbGRfdmlldyA9IGdldF9lcHRfdmlldyh2bSk7CisKKwluZXdfdmlldyA9IChv bGRfdmlldyArIDEpICUgS1ZNX01BWF9FUFRfVklFV1M7CisJcHJfaW5mbygiQ2hhbmdlIEVQVCB2 aWV3IGZyb20gJXUgdG8gJXVcbiIsIG9sZF92aWV3LCBuZXdfdmlldyk7CisJc2V0X2VwdF92aWV3 KHZtLCBuZXdfdmlldyk7CisKKwljaGVja192aWV3ID0gZ2V0X2VwdF92aWV3KHZtKTsKKwlURVNU X0FTU0VSVChjaGVja192aWV3ID09IG5ld192aWV3LAorCQkJIlN3aXRjaGluZyBFUFQgdmlldyBm YWlsZWQsIGZvdW5kIGVwdCB2aWV3ICgldSksIGV4cGVjdGVkIHZpZXcgKCV1KVxuIiwKKwkJCWNo ZWNrX3ZpZXcsIG5ld192aWV3KTsKKworCXByX2luZm8oIkNoYW5nZSBFUFQgdmlldyBmcm9tICV1 IHRvICV1XG4iLCBjaGVja192aWV3LCBvbGRfdmlldyk7CisJc2V0X2VwdF92aWV3KHZtLCBvbGRf dmlldyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RfaW50cm9zcGVjdGlvbihzdHJ1Y3Qga3ZtX3Zt ICp2bSkKIHsKIAlzcmFuZG9tKHRpbWUoMCkpOwpAQCAtMjEzNSw2ICsyMTc3LDcgQEAgc3RhdGlj IHZvaWQgdGVzdF9pbnRyb3NwZWN0aW9uKHN0cnVjdCBrdm1fdm0gKnZtKQogCXRlc3RfY21kX3Zj cHVfY29udHJvbF9zaW5nbGVzdGVwKHZtKTsKIAl0ZXN0X2NtZF90cmFuc2xhdGVfZ3ZhKHZtKTsK IAl0ZXN0X2NtZF92Y3B1X2dldF9lcHRfdmlldyh2bSk7CisJdGVzdF9jbWRfdmNwdV9zZXRfZXB0 X3ZpZXcodm0pOwogCiAJdW5ob29rX2ludHJvc3BlY3Rpb24odm0pOwogfQpkaWZmIC0tZ2l0IGEv dmlydC9rdm0vaW50cm9zcGVjdGlvbi9rdm1pX2ludC5oIGIvdmlydC9rdm0vaW50cm9zcGVjdGlv bi9rdm1pX2ludC5oCmluZGV4IGY4ODk5OWJmNTllOC4uZjA5M2FhZDJmODA0IDEwMDY0NAotLS0g YS92aXJ0L2t2bS9pbnRyb3NwZWN0aW9uL2t2bWlfaW50LmgKKysrIGIvdmlydC9rdm0vaW50cm9z cGVjdGlvbi9rdm1pX2ludC5oCkBAIC0zMiw2ICszMiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wg aXNfZXZlbnRfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBldmVudCkKIAlyZXR1 cm4gdGVzdF9iaXQoZXZlbnQsIFZDUFVJKHZjcHUpLT5ldl9lbmFibGVfbWFzayk7CiB9CiAKK3N0 YXRpYyBpbmxpbmUgYm9vbCBpc192YWxpZF92aWV3KHVuc2lnbmVkIHNob3J0IHZpZXcpCit7CisJ cmV0dXJuICh2aWV3IDwgS1ZNX01BWF9FUFRfVklFV1MpOworfQorCiAvKiBrdm1pX21zZy5jICov CiBib29sIGt2bWlfc29ja19nZXQoc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9uICprdm1pLCBpbnQg ZmQpOwogdm9pZCBrdm1pX3NvY2tfc2h1dGRvd24oc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9uICpr dm1pKTsKQEAgLTE0Myw1ICsxNDgsNiBAQCBib29sIGt2bWlfYXJjaF9zdGFydF9zaW5nbGVzdGVw KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIGt2bWlfYXJjaF9zdG9wX3NpbmdsZXN0ZXAo c3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGdwYV90IGt2bWlfYXJjaF9jbWRfdHJhbnNsYXRlX2d2 YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiB1MTYga3ZtaV9hcmNoX2NtZF9n ZXRfZXB0X3ZpZXcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1pX2FyY2hfY21kX3Nl dF9lcHRfdmlldyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiB2aWV3KTsKIAogI2VuZGlmCmRp ZmYgLS1naXQgYS92aXJ0L2t2bS9pbnRyb3NwZWN0aW9uL2t2bWlfbXNnLmMgYi92aXJ0L2t2bS9p bnRyb3NwZWN0aW9uL2t2bWlfbXNnLmMKaW5kZXggNmNiMzQ3MzE5MGRiLi43M2E3MTc5ZjcwMzEg MTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2ludHJvc3BlY3Rpb24va3ZtaV9tc2cuYworKysgYi92aXJ0 L2t2bS9pbnRyb3NwZWN0aW9uL2t2bWlfbXNnLmMKQEAgLTY3NCw2ICs2NzQsMjUgQEAgc3RhdGlj IGludCBoYW5kbGVfdmNwdV9nZXRfZXB0X3ZpZXcoY29uc3Qgc3RydWN0IGt2bWlfdmNwdV9tc2df am9iICpqb2IsCiAJcmV0dXJuIGt2bWlfbXNnX3ZjcHVfcmVwbHkoam9iLCBtc2csIDAsICZycGws IHNpemVvZihycGwpKTsKIH0KIAorc3RhdGljIGludCBoYW5kbGVfdmNwdV9zZXRfZXB0X3ZpZXco Y29uc3Qgc3RydWN0IGt2bWlfdmNwdV9tc2dfam9iICpqb2IsCisJCQkJICAgIGNvbnN0IHN0cnVj dCBrdm1pX21zZ19oZHIgKm1zZywKKwkJCQkgICAgY29uc3Qgdm9pZCAqX3JlcSkKK3sKKwljb25z dCBzdHJ1Y3Qga3ZtaV92Y3B1X3NldF9lcHRfdmlldyAqcmVxID0gX3JlcTsKKwlpbnQgZWM7CisK KwlpZiAocmVxLT5wYWRkaW5nMSB8fCByZXEtPnBhZGRpbmcyKQorCQllYyA9IC1LVk1fRUlOVkFM OworCWVsc2UgaWYgKCFpc192YWxpZF92aWV3KHJlcS0+dmlldykpCisJCWVjID0gLUtWTV9FSU5W QUw7CisJZWxzZSBpZiAoIWt2bV9lcHRwX3N3aXRjaGluZ19zdXBwb3J0ZWQpCisJCWVjID0gLUtW TV9FT1BOT1RTVVBQOworCWVsc2UKKwkJZWMgPSBrdm1pX2FyY2hfY21kX3NldF9lcHRfdmlldyhq b2ItPnZjcHUsIHJlcS0+dmlldyk7CisKKwlyZXR1cm4ga3ZtaV9tc2dfdmNwdV9yZXBseShqb2Is IG1zZywgZWMsIE5VTEwsIDApOworfQorCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBleGVj dXRlZCBmcm9tIHRoZSB2Q1BVIHRocmVhZC4gVGhlIHJlY2VpdmluZyB0aHJlYWQKICAqIHBhc3Nl cyB0aGUgbWVzc2FnZXMgdXNpbmcgYSBuZXdseSBhbGxvY2F0ZWQgJ3N0cnVjdCBrdm1pX3ZjcHVf bXNnX2pvYicKQEAgLTY5NSw2ICs3MTQsNyBAQCBzdGF0aWMgaW50KCpjb25zdCBtc2dfdmNwdVtd KShjb25zdCBzdHJ1Y3Qga3ZtaV92Y3B1X21zZ19qb2IgKiwKIAlbS1ZNSV9WQ1BVX0dFVF9YQ1Jd ICAgICAgICAgICAgPSBoYW5kbGVfdmNwdV9nZXRfeGNyLAogCVtLVk1JX1ZDUFVfR0VUX1hTQVZF XSAgICAgICAgICA9IGhhbmRsZV92Y3B1X2dldF94c2F2ZSwKIAlbS1ZNSV9WQ1BVX0lOSkVDVF9F WENFUFRJT05dICAgPSBoYW5kbGVfdmNwdV9pbmplY3RfZXhjZXB0aW9uLAorCVtLVk1JX1ZDUFVf U0VUX0VQVF9WSUVXXSAgICAgICA9IGhhbmRsZV92Y3B1X3NldF9lcHRfdmlldywKIAlbS1ZNSV9W Q1BVX1NFVF9SRUdJU1RFUlNdICAgICAgPSBoYW5kbGVfdmNwdV9zZXRfcmVnaXN0ZXJzLAogCVtL Vk1JX1ZDUFVfU0VUX1hTQVZFXSAgICAgICAgICA9IGhhbmRsZV92Y3B1X3NldF94c2F2ZSwKIAlb S1ZNSV9WQ1BVX1RSQU5TTEFURV9HVkFdICAgICAgPSBoYW5kbGVfdmNwdV90cmFuc2xhdGVfZ3Zh LApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFs aXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlv bi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8v dmlydHVhbGl6YXRpb24=