Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp2009297pxb; Thu, 16 Sep 2021 23:16:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyb+jPgLn02Oa782RnFZTGGG9Rj19A7TtqLDqK7M3R7HPHIhW93b52a53ftDzscGBm4J4xp X-Received: by 2002:a05:6e02:152b:: with SMTP id i11mr6990729ilu.65.1631859360060; Thu, 16 Sep 2021 23:16:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631859360; cv=none; d=google.com; s=arc-20160816; b=aOhc98FVt5HGXbeePekQfea340RNiR69241ZFMbVPF+esT5aL2DEex6EOLdS6g2NRB YDLFLo6AYUVj6J3apNDylriCA+DiYVXa180wf4OtpobG2r9PF97dImnyvu/mgdypa5nt 8RYz1TXN040gBN9z7U0Kqa2pTX60YXUtZUZf+tU/ambJ0QTBSSQ3XSRE3gP/PST6hi8Q PF282NOCptQla2Fs7YubWy7Flm9ozGdEJymDVPDLRur/8g01NJcE+JUP3RDYN5NgThX2 2HQktLjCIVQZxWT1nhHZHyS9beaLRHjOm3WQ2By0l96Ocs2UaiVLzTwzWd0qp02tJyJq 1iRw== 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:message-id:date:cc:to:from:subject; bh=K6Kt4GGz/jticqOTENqTfLk0rNzzyuX9Pxt1+/wyOUU=; b=BtyRRtVjElLSGlASEk18/9txqYHKTVqomRQ5/v0lp0eZnoNErc1LuhzqEAtX6bcunb FUplWrI4gfDJx8hTk00JCHcfNQdbx6chHHcCrPZVtEZNsd67i29sMKgpn+fngHDb/AO7 LRb6xRLNYzdSS0am43uetZ9nIyxcB9JueUUVX4M3ejsJ4CbbSZ+2MLUmSJpyrpj7j+sL +WnV6scVjPC8vOzvU9PM/Pl3CZl8UHSKswTnesRMZwWUnrIdet/pPKPPv54EvJg8b7Nq KnXcrVulzcLqQROdIyOjQiYTOm/zV+C5F1PHdvJDsGKdv2q0kBL2KPcVhvRwUhEJKit5 vFaw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r14si5062566ill.73.2021.09.16.23.15.48; Thu, 16 Sep 2021 23:16:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243467AbhIPTFG (ORCPT + 99 others); Thu, 16 Sep 2021 15:05:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:49490 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241775AbhIPTEy (ORCPT ); Thu, 16 Sep 2021 15:04:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 86CEA61207; Thu, 16 Sep 2021 19:03:33 +0000 (UTC) Subject: [PATCH] NLM: Remove svcxdr_encode_owner() From: Chuck Lever To: dai.ngo@oracle.com Cc: linux-nfs@vger.kernel.org Date: Thu, 16 Sep 2021 15:03:32 -0400 Message-ID: <163181894199.1110.356714948732645250.stgit@bazille.1015granger.net> User-Agent: StGit/1.1+62.ged16 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Dai Ngo reports that, since the XDR overhaul, the NLM server crashes when the TEST procedure wants to return NLM_DENIED. There is a bug in svcxdr_encode_owner() that none of our standard test cases found. Replace the open-coded function with a call to an appropriate pre-fabricated XDR helper. Reported-by: Dai Ngo Signed-off-by: Chuck Lever --- fs/lockd/svcxdr.h | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) This might be a little better for the long term. Comments? diff --git a/fs/lockd/svcxdr.h b/fs/lockd/svcxdr.h index c69a0bb76c94..805fb19144d7 100644 --- a/fs/lockd/svcxdr.h +++ b/fs/lockd/svcxdr.h @@ -134,18 +134,9 @@ svcxdr_decode_owner(struct xdr_stream *xdr, struct xdr_netobj *obj) static inline bool svcxdr_encode_owner(struct xdr_stream *xdr, const struct xdr_netobj *obj) { - unsigned int quadlen = XDR_QUADLEN(obj->len); - __be32 *p; - - if (xdr_stream_encode_u32(xdr, obj->len) < 0) - return false; - p = xdr_reserve_space(xdr, obj->len); - if (!p) + if (unlikely(obj->len > XDR_MAX_NETOBJ)) return false; - p[quadlen - 1] = 0; /* XDR pad */ - memcpy(p, obj->data, obj->len); - - return true; + return xdr_stream_encode_opaque(xdr, obj->data, obj->len) > 0; } #endif /* _LOCKD_SVCXDR_H_ */