From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.1 required=3.0 tests=BIGNUM_EMAILS,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA6AEC4360F for ; Thu, 4 Apr 2019 19:08:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B449F206B7 for ; Thu, 4 Apr 2019 19:08:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="SlFntyKB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729908AbfDDTIn (ORCPT ); Thu, 4 Apr 2019 15:08:43 -0400 Received: from aserp2130.oracle.com ([141.146.126.79]:60756 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729848AbfDDTIn (ORCPT ); Thu, 4 Apr 2019 15:08:43 -0400 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x34IwYji045224; Thu, 4 Apr 2019 19:08:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : mime-version : content-type; s=corp-2018-07-02; bh=aR3sIIaiTUvJ6WfcWkTSF8hZrIy/HffKKk8a5HUyeMM=; b=SlFntyKB6f/pV9IcWzogrEUdEzad/kIyAEIyO6oExuFVLHbaOphirW6FPTXyDtQYIYAZ HsrfAdiem/nKkXtl2e+OMy8kO39Z7376ChZVGK5z+v7UNY1YFnbJjUnrpU8uo1dGAiTR 6j+D5MnD7YhmgQaZKvXVjosV3B2zEmJ/r4D0lqm2y+9npFzmBDZSSHsm7tissfQkhN1z mvkDYvE0qg25Dgo5kdwqnQjhOYXX08hDhbIhTa99unwm4fOp16v2QrynnQlWDP9QZfjR HLgvP1QdQDT+OLzwfPAdL4bMCgWEYcwzb3T4GdjHzpK5VekXcB8EqhWDt3T1iddPn+0h DA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2130.oracle.com with ESMTP id 2rhwydh8th-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 04 Apr 2019 19:08:38 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x34J7tt3001964; Thu, 4 Apr 2019 19:08:37 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3020.oracle.com with ESMTP id 2rm9mjtat8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 04 Apr 2019 19:08:37 +0000 Received: from abhmp0017.oracle.com (abhmp0017.oracle.com [141.146.116.23]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x34J8bdm002613; Thu, 4 Apr 2019 19:08:37 GMT Received: from kadam (/41.202.241.49) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 04 Apr 2019 12:08:36 -0700 Date: Thu, 4 Apr 2019 22:08:28 +0300 From: Dan Carpenter To: cgxu519@gmx.com Cc: linux-fsdevel@vger.kernel.org Subject: [bug report] chardev: code cleanup for __register_chrdev_region() Message-ID: <20190404190828.GA28465@kadam> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9217 signatures=668685 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=926 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1904040120 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9217 signatures=668685 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=971 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1904040119 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Hello Chengguang Xu, The patch 4b0be5726032: "chardev: code cleanup for __register_chrdev_region()" from Feb 15, 2019, leads to the following static checker warning: fs/char_dev.c:167 __register_chrdev_region() error: passing non negative 511 to ERR_PTR fs/char_dev.c 96 static struct char_device_struct * 97 __register_chrdev_region(unsigned int major, unsigned int baseminor, 98 int minorct, const char *name) 99 { 100 struct char_device_struct *cd, *curr, *prev = NULL; 101 int ret = -EBUSY; 102 int i; 103 104 if (major >= CHRDEV_MAJOR_MAX) { 105 pr_err("CHRDEV \"%s\" major requested (%u) is greater than the maximum (%u)\n", 106 name, major, CHRDEV_MAJOR_MAX-1); 107 return ERR_PTR(-EINVAL); 108 } 109 110 if (minorct > MINORMASK + 1 - baseminor) { 111 pr_err("CHRDEV \"%s\" minor range requested (%u-%u) is out of range of maximum range (%u-%u) for a single major\n", 112 name, baseminor, baseminor + minorct - 1, 0, MINORMASK); 113 return ERR_PTR(-EINVAL); 114 } 115 116 cd = kzalloc(sizeof(struct char_device_struct), GFP_KERNEL); 117 if (cd == NULL) 118 return ERR_PTR(-ENOMEM); 119 120 mutex_lock(&chrdevs_lock); 121 122 if (major == 0) { 123 ret = find_dynamic_major(); 124 if (ret < 0) { 125 pr_err("CHRDEV \"%s\" dynamic allocation region is full\n", 126 name); 127 goto out; 128 } 129 major = ret; ^^^^^^^^^^^ "ret" is a major here. 130 } 131 132 i = major_to_index(major); 133 for (curr = chrdevs[i]; curr; prev = curr, curr = curr->next) { 134 if (curr->major < major) 135 continue; 136 137 if (curr->major > major) 138 break; 139 140 if (curr->baseminor + curr->minorct <= baseminor) 141 continue; 142 143 if (curr->baseminor >= baseminor + minorct) 144 break; 145 146 goto out; I don't completely understand how this loop works, but I guess we should set "ret = -EBUSY;" before the goto out. 147 } 148 149 cd->major = major; 150 cd->baseminor = baseminor; 151 cd->minorct = minorct; 152 strlcpy(cd->name, name, sizeof(cd->name)); 153 154 if (!prev) { 155 cd->next = curr; 156 chrdevs[i] = cd; 157 } else { 158 cd->next = prev->next; 159 prev->next = cd; 160 } 161 162 mutex_unlock(&chrdevs_lock); 163 return cd; 164 out: 165 mutex_unlock(&chrdevs_lock); 166 kfree(cd); 167 return ERR_PTR(ret); ^^^ Otherwise it leads to an Oops in the caller. 168 } regards, dan carpenter