From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Gleixner Subject: [patch V3 25/29] livepatch: Simplify stack trace retrieval Date: Thu, 25 Apr 2019 11:45:18 +0200 Message-ID: <20190425094803.437950229@linutronix.de> References: <20190425094453.875139013@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: LKML Cc: Mike Snitzer , David Airlie , Catalin Marinas , dri-devel@lists.freedesktop.org, linux-mm@kvack.org, dm-devel@redhat.com, Alexander Potapenko , Christoph Lameter , Miroslav Benes , Christoph Hellwig , Alasdair Kergon , Marek Szyprowski , linux-arch@vger.kernel.org, x86@kernel.org, kasan-dev@googlegroups.com, David Rientjes , Andrey Ryabinin , Alexey Dobriyan , intel-gfx@lists.freedesktop.org, Johannes Thumshirn , Akinobu Mita , Steven Rostedt , Josef Bacik , Mike Rapoport , Andy Lutomirski , Josh Poimboeuf List-Id: linux-arch.vger.kernel.org UmVwbGFjZSB0aGUgaW5kaXJlY3Rpb24gdGhyb3VnaCBzdHJ1Y3Qgc3RhY2tfdHJhY2UgYnkgdXNp bmcgdGhlIHN0b3JhZ2UKYXJyYXkgYmFzZWQgaW50ZXJmYWNlcy4KClNpZ25lZC1vZmYtYnk6IFRo b21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgpBY2tlZC1ieTogTWlyb3NsYXYgQmVu ZXMgPG1iZW5lc0BzdXNlLmN6PgotLS0KIGtlcm5lbC9saXZlcGF0Y2gvdHJhbnNpdGlvbi5jIHwg ICAyMiArKysrKysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25z KCspLCAxMyBkZWxldGlvbnMoLSkKCi0tLSBhL2tlcm5lbC9saXZlcGF0Y2gvdHJhbnNpdGlvbi5j CisrKyBiL2tlcm5lbC9saXZlcGF0Y2gvdHJhbnNpdGlvbi5jCkBAIC0yMDIsMTUgKzIwMiwxNSBA QCB2b2lkIGtscF91cGRhdGVfcGF0Y2hfc3RhdGUoc3RydWN0IHRhc2tfCiAgKiBEZXRlcm1pbmUg d2hldGhlciB0aGUgZ2l2ZW4gc3RhY2sgdHJhY2UgaW5jbHVkZXMgYW55IHJlZmVyZW5jZXMgdG8g YQogICogdG8tYmUtcGF0Y2hlZCBvciB0by1iZS11bnBhdGNoZWQgZnVuY3Rpb24uCiAgKi8KLXN0 YXRpYyBpbnQga2xwX2NoZWNrX3N0YWNrX2Z1bmMoc3RydWN0IGtscF9mdW5jICpmdW5jLAotCQkJ CXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCitzdGF0aWMgaW50IGtscF9jaGVja19zdGFja19m dW5jKHN0cnVjdCBrbHBfZnVuYyAqZnVuYywgdW5zaWduZWQgbG9uZyAqZW50cmllcywKKwkJCQl1 bnNpZ25lZCBpbnQgbnJfZW50cmllcykKIHsKIAl1bnNpZ25lZCBsb25nIGZ1bmNfYWRkciwgZnVu Y19zaXplLCBhZGRyZXNzOwogCXN0cnVjdCBrbHBfb3BzICpvcHM7CiAJaW50IGk7CiAKLQlmb3Ig KGkgPSAwOyBpIDwgdHJhY2UtPm5yX2VudHJpZXM7IGkrKykgewotCQlhZGRyZXNzID0gdHJhY2Ut PmVudHJpZXNbaV07CisJZm9yIChpID0gMDsgaSA8IG5yX2VudHJpZXM7IGkrKykgeworCQlhZGRy ZXNzID0gZW50cmllc1tpXTsKIAogCQlpZiAoa2xwX3RhcmdldF9zdGF0ZSA9PSBLTFBfVU5QQVRD SEVEKSB7CiAJCQkgLyoKQEAgLTI1NCwyOSArMjU0LDI1IEBAIHN0YXRpYyBpbnQga2xwX2NoZWNr X3N0YWNrX2Z1bmMoc3RydWN0IGsKIHN0YXRpYyBpbnQga2xwX2NoZWNrX3N0YWNrKHN0cnVjdCB0 YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqZXJyX2J1ZikKIHsKIAlzdGF0aWMgdW5zaWduZWQgbG9u ZyBlbnRyaWVzW01BWF9TVEFDS19FTlRSSUVTXTsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7 CiAJc3RydWN0IGtscF9vYmplY3QgKm9iajsKIAlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmM7Ci0JaW50 IHJldDsKKwlpbnQgcmV0LCBucl9lbnRyaWVzOwogCi0JdHJhY2Uuc2tpcCA9IDA7Ci0JdHJhY2Uu bnJfZW50cmllcyA9IDA7Ci0JdHJhY2UubWF4X2VudHJpZXMgPSBNQVhfU1RBQ0tfRU5UUklFUzsK LQl0cmFjZS5lbnRyaWVzID0gZW50cmllczsKLQlyZXQgPSBzYXZlX3N0YWNrX3RyYWNlX3Rza19y ZWxpYWJsZSh0YXNrLCAmdHJhY2UpOworCXJldCA9IHN0YWNrX3RyYWNlX3NhdmVfdHNrX3JlbGlh YmxlKHRhc2ssIGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcykpOwogCVdBUk5fT05fT05DRShy ZXQgPT0gLUVOT1NZUyk7Ci0JaWYgKHJldCkgeworCWlmIChyZXQgPCAwKSB7CiAJCXNucHJpbnRm KGVycl9idWYsIFNUQUNLX0VSUl9CVUZfU0laRSwKIAkJCSAiJXM6ICVzOiVkIGhhcyBhbiB1bnJl bGlhYmxlIHN0YWNrXG4iLAogCQkJIF9fZnVuY19fLCB0YXNrLT5jb21tLCB0YXNrLT5waWQpOwog CQlyZXR1cm4gcmV0OwogCX0KKwlucl9lbnRyaWVzID0gcmV0OwogCiAJa2xwX2Zvcl9lYWNoX29i amVjdChrbHBfdHJhbnNpdGlvbl9wYXRjaCwgb2JqKSB7CiAJCWlmICghb2JqLT5wYXRjaGVkKQog CQkJY29udGludWU7CiAJCWtscF9mb3JfZWFjaF9mdW5jKG9iaiwgZnVuYykgewotCQkJcmV0ID0g a2xwX2NoZWNrX3N0YWNrX2Z1bmMoZnVuYywgJnRyYWNlKTsKKwkJCXJldCA9IGtscF9jaGVja19z dGFja19mdW5jKGZ1bmMsIGVudHJpZXMsIG5yX2VudHJpZXMpOwogCQkJaWYgKHJldCkgewogCQkJ CXNucHJpbnRmKGVycl9idWYsIFNUQUNLX0VSUl9CVUZfU0laRSwKIAkJCQkJICIlczogJXM6JWQg aXMgc2xlZXBpbmcgb24gZnVuY3Rpb24gJXNcbiIsCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from Galois.linutronix.de ([146.0.238.70]:58147 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728108AbfDYKBo (ORCPT ); Thu, 25 Apr 2019 06:01:44 -0400 Message-ID: <20190425094803.437950229@linutronix.de> Date: Thu, 25 Apr 2019 11:45:18 +0200 From: Thomas Gleixner Subject: [patch V3 25/29] livepatch: Simplify stack trace retrieval References: <20190425094453.875139013@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-arch-owner@vger.kernel.org List-ID: To: LKML Cc: Josh Poimboeuf , x86@kernel.org, Andy Lutomirski , Miroslav Benes , Steven Rostedt , Alexander Potapenko , Alexey Dobriyan , Andrew Morton , Christoph Lameter , Pekka Enberg , linux-mm@kvack.org, David Rientjes , Catalin Marinas , Dmitry Vyukov , Andrey Ryabinin , kasan-dev@googlegroups.com, Mike Rapoport , Akinobu Mita , Christoph Hellwig , iommu@lists.linux-foundation.org, Robin Murphy , Marek Szyprowski , Johannes Thumshirn , David Sterba , Chris Mason , Josef Bacik , linux-btrfs@vger.kernel.org, dm-devel@redhat.com, Mike Snitzer , Alasdair Kergon , Daniel Vetter , intel-gfx@lists.freedesktop.org, Joonas Lahtinen , Maarten Lankhorst , dri-devel@lists.freedesktop.org, David Airlie , Jani Nikula , Rodrigo Vivi , Tom Zanussi , linux-arch@vger.kernel.org Message-ID: <20190425094518.YRTnhzOM0Ou7rMAk1oa8t252NIdSGGZZqzd9xdTu_AU@z> Replace the indirection through struct stack_trace by using the storage array based interfaces. Signed-off-by: Thomas Gleixner Acked-by: Miroslav Benes --- kernel/livepatch/transition.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) --- a/kernel/livepatch/transition.c +++ b/kernel/livepatch/transition.c @@ -202,15 +202,15 @@ void klp_update_patch_state(struct task_ * Determine whether the given stack trace includes any references to a * to-be-patched or to-be-unpatched function. */ -static int klp_check_stack_func(struct klp_func *func, - struct stack_trace *trace) +static int klp_check_stack_func(struct klp_func *func, unsigned long *entries, + unsigned int nr_entries) { unsigned long func_addr, func_size, address; struct klp_ops *ops; int i; - for (i = 0; i < trace->nr_entries; i++) { - address = trace->entries[i]; + for (i = 0; i < nr_entries; i++) { + address = entries[i]; if (klp_target_state == KLP_UNPATCHED) { /* @@ -254,29 +254,25 @@ static int klp_check_stack_func(struct k static int klp_check_stack(struct task_struct *task, char *err_buf) { static unsigned long entries[MAX_STACK_ENTRIES]; - struct stack_trace trace; struct klp_object *obj; struct klp_func *func; - int ret; + int ret, nr_entries; - trace.skip = 0; - trace.nr_entries = 0; - trace.max_entries = MAX_STACK_ENTRIES; - trace.entries = entries; - ret = save_stack_trace_tsk_reliable(task, &trace); + ret = stack_trace_save_tsk_reliable(task, entries, ARRAY_SIZE(entries)); WARN_ON_ONCE(ret == -ENOSYS); - if (ret) { + if (ret < 0) { snprintf(err_buf, STACK_ERR_BUF_SIZE, "%s: %s:%d has an unreliable stack\n", __func__, task->comm, task->pid); return ret; } + nr_entries = ret; klp_for_each_object(klp_transition_patch, obj) { if (!obj->patched) continue; klp_for_each_func(obj, func) { - ret = klp_check_stack_func(func, &trace); + ret = klp_check_stack_func(func, entries, nr_entries); if (ret) { snprintf(err_buf, STACK_ERR_BUF_SIZE, "%s: %s:%d is sleeping on function %s\n",