Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp21493791rwd; Thu, 29 Jun 2023 17:26:34 -0700 (PDT) X-Google-Smtp-Source: APBJJlGgH4CHumeyJrPC9jrrYOFWwhfTyb5ok6t/ZuTzhTJMMCqQR7vb5sNwpJpy5ANXOIKgOoj0 X-Received: by 2002:a05:6a20:2595:b0:10c:38d3:437c with SMTP id k21-20020a056a20259500b0010c38d3437cmr1172404pzd.58.1688084794086; Thu, 29 Jun 2023 17:26:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688084794; cv=none; d=google.com; s=arc-20160816; b=dWP2MQYW4gVvOj7bQNm2IHN2i2HfPy3VF7r5w8pdT/wbK7FXhK4+ca6eh/Op0y1qCq gW7/H8uFiWsxlxVbr/AS2kaXTRi9l0kGXLBj/7qSn4gE6q/qKbg4zrXUAiNW/croSudS XeP5TEfscvffoOD6Mz0wWYR7eGLRwP74K19M+76ONLUj1Wa38cWjIiKXYBs8dZi47Kv6 gNaZTx8AMd9gCia7D6lMgN6Ajb8EKIwMS0GWh7qBnoedYPMPinbnvhwJ2dh54cjh9QWw HMzIC3o/qSPlyO1OHI8C+MUJULTZI8b2fgRUcxtaw3PGBC4a9o1CSx4Wt+G3p1ofxRYp SgFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=gCxckCcdhkcYSNpOGc+UHMmZw5sSgaEy+c0gjwxBW/Q=; fh=p4jcC6qPA5R6qIqhMXvm4Q5Zg5H5ZjhkM/jXdOBVsQs=; b=sSjGMzwm7klNJAXdHTjfYI6HF2yQjMCOrBsTmh0jqh13VnTBk1YnAxwvuMYDjLPIqV 8zc60rVZq7qolcq/7kWwZguTdeSAl5rd4UCJXP6H65krI07qeKveSxgs6PlTMeOh1NCs 3tcd5ma4TH0eBoQX8O8IGgFmmJG29SK6S7LRN8dBo77MmmRsqFZsVocJpiNmtr+S1a7w ZmUO7D+2hfhkDr4Yy7Ds3L77kODrxZLeBsR4n1bRpfvNyuQPcGiiYNluCEUjwz5vkLt/ Vd4vM8SR6Mfm+GV410rmykTJntqpukrcsaydq7aqes6HK89StuSC3Yyvr4VdHPb9oXlW fOyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=BZlKCwXe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r36-20020a632064000000b0054fe7239928si11987446pgm.388.2023.06.29.17.26.20; Thu, 29 Jun 2023 17:26:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=BZlKCwXe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231269AbjF2XvE (ORCPT + 99 others); Thu, 29 Jun 2023 19:51:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40424 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230286AbjF2Xu4 (ORCPT ); Thu, 29 Jun 2023 19:50:56 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 973D430F1; Thu, 29 Jun 2023 16:50:55 -0700 (PDT) Received: from CPC-beaub-VBQ1L.localdomain (unknown [4.155.48.123]) by linux.microsoft.com (Postfix) with ESMTPSA id AA4AD208396B; Thu, 29 Jun 2023 16:50:54 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com AA4AD208396B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1688082654; bh=gCxckCcdhkcYSNpOGc+UHMmZw5sSgaEy+c0gjwxBW/Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BZlKCwXeupqEmLSMFQsH4rfdDLmvfpxma01KBAaL01XCt0ehHvzVGlrOcbTYEuk9H LIPTkaXf0toboei85ZVGoBtPtrwvrozJKh2jpCgntl0E+uNdwwS3M65B3Fg31U5eg5 B8zZddU70CKUl6TYMkQM3i1mqVL+h4vEGKqM0XqQ= From: Beau Belgrave To: rostedt@goodmis.org, mhiramat@kernel.org Cc: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH 1/2] tracing/user_events: Fix struct arg size match check Date: Thu, 29 Jun 2023 23:50:48 +0000 Message-Id: <20230629235049.581-2-beaub@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230629235049.581-1-beaub@linux.microsoft.com> References: <20230629235049.581-1-beaub@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-19.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When users register an event the name of the event and it's argument are checked to ensure they match if the event already exists. Normally all arguments are in the form of "type name", except for when the type starts with "struct ". In those cases, the size of the struct is passed in addition to the name, IE: "struct my_struct a 20" for an argument that is of type "struct my_struct" with a field name of "a" and has the size of 20 bytes. The current code does not honor the above case properly when comparing a match. This causes the event register to fail even when the same string was used for events that contain a struct argument within them. The example above "struct my_struct a 20" generates a match string of "struct my_struct a" omitting the size field. Add the struct size of the existing field when generating a comparison string for a struct field to ensure proper match checking. Fixes: e6f89a149872 ("tracing/user_events: Ensure user provided strings are safely formatted") Signed-off-by: Beau Belgrave --- kernel/trace/trace_events_user.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c index 8df0550415e7..5c787fe48d53 100644 --- a/kernel/trace/trace_events_user.c +++ b/kernel/trace/trace_events_user.c @@ -1317,6 +1317,9 @@ static int user_field_set_string(struct ftrace_event_field *field, pos += snprintf(buf + pos, LEN_OR_ZERO, " "); pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", field->name); + if (str_has_prefix(field->type, "struct ")) + pos += snprintf(buf + pos, LEN_OR_ZERO, " %d", field->size); + if (colon) pos += snprintf(buf + pos, LEN_OR_ZERO, ";"); -- 2.34.1