Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp3200389pxb; Sat, 26 Mar 2022 13:19:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPRKny4tcStcbS+bI24Y4O7GMZ9b7HJWsmnPPg/ilsNXZ36MGDGZhLb+2sgTlT3fndco6J X-Received: by 2002:a05:6402:d69:b0:418:f7bd:b076 with SMTP id ec41-20020a0564020d6900b00418f7bdb076mr6568142edb.268.1648325997478; Sat, 26 Mar 2022 13:19:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648325997; cv=none; d=google.com; s=arc-20160816; b=uMeEIBRbwHUNJ7mV3PeXF7tX+NiRkjsxhmZ7Xyc1KKpbuc3Ogswo6JPBI4ZxkhxEvq ENBerlTSQ1IoQSAbo4DIZGrjXKSEnYU1MSTXKyQ6x/SsKtf3rcYPljV7QLmOU69oCarJ J2MBpB0qS5dpJ99r4o6eq3U0vrRZhmZhcC3f8prIpMb/w2epASi9YBUZHErSuhOhREBU mpeSct/L0HX/800m1zbxyPrRH7p2LVd5b8JLqZo5XzesWBvB7vbLy2UHoLPi1EispuHj UmCCAIR2MHTTDSQ6+7IlcQ+7VNdV1OUAnfPpO31pcaq5GiOYRhUdC+scNlrx/1Zx9OWY R+Zg== 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 :message-id:date:subject:cc:to:from; bh=IVCZ7GxJL+2BqIPUSgCKEok3kTJpfE/M3GcVZfIBazI=; b=WF3gfUYmD6BWQcaAcR/63p8Wj3ULoYir3p8WbrLrZVHsKRK1SzrQ6Y2dayG3Vk9fFP wSHpclXyjcMAyY5Ri5/K5jqH9hfX/tEyxQueMH4VQpxZFAb6guUj60kjWDlcXEG0PQFh THMy519xCIEI9mi/mSEWKI1Ct6WkVqiGPe5mtl1doOWY/Du0D3lG4okP3/WH9qsxH4mV Ky2ToZYe1YFhR2j6645UnkG3IfLxTuouhU4b8dC4Saqdy7jRy+5eqbsa+7fDyLmUfyf4 oj6V/SrY79HrrCLTP58COu10Ri6Seu4XJGM4+PCsp77tVfFOrquheX8aLnHMoQcB/qdp ossg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id la3-20020a170907780300b006e00c59f3a6si7392569ejc.921.2022.03.26.13.19.32; Sat, 26 Mar 2022 13:19:57 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233287AbiCZOwc (ORCPT + 99 others); Sat, 26 Mar 2022 10:52:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232561AbiCZOw2 (ORCPT ); Sat, 26 Mar 2022 10:52:28 -0400 Received: from smtp.smtpout.orange.fr (smtp08.smtpout.orange.fr [80.12.242.130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 31F732467EC for ; Sat, 26 Mar 2022 07:50:51 -0700 (PDT) Received: from pop-os.home ([90.126.236.122]) by smtp.orange.fr with ESMTPA id Y7kdn2IzuxHdTY7kdnd4rD; Sat, 26 Mar 2022 15:50:49 +0100 X-ME-Helo: pop-os.home X-ME-Auth: YWZlNiIxYWMyZDliZWIzOTcwYTEyYzlhMmU3ZiQ1M2U2MzfzZDfyZTMxZTBkMTYyNDBjNDJlZmQ3ZQ== X-ME-Date: Sat, 26 Mar 2022 15:50:49 +0100 X-ME-IP: 90.126.236.122 From: Christophe JAILLET To: Jens Axboe , Hannes Reinecke , Jan Kara Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org, Christophe JAILLET , linux-block@vger.kernel.org Subject: [PATCH] block: Fix the maximum minor value is blk_alloc_ext_minor() Date: Sat, 26 Mar 2022 15:50:46 +0100 Message-Id: X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,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 ida_alloc_range(..., min, max, ...) returns values from min to max, inclusive. So, NR_EXT_DEVT is a valid idx returned by blk_alloc_ext_minor(). This is an issue because in device_add_disk(), this value is used in: ddev->devt = MKDEV(disk->major, disk->first_minor); and NR_EXT_DEVT is '(1 << MINORBITS)'. So, should 'disk->first_minor' be NR_EXT_DEVT, it would overflow. Fixes: 22ae8ce8b892 ("block: simplify bdev/disk lookup in blkdev_get") Signed-off-by: Christophe JAILLET --- #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) This patch is completely speculative, but it seems that idr_alloc() and ida_alloc_range() don't have the same semantic regarding the upper bound. idr_alloc() looks exclusive, while ida_alloc_range() is inclusive. We changed from the first one to the other one in the commit in Fixes:. --- block/genhd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/genhd.c b/block/genhd.c index c9a4fc90d3e9..b8b6759d670f 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -335,7 +335,7 @@ int blk_alloc_ext_minor(void) { int idx; - idx = ida_alloc_range(&ext_devt_ida, 0, NR_EXT_DEVT, GFP_KERNEL); + idx = ida_alloc_range(&ext_devt_ida, 0, NR_EXT_DEVT - 1, GFP_KERNEL); if (idx == -ENOSPC) return -EBUSY; return idx; -- 2.32.0