Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp581040ybz; Fri, 17 Apr 2020 06:31:51 -0700 (PDT) X-Google-Smtp-Source: APiQypJ7nEZsdFbKUnyYvHilCNRmSuQw4Vlyox9+hG9Tk9m8YohU63hhZSZST74O8GJDtMP5XZgz X-Received: by 2002:a17:907:361:: with SMTP id rs1mr3096108ejb.228.1587130311433; Fri, 17 Apr 2020 06:31:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587130311; cv=none; d=google.com; s=arc-20160816; b=VTPSPW0EnXJK31p5tJ8mpNYrZqLSyNo1Ea4MUU+4h7dL9oBb4mbu7dA0pPJx5hsK47 Gtv5t+39NYySqyKeNVGI9P008swIhiQX9sc0vjtDJLqTWjZggAJjKvZUY6gqUmKPVexk wafltb5Km+YGvc4d0+eJ88Du8fl8raCSLac//5eT1Jsbjz7m2oBSMI15VW0GSGv0j/BD aTPdSKqktf1TwMmfG7TlW5cg8HGkBOuUgaxfo21JR7oHQCjkADH9zi3w/s9fbyCwpQ4z Wzlyy7l1xKFKnHo3dFTFfKYlPXWDIAHEFB7GLHPf7OLAZdLC+sKfxYeQLc7nOnQ8C5Xu qacw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=TljsoEDjyMcR2VV9rxLY2Nah9t5zHWZQVAPD/DD3oSo=; b=eWJDbzwppI7s5B+eVcOZqEUFtPcR6EFIz2p1edPFSSMOmoR3IJ+60Duog8BXwyTHqj w79GldZ+DerPyz2z0HzhCKr3Mbt5ZkS2QqghDv8QNBzqpBkr+5FLZje5j4OGHz/MJNKU ImtIXlAakkoiP9frWytp1yp/R/B61EtLZn5qz1EFIMkNuGaiOx0oC5vGn8FLKvDh38Eg Vzsz3kkOXjT0Yu3iwe58vqqnyafB++yV87TmSe5IKnJcwsfDW0HkBB4VI0HdXU66xA/O EL/+ZZYDXloHt1Enmw6tK72GDQ22JUoRSzGIW2UAfKggOF5rGvp4BiteF8liYgtYhPO9 iP7w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i6si3299654edn.85.2020.04.17.06.31.27; Fri, 17 Apr 2020 06:31:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730639AbgDQN21 (ORCPT + 99 others); Fri, 17 Apr 2020 09:28:27 -0400 Received: from smtp12.smtpout.orange.fr ([80.12.242.134]:18088 "EHLO smtp.smtpout.orange.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730322AbgDQN21 (ORCPT ); Fri, 17 Apr 2020 09:28:27 -0400 Received: from [192.168.42.210] ([93.22.148.45]) by mwinf5d47 with ME id TpUM2200B0z0B2t03pUMXb; Fri, 17 Apr 2020 15:28:23 +0200 X-ME-Helo: [192.168.42.210] X-ME-Auth: Y2hyaXN0b3BoZS5qYWlsbGV0QHdhbmFkb28uZnI= X-ME-Date: Fri, 17 Apr 2020 15:28:23 +0200 X-ME-IP: 93.22.148.45 Subject: Re: [PATCH] RDMA/ocrdma: Fix an off-by-one issue in 'ocrdma_add_stat' To: Jason Gunthorpe Cc: selvin.xavier@broadcom.com, devesh.sharma@broadcom.com, dledford@redhat.com, leon@kernel.org, colin.king@canonical.com, roland@purestorage.com, linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org References: <20200328073040.24429-1-christophe.jaillet@wanadoo.fr> <20200414183441.GA28870@ziepe.ca> From: Marion & Christophe JAILLET Message-ID: <8c17ed4f-fb29-4ff8-35db-afab284c6e71@wanadoo.fr> Date: Fri, 17 Apr 2020 15:28:21 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200414183441.GA28870@ziepe.ca> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 14/04/2020 à 20:34, Jason Gunthorpe a écrit : > On Sat, Mar 28, 2020 at 08:30:40AM +0100, Christophe JAILLET wrote: >> There is an off-by-one issue when checking if there is enough space in the >> output buffer, because we must keep some place for a final '\0'. >> >> While at it: >> - Use 'scnprintf' instead of 'snprintf' in order to avoid a superfluous >> 'strlen' >> - avoid some useless initializations >> - avoida hard coded buffer size that can be computed at built time. >> >> Fixes: a51f06e1679e ("RDMA/ocrdma: Query controller information") >> Signed-off-by: Christophe JAILLET >> --- >> The '\0' comes from memset(..., 0, ...) in all callers. >> This could be also avoided if needed. >> --- >> drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 9 ++++----- >> 1 file changed, 4 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c >> index 5f831e3bdbad..614a449e6b87 100644 >> --- a/drivers/infiniband/hw/ocrdma/ocrdma_stats.c >> +++ b/drivers/infiniband/hw/ocrdma/ocrdma_stats.c >> @@ -49,13 +49,12 @@ static struct dentry *ocrdma_dbgfs_dir; >> static int ocrdma_add_stat(char *start, char *pcur, >> char *name, u64 count) >> { >> - char buff[128] = {0}; >> - int cpy_len = 0; >> + char buff[128]; >> + int cpy_len; >> >> - snprintf(buff, 128, "%s: %llu\n", name, count); >> - cpy_len = strlen(buff); >> + cpy_len = scnprintf(buff, sizeof(buff), "%s: %llu\n", name, count); >> >> - if (pcur + cpy_len > start + OCRDMA_MAX_DBGFS_MEM) { >> + if (pcur + cpy_len >= start + OCRDMA_MAX_DBGFS_MEM) { >> pr_err("%s: No space in stats buff\n", __func__); >> return 0; >> } > The memcpy is still kind of silly right? What about this: > > static int ocrdma_add_stat(char *start, char *pcur, char *name, u64 count) > { > size_t len = (start + OCRDMA_MAX_DBGFS_MEM) - pcur; > int cpy_len; > > cpy_len = snprintf(pcur, len, "%s: %llu\n", name, count); > if (cpy_len >= len || cpy_len < 0) { > pr_err("%s: No space in stats buff\n", __func__); > return 0; > } > return cpy_len; > } > > Jason It can looks useless, but I think that the goal was to make sure that we would not display truncated data. Each line is either complete or absent. I don't have any strong opinion of what is best, but I can understand the current logic. This function is not a hot spot, so useless memcpy is not a big issue. CJ