Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752737AbbF2Hp0 (ORCPT ); Mon, 29 Jun 2015 03:45:26 -0400 Received: from mga09.intel.com ([134.134.136.24]:3914 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751217AbbF2HpS (ORCPT ); Mon, 29 Jun 2015 03:45:18 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,697,1427785200"; d="scan'208";a="719425485" Message-ID: <5592487D.7080006@intel.com> Date: Tue, 30 Jun 2015 15:42:53 +0800 From: Pan Xinhui User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: "linux-kernel@vger.kernel.org" CC: akpm@linux-foundation.org, linux@rasmusvillemoes.dk, tj@kernel.org, peterz@infradead.org, sudeep.holla@arm.com, mina86@mina86.com, yury.norov@gmail.com, "mnipxh@163.com" Subject: [PATCH] lib/bitmap.c: return -EINVAL for grouping errors in __bitmap_parselist Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1491 Lines: 50 Sometimes the input from user may cause an unexpected result. just like __bitmap_parse, we return -EINVAL if there is no avaiable digit in each parsing procedures. Signed-off-by: Pan Xinhui --- lib/bitmap.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/bitmap.c b/lib/bitmap.c index 64c0926..995fca2 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -504,7 +504,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen, int nmaskbits) { unsigned a, b; - int c, old_c, totaldigits; + int c, old_c, totaldigits, ndigits; const char __user __force *ubuf = (const char __user __force *)buf; int exp_digit, in_range; @@ -514,6 +514,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen, exp_digit = 1; in_range = 0; a = b = 0; + ndigits = 0; /* Get the next cpu# or a range of cpu#'s */ while (buflen) { @@ -555,8 +556,10 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen, if (!in_range) a = b; exp_digit = 0; - totaldigits++; + ndigits++; totaldigits++; } + if (ndigits == 0) + return -EINVAL; if (!(a <= b)) return -EINVAL; if (b >= nmaskbits) -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/