From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oa2-f1.google.com (mail-oa2-f1.google.com [74.125.231.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4257E404BD5 for ; Mon, 24 Aug 2026 10:29:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.231.65 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787567357; cv=none; b=SSTlBg6eG5Mpd9dwES3uUmKpvUdOf8E5Y/MfS38Tp8oKqPzWut+uqTu+k3In+Fi6FKXBqB7defw3U9HAbmgw0zCE6fFqkSsH6Ehzj8Dfs8PEv3NgOkffRAKydNsw1lxvd47GeX0gRGtgcLQDXRq2RR/JMONAR8YJAH1KHrnvMvU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787567357; c=relaxed/simple; bh=SMp0BYiGxQrk8xhB9F+B5Fv4uJjjSg1RFFD3BO6xRHo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=UiVT2QzEumcZhx1sxLt1Bctrxfsl2vWyThT58j5YXviFwf5PIkt3zyHbv5YuloeofZwd/UHrWsc+QiEUo2Fw+mmNOtDEiHg9EaUrMqhouC7iTUhXlVTMqod0gmTxhTt0K3Qu9o27tCSK5yiiMaobgvVllxyyjq+qh+Mq9hw1U6w= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cRLuBOzj; arc=none smtp.client-ip=74.125.231.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cRLuBOzj" Received: by mail-oa2-f1.google.com with SMTP id 586e51a60fabf-455b0023b45so1435939fac.1 for ; Mon, 24 Aug 2026 03:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787567355; x=1788172155; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=ZgNVvVnK6qtTAurSHfCAYIGP8l/75f7zp4ee8TcekQQ=; b=cRLuBOzjC+tpBkY6XdL/V5eR0DotXeuU5/9P52SEFcLN9+jeIjQeYHWNrAQ5CzR1GO DVYP3hcscdSo1O75hu5jkaUagqX+23OSVo+6AtQezPjuXlV4LP8xsAJ6y/Y80ugUTcBD U/84raiwiw2S5DV/wHndSh4gVWKxpvUJKNJ3S0u8lUyTwlEKOpIgy9ii/2KsbyPbAAn2 FtANUsgRGiXRpAlahAS7P9XZm7gov1XPpyxDm5H9HPVT/dDY61pbgoB/RpLDSzpNDXBu graL2tf1jiKLPRJ60m+EvuJBQ2dR9eN72mfFF0ENi1b6n2RDeRE0iXrjN2Zn/CRXOQAI BavA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787567355; x=1788172155; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZgNVvVnK6qtTAurSHfCAYIGP8l/75f7zp4ee8TcekQQ=; b=BvhZ6JQ0mNToPibAGo0w2DkXY+acp7aE4DBnysPhfT2QNsq3MxwnZQf0n2zzzEJNWP I47OMg36skS063GaNrtyL18j1oHzYnSDmIhr2CnG6olmXYRvYcIfTI3BRmH8Zdg/+pdg YDZkfDH8faQCiNl6zSYtAw+0jfeQ53wFUgZ4vT+ZVFt+r/jX7X1cA5ZDfqq6bXwzqkbR C/OlA48YH1uaBKW8tGqu4D4mvDTfNZ1fzIh8MIWoCTjEM+mcBL+Oshr/TYuUiOe4Qlum yAvaVN52DfT19KlRt3N707ScGBC5QE4m+mFXKuobiqbnR6MbFrVg/2mQ/FZ3Q3lh3ybU gu9w== X-Forwarded-Encrypted: i=1; AHgh+RoQxueDH/3XZqhSmotHN21zfA2dLBI3VFOflAqtmrVExGDdObMYO2HewJ3RjmhWVb6H3AZT6Kdzf97kMRY=@vger.kernel.org X-Gm-Message-State: AFuF++ksx6BuyhM8o+3/yXclQ8MjNYtx81l7pfulHJpHvlp04Na8ohYS qhN3lsTW3dOs9xvnB2NcTKl7HmxcCM4LFH4e1NCbP1OvZdWOgL/WBp96 X-Gm-Gg: AR+sD11DTih8NI0RhQ5zHF2fAy0N3vIK+zk+YtaPqcT5kxGZ/KMnR8Y6JCV9HSV47gr MQ3MuLiC0nkNx0EErGdFsuUe9N0LTcaW2QHdnVZ6lAh03YriMJbPoR3uEJcuhSYlkv+6Ib7GsRk Nf+HtzW5C8YL1VHSYh/z1p5l+od2BNHGNzYIPSz10iwnHHL96pYOeazLZ+iWXs8Z2iil//ZlPib FZTFjhy1JJzE5hPEck2fosMQcB9/z7zk9EdYqblgVpwqWEmMDORIjE13vDGhjBPLkp0Egai73oW HB8nVmWOEVdRkn6xVxda5nCOGQE3xY4OkaCDCRkgkghoHUOpnL8M6HlHdRcZoC09l1HO1K9gwG8 GYYm/OH4SEuW/BfrLl4f+A694sjFvoE/u5CW9iUOkOD5SI+GUCOoCXLVUs5XHMpaDAed05utPEu 2tQouHq7QOGvOnf5JwUma+NXdPpoDA4BbB7KSdNIDdnYHL38yD2dt2B/oEgwDnMMXUMOcpgPZ1o D49HRVh7IwYpnxSygVg5PZZ0A== X-Received: by 2002:a05:6820:615:b0:6a1:80a7:2c8d with SMTP id 006d021491bc7-6b15944db93mr23802831eaf.32.1787567354991; Mon, 24 Aug 2026 03:29:14 -0700 (PDT) Received: from localhost.localdomain ([14.22.11.161]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6b17cc2c0dbsm3363378eaf.12.2026.08.24.03.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 03:29:13 -0700 (PDT) From: Henry Martin To: Steven Rostedt , Masami Hiramatsu Cc: Mathieu Desnoyers , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org, Henry Martin Subject: [PATCH] tracing/user_events: Don't destroy fields when event removal fails Date: Mon, 24 Aug 2026 18:29:07 +0800 Message-ID: <20260824102907.4173063-1-bsdhenrymartin@gmail.com> X-Mailer: git-send-email 2.43.7 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit destroy_user_event() destroys the event's fields before attempting to remove the trace event call. If user_event_set_call_visible() fails, e.g. because the event is still enabled and trace_remove_event_call() returns -EBUSY, the event is left registered with an irreversibly destroyed field list. Any subsequent interaction with the event then operates on an empty field list while it is still fully visible in tracefs. Move the field destruction after the call removal, and splice the field list back onto the event when the removal fails so the event remains in a consistent state. Fixes: 7f5a08c79df35 ("user_events: Add minimal support for trace_event into ftrace") Signed-off-by: Henry Martin --- kernel/trace/trace_events_user.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c index 8c82ecb735f41..0b021c212995a 100644 --- a/kernel/trace/trace_events_user.c +++ b/kernel/trace/trace_events_user.c @@ -1119,10 +1119,9 @@ static void user_event_destroy_validators(struct user_event *user) } } -static void user_event_destroy_fields(struct user_event *user) +static void user_event_destroy_fields(struct list_head *head) { struct ftrace_event_field *field, *next; - struct list_head *head = &user->fields; list_for_each_entry_safe(field, next, head, link) { list_del(&field->link); @@ -1499,17 +1498,21 @@ static int user_event_set_call_visible(struct user_event *user, bool visible) static int destroy_user_event(struct user_event *user) { + LIST_HEAD(fields); int ret = 0; lockdep_assert_held(&event_mutex); - /* Must destroy fields before call removal */ - user_event_destroy_fields(user); + list_splice_init(&user->fields, &fields); ret = user_event_set_call_visible(user, false); - if (ret) + if (ret) { + list_splice(&fields, &user->fields); return ret; + } + + user_event_destroy_fields(&fields); dyn_event_remove(&user->devent); hash_del(&user->node); @@ -2209,7 +2212,7 @@ static int user_event_parse(struct user_event_group *group, char *name, put_user_lock: mutex_unlock(&event_mutex); put_user: - user_event_destroy_fields(user); + user_event_destroy_fields(&user->fields); user_event_destroy_validators(user); kfree(user->call.print_fmt); -- 2.43.0