Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp5907968ybf; Thu, 5 Mar 2020 09:16:11 -0800 (PST) X-Google-Smtp-Source: ADFU+vusjqMtTRRSnZWnvwAxaC886ASEVsSS3orBld4hePeDvvhphR0as3MYtspBFar5kNhpg7GH X-Received: by 2002:a9d:68ce:: with SMTP id i14mr7798258oto.233.1583428571220; Thu, 05 Mar 2020 09:16:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583428571; cv=none; d=google.com; s=arc-20160816; b=yhMc/ReGnAOxAHQLDKAoxsu++R/bg1JQvVmQU+ywvRcVIdFrCUsKgUEGrCNywWd9NX gaqw/o1c9iajNAw+etWWHj76LXQ0MH7xXcIcPEO1BUOeB+BbPjC1zt2mZt99XYdVIM3j SywljPNwLz2I5N9dnBnUgFg+a7TzJPlv39BSN2N5DPUNay0CZer5mROrpl5FJ3LZn7M2 uzCHxRBa0MIUP42GifqXyN96oKZtqTCDBYcmKqqZFCMP2vYtxKm+gpqesaemfw5JRLFA VtukUc+DQpn+5QgdDKfWIh9CNikubsWPvpbrQspaWBmPEUaeqUj06Ztv84XPOPNjdV2U h83A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Yiu3sO4OgJk18FWcoR3LNEElwQClkRLLFAr8cMOtzuw=; b=tMhHZr9rR0yw64qZb8IfPYdaNd/7nvc9TBmsC2ye8kJHZMnYU2alZtBkpRSakG/WqN sk/FvXE2qA20X4aUhv9/j5/zU3aMvOmWWQM4TsDXEgvAwHkCtigH1PgKuFPJiuhGoXAG e6u8u2R215SJYOi5DxYHPCtbJe02JxGjLSLHuIYI/MBhPfV3KvSDwy7cpvaEM7kWPuji U4aYfrJN7m2M4OEqiDL3GczDkGR6zAwHhOcF4Gr5twC1fe+MFR87N3G9npBq/uY9lZtl p6ADdfUaiIDL3E/cvqojSjD1d20SDe8/Lx5kxQkWHVI9dT7vB6d0OsZYr8l0vUzoASTs oytA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lIa2Uofi; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i20si4047210oto.259.2020.03.05.09.15.59; Thu, 05 Mar 2020 09:16:11 -0800 (PST) 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=lIa2Uofi; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727952AbgCERPH (ORCPT + 99 others); Thu, 5 Mar 2020 12:15:07 -0500 Received: from mail.kernel.org ([198.145.29.99]:41092 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727774AbgCEROo (ORCPT ); Thu, 5 Mar 2020 12:14:44 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5F23F24679; Thu, 5 Mar 2020 17:14:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583428484; bh=/sOLfcB78ooPON9tkDzlMoGzEbOGHBf9o0sHqQL4E74=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lIa2Uofiw+7xACOskNAWADNzmI69JwYUzX5tiKPgEib/7u0IEULcNv7tqslC8RCvj 7kiRa9QYRaBEurh9nPYG2xkv/co7chM9v35ACgwtRUAc9yR09UvHhnngXhdCA5bwfH F+HHkETdD7LhAAH3yM2TvIErPvLJ2A6ABeNVtpfI= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Tom Zanussi , Steven Rostedt , Sasha Levin Subject: [PATCH AUTOSEL 5.4 19/58] tracing: Fix number printing bug in print_synth_event() Date: Thu, 5 Mar 2020 12:13:40 -0500 Message-Id: <20200305171420.29595-19-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200305171420.29595-1-sashal@kernel.org> References: <20200305171420.29595-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tom Zanussi [ Upstream commit 784bd0847eda032ed2f3522f87250655a18c0190 ] Fix a varargs-related bug in print_synth_event() which resulted in strange output and oopses on 32-bit x86 systems. The problem is that trace_seq_printf() expects the varargs to match the format string, but print_synth_event() was always passing u64 values regardless. This results in unspecified behavior when unpacking with va_arg() in trace_seq_printf(). Add a function that takes the size into account when calling trace_seq_printf(). Before: modprobe-1731 [003] .... 919.039758: gen_synth_test: next_pid_field=777(null)next_comm_field=hula hoops ts_ns=1000000 ts_ms=1000 cpu=3(null)my_string_field=thneed my_int_field=598(null) After: insmod-1136 [001] .... 36.634590: gen_synth_test: next_pid_field=777 next_comm_field=hula hoops ts_ns=1000000 ts_ms=1000 cpu=1 my_string_field=thneed my_int_field=598 Link: http://lkml.kernel.org/r/a9b59eb515dbbd7d4abe53b347dccf7a8e285657.1581720155.git.zanussi@kernel.org Reported-by: Steven Rostedt (VMware) Signed-off-by: Tom Zanussi Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Sasha Levin --- kernel/trace/trace_events_hist.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index a31be3fce3e8e..6495800fb92a1 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -811,6 +811,29 @@ static const char *synth_field_fmt(char *type) return fmt; } +static void print_synth_event_num_val(struct trace_seq *s, + char *print_fmt, char *name, + int size, u64 val, char *space) +{ + switch (size) { + case 1: + trace_seq_printf(s, print_fmt, name, (u8)val, space); + break; + + case 2: + trace_seq_printf(s, print_fmt, name, (u16)val, space); + break; + + case 4: + trace_seq_printf(s, print_fmt, name, (u32)val, space); + break; + + default: + trace_seq_printf(s, print_fmt, name, val, space); + break; + } +} + static enum print_line_t print_synth_event(struct trace_iterator *iter, int flags, struct trace_event *event) @@ -849,10 +872,13 @@ static enum print_line_t print_synth_event(struct trace_iterator *iter, } else { struct trace_print_flags __flags[] = { __def_gfpflag_names, {-1, NULL} }; + char *space = (i == se->n_fields - 1 ? "" : " "); - trace_seq_printf(s, print_fmt, se->fields[i]->name, - entry->fields[n_u64], - i == se->n_fields - 1 ? "" : " "); + print_synth_event_num_val(s, print_fmt, + se->fields[i]->name, + se->fields[i]->size, + entry->fields[n_u64], + space); if (strcmp(se->fields[i]->type, "gfp_t") == 0) { trace_seq_puts(s, " ("); -- 2.20.1