Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp715104pxb; Tue, 5 Apr 2022 20:01:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzxhTFv2z0cIGaNLci0CNxvqYpkvZSavHQ3xsNOMFsMIoh+Z5FVw/UzihxzGJTmJr854ZgD X-Received: by 2002:a63:3f84:0:b0:381:f11:20d7 with SMTP id m126-20020a633f84000000b003810f1120d7mr5425126pga.612.1649214105952; Tue, 05 Apr 2022 20:01:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649214105; cv=none; d=google.com; s=arc-20160816; b=HkHZJ2q30X/TvYJ5SPg+iagwHmgk4L31GC4iJNTik4R9J5J2VFhNWVla9r5DEzZuJ1 ksg8Vu4FA7klk+fT+ayp3iKVA7fM0pYpz0dVMC3zBzPVsIZHYjzpx1T7XClgss6Ai+zj P7BXKdtMnogHDLzp14QjTZHHuSPqXsyOC429hH2fP2p4OQTHfr47WUxGGW7XGJ3KLYNp t7WfeFWwT5ctrNAd89aJ13ypKAU0aTY4Sdj/2CpQhcb8dxefeFmQDBXe9A+qn2hl8UiZ yk/qAkUI+AlZ9Cbj4Hb1ieSzJqn5LLzB5zdRqOriIFB53JFHi48wrKbtIyf+1qtYGcCs Stpw== 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=YaBO9NCxhAJyuF/c9+9KNoHmRogkRBcCXWnFaJDyKPk=; b=pdBD3rWns1KC9p3mVtrp5wnB1usjxiWxbtaFDuVuV2F1QaN7MorSQXKDiqKB3Nta6f uuWYOczAd1QGCd3jZKEoVAlIqOsZC8F9hLspZBdYh7m+iiF7Vs8rxxqZGea+kOozSZRF wGN0TeAdrUvIOLdbvNljRrIu+e63EN6EiL0+AAx/hFuJBORfLp32BQ6EBiplxPnZvKYP B/S4RTnFtOG9Y7YKBLbtYsGuJmvFlrt8bZ8ui5qauIiBiUyP6ymC7hocLGm1wgRY9OKE LkpjSZpDpB6dQ7gnKrp78bK5l4p0Aa5INNjs9ZYSvpwcfMuttZAnbRkp6t+KGchq8BTb BRnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sFKzmcBb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id cm8-20020a056a00338800b004fa3a8e0087si2508727pfb.318.2022.04.05.20.01.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Apr 2022 20:01:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sFKzmcBb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 1C5531DFDD8; Tue, 5 Apr 2022 19:47:27 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345532AbiDEKld (ORCPT + 99 others); Tue, 5 Apr 2022 06:41:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241234AbiDEIc5 (ORCPT ); Tue, 5 Apr 2022 04:32:57 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 818D0D8A; Tue, 5 Apr 2022 01:30:12 -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 ams.source.kernel.org (Postfix) with ESMTPS id 353C1B81BC5; Tue, 5 Apr 2022 08:30:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98B42C385A1; Tue, 5 Apr 2022 08:30:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649147410; bh=89+pR9PH12ki5m/MYnRkohyxE/wShs8jdpgwEW/JbyQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sFKzmcBbla+jn9uLmKVCyl9ZLwxvWhBqbVrY5b4id80JBkHYfGsW8p80kL8XFkFhW So+LFi+kEqkfTuldxXwxvPlFbJZpEgqVfImsUwfQWi9PDxHuI1HfLClyIaEpeI50kz x8c4ji5sAxbpiB8eEr5g0WtpN7oFBSr4MClfw8ao= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zhang Wensheng , Josef Bacik , Jens Axboe Subject: [PATCH 5.17 1087/1126] nbd: fix possible overflow on first_minor in nbd_dev_add() Date: Tue, 5 Apr 2022 09:30:34 +0200 Message-Id: <20220405070439.356293544@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070407.513532867@linuxfoundation.org> References: <20220405070407.513532867@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=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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: Zhang Wensheng commit 6d35d04a9e18990040e87d2bbf72689252669d54 upstream. When 'index' is a big numbers, it may become negative which forced to 'int'. then 'index << part_shift' might overflow to a positive value that is not greater than '0xfffff', then sysfs might complains about duplicate creation. Because of this, move the 'index' judgment to the front will fix it and be better. Fixes: b0d9111a2d53 ("nbd: use an idr to keep track of nbd devices") Fixes: 940c264984fd ("nbd: fix possible overflow for 'first_minor' in nbd_dev_add()") Signed-off-by: Zhang Wensheng Reviewed-by: Josef Bacik Link: https://lore.kernel.org/r/20220310093224.4002895-1-zhangwensheng5@huawei.com Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- drivers/block/nbd.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -1800,17 +1800,6 @@ static struct nbd_device *nbd_dev_add(in refcount_set(&nbd->refs, 0); INIT_LIST_HEAD(&nbd->list); disk->major = NBD_MAJOR; - - /* Too big first_minor can cause duplicate creation of - * sysfs files/links, since index << part_shift might overflow, or - * MKDEV() expect that the max bits of first_minor is 20. - */ - disk->first_minor = index << part_shift; - if (disk->first_minor < index || disk->first_minor > MINORMASK) { - err = -EINVAL; - goto out_free_work; - } - disk->minors = 1 << part_shift; disk->fops = &nbd_fops; disk->private_data = nbd; @@ -1915,8 +1904,19 @@ static int nbd_genl_connect(struct sk_bu if (!netlink_capable(skb, CAP_SYS_ADMIN)) return -EPERM; - if (info->attrs[NBD_ATTR_INDEX]) + if (info->attrs[NBD_ATTR_INDEX]) { index = nla_get_u32(info->attrs[NBD_ATTR_INDEX]); + + /* + * Too big first_minor can cause duplicate creation of + * sysfs files/links, since index << part_shift might overflow, or + * MKDEV() expect that the max bits of first_minor is 20. + */ + if (index < 0 || index > MINORMASK >> part_shift) { + printk(KERN_ERR "nbd: illegal input index %d\n", index); + return -EINVAL; + } + } if (!info->attrs[NBD_ATTR_SOCKETS]) { printk(KERN_ERR "nbd: must specify at least one socket\n"); return -EINVAL;