From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934657AbdACI2O (ORCPT ); Tue, 3 Jan 2017 03:28:14 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:36337 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932930AbdACI2J (ORCPT ); Tue, 3 Jan 2017 03:28:09 -0500 From: Anshuman Khandual To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: mhocko@suse.com, vbabka@suse.cz, akpm@linux-foundation.org Subject: [RFC] nodemask: Consider MAX_NUMNODES inside node_isset Date: Tue, 3 Jan 2017 13:57:53 +0530 X-Mailer: git-send-email 2.9.3 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17010308-0012-0000-0000-000003910470 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17010308-0013-0000-0000-00001AD42F49 Message-Id: <20170103082753.25758-1-khandual@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-01-03_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1701030142 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org node_isset can give incorrect result if the node number is beyond the bitmask size (MAX_NUMNODES in this case) which is not checked inside test_bit. Hence check for the bit limits (MAX_NUMNODES) inside the node_isset function before calling test_bit. Signed-off-by: Anshuman Khandual --- include/linux/nodemask.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 6e66cfd..0aee588b 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h @@ -139,7 +139,13 @@ static inline void __nodes_clear(nodemask_t *dstp, unsigned int nbits) } /* No static inline type checking - see Subtlety (1) above. */ -#define node_isset(node, nodemask) test_bit((node), (nodemask).bits) +#define node_isset(node, nodemask) node_test_bit(node, nodemask, MAX_NUMNODES) +static inline int node_test_bit(int node, nodemask_t nodemask, int maxnodes) +{ + if (node >= maxnodes) + return 0; + return test_bit((node), (nodemask).bits); +} #define node_test_and_set(node, nodemask) \ __node_test_and_set((node), &(nodemask)) -- 1.8.3.1