Received: by 10.223.185.116 with SMTP id b49csp1050161wrg; Wed, 21 Feb 2018 11:12:06 -0800 (PST) X-Google-Smtp-Source: AH8x2259Z0XmjXSVlAQf5S8Mo5nEN+esLARQsLfDhx/C/8pK4D1NY2Odiq8zkYfEz4TorcSjmuV0 X-Received: by 10.99.49.198 with SMTP id x189mr3529280pgx.135.1519240326841; Wed, 21 Feb 2018 11:12:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519240326; cv=none; d=google.com; s=arc-20160816; b=QjyRYC5PDJ2ABqmEkssmy4dfGXXpiC1O/EuBOVW8TGJlDAmxXxpu9RScR8lIyXGDcA ug31wYyfUsvM4NiJkGzC8tpCZTwFfAcPO03BVx82NtHoe9QIhsw+L2kmdUQjhTXgWsFF W1R7bf8BXXMtH2KEKT/Ttb+SfbJ+tyFNZdbaigouoLxir+Z/DsWjCzPZSHMjScfY9hp8 QFgHc7yVxhVYEebEWrLuibEF6aVY9AwU/cFBERT6xULzdOKDH38pMV+hPBkvI9DT4oo1 L3uSxioETkp257JMddL1T0DAXTMLT/LMzqKKFtPjLdZAQLlKuV0y/RHtPKso+VXUq+vJ 33DQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dmarc-filter:arc-authentication-results; bh=JJpXbkHexwTUJjbIJaItVEp1u0a6sjVNZpXh+Ayn3GE=; b=r40BRRzqWQULbRNflcPe/ZhuBxOSQLzLu9fNJOIL+73p0Kmy+BV2ypQkQtPB1XOUjp 6S9KMG9103vn1jcAc+S9/VuQWJLxLrZWjwMlLmVIL3kXKloWGtuQxe9x/8ci3OAvwrTb sTHKuC84aKssBRrlGU1QohZAceoJdM2XVTnM0APIq+WVWVMxtsgZ+0iQD5MIH6Tro7Tu tbSbxcihTsEAkLzTtujG70K5cz1bj7PAuNKKYmu1LwmVwBg3h6WhbfwnrlV/YONgc7vd KjY+sgalwABGkeFYXfO4Ioz0ECuiJKcMZa7sz3o/f3EPY0h+zsrFVgvHfDl3FHVIW7Eg ussg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s1si7322402pge.422.2018.02.21.11.11.52; Wed, 21 Feb 2018 11:12:06 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965971AbeBURtF (ORCPT + 99 others); Wed, 21 Feb 2018 12:49:05 -0500 Received: from mail.kernel.org ([198.145.29.99]:55084 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933603AbeBURs6 (ORCPT ); Wed, 21 Feb 2018 12:48:58 -0500 Received: from kernel.org (unknown [24.6.201.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 61B6321796; Wed, 21 Feb 2018 17:48:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 61B6321796 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=shli@kernel.org Date: Wed, 21 Feb 2018 09:48:55 -0800 From: Shaohua Li To: Arnd Bergmann Cc: NeilBrown , Artur Paszkiewicz , Jens Axboe , Song Liu , Guoqing Jiang , linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] md: raid5: avoid string overflow warning Message-ID: <20180221174855.jq2wqrxntwvaocmv@kernel.org> References: <20180220130924.3698067-1-arnd@arndb.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180220130924.3698067-1-arnd@arndb.de> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 20, 2018 at 02:09:11PM +0100, Arnd Bergmann wrote: > gcc warns about a possible overflow of the kmem_cache string, when adding > four characters to a string of the same length: > > drivers/md/raid5.c: In function 'setup_conf': > drivers/md/raid5.c:2207:34: error: '-alt' directive writing 4 bytes into a region of size between 1 and 32 [-Werror=format-overflow=] > sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]); > ^~~~ > drivers/md/raid5.c:2207:2: note: 'sprintf' output between 5 and 36 bytes into a destination of size 32 > sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > If I'm counting correctly, we need 11 characters for the fixed part > of the string and 18 characters for a 64-bit pointer (when no gendisk > is used), so that leaves three characters for conf->level, which should > always be sufficient. > > This makes the code use snprintf() with the correct length, to > make the code more robust against changes, and to get the compiler > to shut up. > > In commit f4be6b43f1ac ("md/raid5: ensure we create a unique name for > kmem_cache when mddev has no gendisk") from 2010, Neil said that > the pointer could be removed "shortly" once devices without gendisk > are disallowed. I have no idea if that happened, but if it did, that > should probably be changed as well. > > Signed-off-by: Arnd Bergmann Applied, thanks! > --- > drivers/md/raid5.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c > index 50d01144b805..7ef368061424 100644 > --- a/drivers/md/raid5.c > +++ b/drivers/md/raid5.c > @@ -2196,15 +2196,16 @@ static int grow_one_stripe(struct r5conf *conf, gfp_t gfp) > static int grow_stripes(struct r5conf *conf, int num) > { > struct kmem_cache *sc; > + size_t namelen = sizeof(conf->cache_name[0]); > int devs = max(conf->raid_disks, conf->previous_raid_disks); > > if (conf->mddev->gendisk) > - sprintf(conf->cache_name[0], > + snprintf(conf->cache_name[0], namelen, > "raid%d-%s", conf->level, mdname(conf->mddev)); > else > - sprintf(conf->cache_name[0], > + snprintf(conf->cache_name[0], namelen, > "raid%d-%p", conf->level, conf->mddev); > - sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]); > + snprintf(conf->cache_name[1], namelen, "%.27s-alt", conf->cache_name[0]); > > conf->active_name = 0; > sc = kmem_cache_create(conf->cache_name[conf->active_name], > -- > 2.9.0 >