From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D89D42AF00 for ; Wed, 29 Jul 2026 00:05:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785283524; cv=none; b=JiE91oADIYKibaDq0XkcTZjWnaj5zfsshxjsPG4dE6AyTPiIuDP4Fi4ftNtxfGnDxE6vjoCChw6vsiC4sNZygalRPMnhmRnUkvdid6lV3ZYMASyIoDoOW/O2ayZrToOm7vc40KBjvyay4Ov59bvsuMYhbK188l6COqLpyz6M8V4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785283524; c=relaxed/simple; bh=nKpztKyP1NN9VKH23AoY/PU3GVHpidd2S41C5EOCgUU=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=rukMP5N8AGcjwC8HmnaIDShu8krfBKk6nDxUw/hYJpnz7a82dpfZQD8e+/mYqAJfWY87mlLzitZTH7+svQdLZayLXcgN0gJ167gYt8Pfk/uk6HejyuCJyD5pQxcxx1zOTtRw5ng/2H+SldrM+eo0aIjmF55xBsOh8HofbnnGW3s= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=o0Cd5LIL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="o0Cd5LIL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C8E001F00ADB; Wed, 29 Jul 2026 00:05:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785283521; bh=5J4TnrkAAAfeovPbyTcON7fNW+Y4IQJEMzcRs0v8MzU=; h=Date:From:To:Cc:Subject:References; b=o0Cd5LILgTzzFmcEZuAu7oVQsR1dBWlyV9e3fclGatO4/6ayeNvnb8Ui0k+V1E8aD /cW4kimvFR1usNUIr3vJViFrxkrzX5uKdsFcVFQW9TvLfIWGOr0qZr3vYnR4oydTMT puyYoGXxfzjHzTRDzXbJ2++4QDTRwi3tQMeBACUE4e9FdsAgp0BHLOPuqp+L72kMVI 4LnYwN+8v501+bABN/VS3kyEaodsS3qM6n+yY3UmNHN83cna+w1Cl/lRSe/VvrSptE Mntraq3bToNFwp5mKzEJZ6jYMhM97Ghk7KouZj/xY8lavF6jWlGqiDOJlZ6ghrlrLW q/9hjlhOPcmSw== Received: from rostedt by gandalf with local (Exim 4.99.4) (envelope-from ) id 1woro4-00000006UdB-1tIE; Tue, 28 Jul 2026 20:05:56 -0400 Message-ID: <20260729000556.311697849@kernel.org> User-Agent: quilt/0.69 Date: Tue, 28 Jul 2026 20:05:30 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Pengpeng Hou Subject: [for-next][PATCH 07/16] tracing: Return ERR_PTR() from expr_str() References: <20260729000523.093060274@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 From: Pengpeng Hou expr_str() currently reports all failure cases as NULL, so callers cannot distinguish invalid recursion depth from allocation failure or later string construction errors. Return ERR_PTR()-encoded errors from expr_str() and make parse_unary() and parse_expr() propagate them. Clear expr->name before destroying the hist field so the error pointer is not freed as a string. Link: https://patch.msgid.link/20260611055945.22348-3-pengpeng@iscas.ac.cn Signed-off-by: Pengpeng Hou Signed-off-by: Steven Rostedt --- kernel/trace/trace_events_hist.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 40ae7379cbf5..dee2710da66e 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -1762,11 +1762,11 @@ static char *expr_str(struct hist_field *field, unsigned int level) char *expr __free(kfree) = NULL; if (level > 1) - return NULL; + return ERR_PTR(-EINVAL); expr = kzalloc(MAX_FILTER_STR_VAL, GFP_KERNEL); if (!expr) - return NULL; + return ERR_PTR(-ENOMEM); if (!field->operands[0]) { expr_field_str(field, expr); @@ -1778,8 +1778,8 @@ static char *expr_str(struct hist_field *field, unsigned int level) strcat(expr, "-("); subexpr = expr_str(field->operands[0], ++level); - if (!subexpr) - return NULL; + if (IS_ERR(subexpr)) + return subexpr; strcat(expr, subexpr); strcat(expr, ")"); @@ -1805,7 +1805,7 @@ static char *expr_str(struct hist_field *field, unsigned int level) strcat(expr, "*"); break; default: - return NULL; + return ERR_PTR(-EINVAL); } expr_field_str(field->operands[1], expr); @@ -2622,6 +2622,11 @@ static struct hist_field *parse_unary(struct hist_trigger_data *hist_data, expr->is_signed = operand1->is_signed; expr->operator = FIELD_OP_UNARY_MINUS; expr->name = expr_str(expr, 0); + if (IS_ERR(expr->name)) { + ret = PTR_ERR(expr->name); + expr->name = NULL; + goto free; + } expr->type = kstrdup_const(operand1->type, GFP_KERNEL); if (!expr->type) { ret = -ENOMEM; @@ -2834,6 +2839,11 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, destroy_hist_field(operand1, 0); expr->name = expr_str(expr, 0); + if (IS_ERR(expr->name)) { + ret = PTR_ERR(expr->name); + expr->name = NULL; + goto free_expr; + } } else { /* The operand sizes should be the same, so just pick one */ expr->size = operand1->size; @@ -2847,6 +2857,11 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, } expr->name = expr_str(expr, 0); + if (IS_ERR(expr->name)) { + ret = PTR_ERR(expr->name); + expr->name = NULL; + goto free_expr; + } } return expr; -- 2.53.0