Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp3164581pxb; Mon, 18 Apr 2022 17:48:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGftDBw5Ry5VqYgDZuyM5pwVp+LcUKutridjXDpvt45uIhtyHGmBq5kSJTr6d2wb+/8y33 X-Received: by 2002:a63:b58:0:b0:399:522b:d92f with SMTP id a24-20020a630b58000000b00399522bd92fmr12293662pgl.141.1650329291939; Mon, 18 Apr 2022 17:48:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650329291; cv=none; d=google.com; s=arc-20160816; b=vD/e2vhxmPumh077tUTOzGANvsP23VzYY8Lm9Zmbqd3KjvjSLlFkV4XHKaqiSSCrUs Fd9Uh+rtEq2haOk3g8B5eC7kLWC3HAWu3QQO8nKHQ0nhgEsWWDVzKcuOI+wpWqWuBmJ3 N+mVwtSodDcTykTORv9Wi8BBdGIRC0dKLzEEnzZ7eRyNAWMqXOptpNRb5VwnVhh6Y4mv WF+jaACH+aFUGiOE51iR0zOY7Jdqqjqsf64evBW0jwjKurtJG/sEIP4yUqDExDiRihAk JQVSr20ydVQzAf6Try+v846Z4YIN9YKVM5LWB0h3ZDm5SSkRkiwpPA0+wnOVz6D4Soud lpfw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=PuWG4tbvc1hTEDTVISbHvhDruRtzhiSTflSI2HNuUp4=; b=q/eIiBp6ijANTPYsdixNacOr6fXJxwe+6Zriw1D03/69JNNb2G2ZgDnEPVm4hMg66y a1XZAeFsqspDOFn59u2nYCCV10zf9ar77VefA9OHrkXcPfyRm/9eWotjpHTKQCIFxNfX w+0bxGpDrkyjzU13dutKv+i0Z5SOcuCKzvhiEdG2/CVZYWKYcfQS4UkrARrQuYIqDrAt deHI71SWlv0jN619SoM1JBjJ51TMiBQltoJoTQv/xWUGf3u3KqxOSL5D9T9nRpksTxQK Bj3tUxNtGH+2AxX3MLytyS590R8dWKSIabiMtX8i+Ai1FtboJxDwX90WfJ4PjHqsGfep LyPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CAdOalXH; 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=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d5-20020a170903230500b001588178e78dsi7485330plh.173.2022.04.18.17.47.55; Mon, 18 Apr 2022 17:48:11 -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=@linuxfoundation.org header.s=korg header.b=CAdOalXH; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238589AbiDRMZI (ORCPT + 99 others); Mon, 18 Apr 2022 08:25:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238794AbiDRMWu (ORCPT ); Mon, 18 Apr 2022 08:22:50 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F4E61EED0; Mon, 18 Apr 2022 05:18:18 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1657960F5F; Mon, 18 Apr 2022 12:18:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 075D0C385A8; Mon, 18 Apr 2022 12:18:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650284297; bh=VHz+JMItJlNxJ/mL/82Bz5jA5c3poz8XFUIXJ7SB86g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CAdOalXHXViu2WI0vnK13CQdFbLOV1EZ0z6Mr6kq2iYfuOob5ADTyirU0hObgBixL yu0c5RQVl6WOioVJMBve/eAx6dQDKqn+F2MhOZzWgqWL3paK0bO4Yv3chAdbVxgzlZ CLviTbdQXeRp4O5fUBYYUPb2TJ6o2pDHYSkVroIo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chuck Lever , Sasha Levin Subject: [PATCH 5.17 067/219] SUNRPC: Fix the svc_deferred_event trace class Date: Mon, 18 Apr 2022 14:10:36 +0200 Message-Id: <20220418121207.572204025@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121203.462784814@linuxfoundation.org> References: <20220418121203.462784814@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 From: Chuck Lever [ Upstream commit 4d5004451ab2218eab94a30e1841462c9316ba19 ] Fix a NULL deref crash that occurs when an svc_rqst is deferred while the sunrpc tracing subsystem is enabled. svc_revisit() sets dr->xprt to NULL, so it can't be relied upon in the tracepoint to provide the remote's address. Unfortunately we can't revert the "svc_deferred_class" hunk in commit ece200ddd54b ("sunrpc: Save remote presentation address in svc_xprt for trace events") because there is now a specific check of event format specifiers for unsafe dereferences. The warning that check emits is: event svc_defer_recv has unsafe dereference of argument 1 A "%pISpc" format specifier with a "struct sockaddr *" is indeed flagged by this check. Instead, take the brute-force approach used by the svcrdma_qp_error tracepoint. Convert the dr::addr field into a presentation address in the TP_fast_assign() arm of the trace event, and store that as a string. This fix can be backported to -stable kernels. In the meantime, commit c6ced22997ad ("tracing: Update print fmt check to handle new __get_sockaddr() macro") is now in v5.18, so this wonky fix can be replaced with __sockaddr() and friends properly during the v5.19 merge window. Fixes: ece200ddd54b ("sunrpc: Save remote presentation address in svc_xprt for trace events") Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- include/trace/events/sunrpc.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h index 5be3faf88c1a..06fe47fb3686 100644 --- a/include/trace/events/sunrpc.h +++ b/include/trace/events/sunrpc.h @@ -1956,17 +1956,18 @@ DECLARE_EVENT_CLASS(svc_deferred_event, TP_STRUCT__entry( __field(const void *, dr) __field(u32, xid) - __string(addr, dr->xprt->xpt_remotebuf) + __array(__u8, addr, INET6_ADDRSTRLEN + 10) ), TP_fast_assign( __entry->dr = dr; __entry->xid = be32_to_cpu(*(__be32 *)(dr->args + (dr->xprt_hlen>>2))); - __assign_str(addr, dr->xprt->xpt_remotebuf); + snprintf(__entry->addr, sizeof(__entry->addr) - 1, + "%pISpc", (struct sockaddr *)&dr->addr); ), - TP_printk("addr=%s dr=%p xid=0x%08x", __get_str(addr), __entry->dr, + TP_printk("addr=%s dr=%p xid=0x%08x", __entry->addr, __entry->dr, __entry->xid) ); -- 2.35.1