Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp5583593imm; Tue, 12 Jun 2018 09:59:51 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKt6ngYnYZLBVo9VnCP+cAsiTzoGkhysfx33giIi6ybAMeZ7pAFSv1MnexBMCHoIs55ZlAp X-Received: by 2002:a63:6142:: with SMTP id v63-v6mr989941pgb.390.1528822791877; Tue, 12 Jun 2018 09:59:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528822791; cv=none; d=google.com; s=arc-20160816; b=eHFoVDrV/PocmaI/RvzhQhOX+a0NbH0/kc4O3xIHXkqIS0H3Uj08uZ00geQVmNcfUk cY8PRfG6+08ZlnUuQDCMI+uUkHrCQPBlvLXu/EF3OmygPZ6xt4zgYM7JuCOVi1TTi54C Sjne6rFb9thdaoojZJwtINBgjarF6tigkW0yiqckiiQC5r6sWtkF5wBCiApAZ/ndiNUr UVV+7bZ6fHkka9NUGxq5mh+7eVcHv7EVXGMtrbaVx/RDHcaX3BakNc2ZCpepBT2J+rNC Jkrh31x8CNDHAWctq36YlxopeCDNWC+9DLVMrTrTEd1pfLbM9zrJRUmBhntAGrEUK0DB +2kQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=nHLfbzbMOl1VfDJXa8dq1eFZ8nCLh47p12jedxoIIYM=; b=x0rx+xhO1f//6wajH/xpymOFCc+1MskluHYJt/ngepIiVBtBFK4HHobuoMjdu1taGp ydBr5wdU4cHzGLk880e9SE9IC2WnzA/gIoL2qdJaZMc0NNGDOxNYO1HsulJVV7L1Qc8W 3AcqzP8/9q2WpcjPlDKyKRfuiggFKXcfIPM1sUuvkwUiM1f3bLfiUnWlI3Nrxr86DEsp QEJgurAJKhc7vB4RuyjHD9fpaQjxcDVZzGL8KwCyVQlezKz+EW9aMKdmJFnoCCG+BKF7 l7ajJFujF8u2UFeF4Va2T4fi3mnbCZIK77NfFNYdmQIdKLUbpzfrIQCKAzz8dNucuO5P X4XA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=afCsxVC+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a66-v6si507708pfe.364.2018.06.12.09.59.37; Tue, 12 Jun 2018 09:59:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=afCsxVC+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935229AbeFLQx4 (ORCPT + 99 others); Tue, 12 Jun 2018 12:53:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:54076 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934788AbeFLQxv (ORCPT ); Tue, 12 Jun 2018 12:53:51 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3960F208B4; Tue, 12 Jun 2018 16:53:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1528822430; bh=7jqvK6RJ1Mc8+JY+rqZit9u65P2dMcCETFM0H9zdgMw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=afCsxVC+wJTujVntTjYdXHGv8mpb0Uk7OaliSANoF8dLBb/TJ8gioqLdkKrZOupm0 ECl53MDwUsWH5zViW+tAuk9sN35xNfEvtJkK5IcCdS/zyPNNoNTnwRJM4ngtWLJJhF tk0VVJfoCcTWn7wCNxiQeDlB/wEH5PvY+zncuOg8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Steven Rostedt (VMware)" Subject: [PATCH 3.18 01/21] tracing: Fix crash when freeing instances with event triggers Date: Tue, 12 Jun 2018 18:51:58 +0200 Message-Id: <20180612164825.456945220@linuxfoundation.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180612164825.401145490@linuxfoundation.org> References: <20180612164825.401145490@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Steven Rostedt (VMware) commit 86b389ff22bd6ad8fd3cb98e41cd271886c6d023 upstream. If a instance has an event trigger enabled when it is freed, it could cause an access of free memory. Here's the case that crashes: # cd /sys/kernel/tracing # mkdir instances/foo # echo snapshot > instances/foo/events/initcall/initcall_start/trigger # rmdir instances/foo Would produce: general protection fault: 0000 [#1] PREEMPT SMP PTI Modules linked in: tun bridge ... CPU: 5 PID: 6203 Comm: rmdir Tainted: G W 4.17.0-rc4-test+ #933 Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016 RIP: 0010:clear_event_triggers+0x3b/0x70 RSP: 0018:ffffc90003783de0 EFLAGS: 00010286 RAX: 0000000000000000 RBX: 6b6b6b6b6b6b6b2b RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8800c7130ba0 RBP: ffffc90003783e00 R08: ffff8801131993f8 R09: 0000000100230016 R10: ffffc90003783d80 R11: 0000000000000000 R12: ffff8800c7130ba0 R13: ffff8800c7130bd8 R14: ffff8800cc093768 R15: 00000000ffffff9c FS: 00007f6f4aa86700(0000) GS:ffff88011eb40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f6f4a5aed60 CR3: 00000000cd552001 CR4: 00000000001606e0 Call Trace: event_trace_del_tracer+0x2a/0xc5 instance_rmdir+0x15c/0x200 tracefs_syscall_rmdir+0x52/0x90 vfs_rmdir+0xdb/0x160 do_rmdir+0x16d/0x1c0 __x64_sys_rmdir+0x17/0x20 do_syscall_64+0x55/0x1a0 entry_SYSCALL_64_after_hwframe+0x49/0xbe This was due to the call the clears out the triggers when an instance is being deleted not removing the trigger from the link list. Cc: stable@vger.kernel.org Fixes: 85f2b08268c01 ("tracing: Add basic event trigger framework") Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Greg Kroah-Hartman --- kernel/trace/trace_events_trigger.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -469,9 +469,10 @@ clear_event_triggers(struct trace_array struct ftrace_event_file *file; list_for_each_entry(file, &tr->events, list) { - struct event_trigger_data *data; - list_for_each_entry_rcu(data, &file->triggers, list) { + struct event_trigger_data *data, *n; + list_for_each_entry_safe(data, n, &file->triggers, list) { trace_event_trigger_enable_disable(file, 0); + list_del_rcu(&data->list); if (data->ops->free) data->ops->free(data->ops, data); }