Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp834131yba; Wed, 24 Apr 2019 10:20:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqyE1i/9KzOnyakgpHG6kXYUsx8Drcr19N+ca4h5h/BJRepqcm6DG/kHiDNpkuS6lcc0WfXJ X-Received: by 2002:a17:902:c1:: with SMTP id a59mr32628222pla.176.1556126423500; Wed, 24 Apr 2019 10:20:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556126423; cv=none; d=google.com; s=arc-20160816; b=Du/HqgzlZlP99u0flNtpv/mREV18qzOjhqLV9RA51csFnvSEcDy/UQEdf+PKeheD4N +kSVpKIMMEiW+63Txg/8E3UsJC4tuRbzO3GeKHqXjm+98NhNhAl7IOtumzoJTCTURG5i V9PKlLLG9fPy8ySYFCtGwNFO4dH1Z5xAWx1Td4M+TvBngQpWWn0mXp8Ul5I13VsaCaEj 79IDVPx0m5IeFO1xS5O74HjVa48/Rnsn7iwD/MfQFJQ4FN/9PsbkYT6W5H5Hf7T69uIl 0EhYvsmlZs4c8VdNx3UAmyci7qSiUPOwPYhQ11C7n6TtIcAA+V996qj8hd3/d+gj2QML rytQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XURk8mVJKnjqh2/kS4B+kJp8o6MDHuBa5jIGDlp19a0=; b=FMikpNi3tC0T3BZy5duakOtFbFu5+/QBaDTtiskFxnOR+HSEYEirVWFEl22cTm22xU T912kLOHOdxnzIuTa4clMNx2ldfYmUERiwOPJx2hV/FTeT2liwZ0Ke2Zb7ogin/tK469 7k+Bdnow8x8cPkHeNQneu6ZDkNae7iO/GIt0mwz45ekKP0k4ZW5kivnEvAFw127u1yNp NKwCbRNxRVndOOMcPUD74svyTeGF1Lcld1TIVmWhAcsNIVdMsKRxsRcpOT9DHbhkorh6 vXfJT8jtG6qhVQJvpsbKQG+9y4EanJP6ufBrb1jPst+AZFeItOfrbaANbKFHzNyowY3e 9VqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Spg9nHtA; 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 c13si8014431pgm.206.2019.04.24.10.20.08; Wed, 24 Apr 2019 10:20:23 -0700 (PDT) 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; dkim=pass header.i=@kernel.org header.s=default header.b=Spg9nHtA; 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 S2388841AbfDXRS3 (ORCPT + 99 others); Wed, 24 Apr 2019 13:18:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:43486 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387929AbfDXRSZ (ORCPT ); Wed, 24 Apr 2019 13:18:25 -0400 Received: from localhost (62-193-50-229.as16211.net [62.193.50.229]) (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 B16952054F; Wed, 24 Apr 2019 17:18:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556126305; bh=9eRShUYR5yadJs5e5s0yTcDTOdNe1UqYKYluOKNEnWk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Spg9nHtAIRPOsUsXTyJXs5NZYB/9dQ7tonNsMwR8L/8u5DbehLy90vmIDehXHh2Rn ++jJvbQPSvlbBIZQ7xyKywaLWEPIohtSM1mYpTM8ii0Z7+bdOa1AVaHBKDK0Rpc8le Rry2Q0dwBOW1vyhZuBk2iEwABvM0rG90aKgrg+Do= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Coly Li , Jens Axboe , Sasha Levin Subject: [PATCH 4.4 048/168] bcache: improve sysfs_strtoul_clamp() Date: Wed, 24 Apr 2019 19:08:12 +0200 Message-Id: <20190424170926.641232146@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190424170923.452349382@linuxfoundation.org> References: <20190424170923.452349382@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 596b5a5dd1bc2fa019fdaaae522ef331deef927f ] Currently sysfs_strtoul_clamp() is defined as, 82 #define sysfs_strtoul_clamp(file, var, min, max) \ 83 do { \ 84 if (attr == &sysfs_ ## file) \ 85 return strtoul_safe_clamp(buf, var, min, max) \ 86 ?: (ssize_t) size; \ 87 } while (0) The problem is, if bit width of var is less then unsigned long, min and max may not protect var from integer overflow, because overflow happens in strtoul_safe_clamp() before checking min and max. To fix such overflow in sysfs_strtoul_clamp(), to make min and max take effect, this patch adds an unsigned long variable, and uses it to macro strtoul_safe_clamp() to convert an unsigned long value in range defined by [min, max]. Then assign this value to var. By this method, if bit width of var is less than unsigned long, integer overflow won't happen before min and max are checking. Now sysfs_strtoul_clamp() can properly handle smaller data type like unsigned int, of cause min and max should be defined in range of unsigned int too. Signed-off-by: Coly Li Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/md/bcache/sysfs.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/md/bcache/sysfs.h b/drivers/md/bcache/sysfs.h index 0526fe92a683..e7a3c12aa66f 100644 --- a/drivers/md/bcache/sysfs.h +++ b/drivers/md/bcache/sysfs.h @@ -80,9 +80,16 @@ do { \ #define sysfs_strtoul_clamp(file, var, min, max) \ do { \ - if (attr == &sysfs_ ## file) \ - return strtoul_safe_clamp(buf, var, min, max) \ - ?: (ssize_t) size; \ + if (attr == &sysfs_ ## file) { \ + unsigned long v = 0; \ + ssize_t ret; \ + ret = strtoul_safe_clamp(buf, v, min, max); \ + if (!ret) { \ + var = v; \ + return size; \ + } \ + return ret; \ + } \ } while (0) #define strtoul_or_return(cp) \ -- 2.19.1