From patchwork Sat Jan 11 16:36:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 1221651 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=ZOFPU76b; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47w59J0gR3z9sNx for ; Sun, 12 Jan 2020 03:37:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730371AbgAKQhH (ORCPT ); Sat, 11 Jan 2020 11:37:07 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:44381 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729957AbgAKQhH (ORCPT ); Sat, 11 Jan 2020 11:37:07 -0500 Received: by mail-pf1-f194.google.com with SMTP id 195so2673663pfw.11 for ; Sat, 11 Jan 2020 08:37:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=Wl3J61ipERBRNCdazwxQf7hcB4cULT96jVvEY5NQo5A=; b=ZOFPU76bOwAFH2Iiso3LUT4r8sWChV4wV0H/soevINqyPLTpvMiIuWuxZuDUgRCS7D 63CZAa+jekxSv6NmWQEVLLY/LNikYu3akG4aTPPbuu96HTXsLMhaWBpI3fYpTnWmJSYQ BxK0nxJFiWeVhN2gecVpus69DiDbqW5qbsAT+atbDKJEy7Mo1M8GtJpTUN9/V8XLWRcu cHxH12YdoBhTHuQZF/TkYZpSuPiZle1DA3ZbKv4r88yThdBQnG2K3O1C/QbbebpRPUu2 n0leAdw8i0w1oVg3fQXA591Tm0mBBiWK5tCiEw5DhrCPv+tCdCPFLDzsqnSoXpOXS0oG 8dPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Wl3J61ipERBRNCdazwxQf7hcB4cULT96jVvEY5NQo5A=; b=RuCtzyXyOEGSnybSVssW9JkZPdHMXONg7RSaf/mK1AWbL7/Jk/v6rh1xSHimZshdII 4mbXIUIXvbQlxz0FRyhee/jbGbboifGvUDrvcfMuS9PGQ6r4xH9MtJ3Ns0Pws3lbXUbD qOLz9e/OFd+6fv/vLz9UQP6l1jGkcrg+sGqB6LXnCQ6upFaQ/I1auVDHaHvjnQcOylkl SCsEfxajfIj2dadTvw2ordSiWtej/b1MOhlb6rk809PMoMNi1m8W9WWfTH0JrBcGEPk6 ine12573ADynNZa+TgF7DyrObHPPtvUsLAqoKpcvYSOcbmYfnXmHr2RmS7oN3h9ghmLj ZMUw== X-Gm-Message-State: APjAAAWcR5mLXtCSpdd091s25d70WdII+QsUiKLs0AS1tPtIrdgCCdFB 9F8pT+WJTybOrK4ukLiAyDnvUB4y X-Google-Smtp-Source: APXvYqwRi2b1WEJVzRCSOVC7PcGOf1e2iDo4PzD6fSk/5gyhmHQ/wlqkgiR/5QFIBmJ3Rxc2/Pd+Yg== X-Received: by 2002:aa7:95a9:: with SMTP id a9mr10976588pfk.15.1578760625698; Sat, 11 Jan 2020 08:37:05 -0800 (PST) Received: from localhost.localdomain ([180.70.143.152]) by smtp.gmail.com with ESMTPSA id i4sm7159505pgc.51.2020.01.11.08.37.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2020 08:37:04 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, jakub.kicinski@netronome.com, netdev@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH net 1/5] netdevsim: fix a race condition in netdevsim operations Date: Sat, 11 Jan 2020 16:36:55 +0000 Message-Id: <20200111163655.4087-1-ap420073@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org netdevsim basic operations are called with sysfs. Create netdevsim device: echo "1 1" > /sys/bus/netdevsim/new_device Delete netdevsim device: echo 1 > /sys/bus/netdevsim/del_device Create netdevsim port: echo 4 > /sys/devices/netdevsim1/new_port Delete netdevsim port: echo 4 > /sys/devices/netdevsim1/del_port Set sriov number: echo 4 > /sys/devices/netdevsim1/sriov_numvfs These operations use the same resource so they should acquire a lock for the whole resource not only for a list. Test commands: #SHELL1 modprobe netdevsim while : do echo "1 1" > /sys/bus/netdevsim/new_device echo "1 1" > /sys/bus/netdevsim/del_device done #SHELL2 while : do echo 1 > /sys/devices/netdevsim1/new_port echo 1 > /sys/devices/netdevsim1/del_port done Splat looks like: [ 151.623634][ T1165] kasan: CONFIG_KASAN_INLINE enabled [ 151.626503][ T1165] kasan: GPF could be caused by NULL-ptr deref or user memory access [ 151.627862][ T1165] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI [ 151.630700][ T1165] CPU: 3 PID: 1165 Comm: bash Not tainted 5.5.0-rc5+ #270 [ 151.633339][ T1165] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [ 151.635758][ T1165] RIP: 0010:__mutex_lock+0x10a/0x14b0 [ 151.636713][ T1165] Code: 08 84 d2 0f 85 7f 12 00 00 44 8b 0d 20 66 67 02 45 85 c9 75 29 49 8d 7f 68 48 b8 00 f [ 151.641725][ T1165] RSP: 0018:ffff8880b17cfbb0 EFLAGS: 00010206 [ 151.642547][ T1165] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000 [ 151.643636][ T1165] RDX: 0000000000000021 RSI: ffffffffbb922c00 RDI: 0000000000000108 [ 151.645415][ T1165] RBP: ffff8880b17cfd30 R08: ffffffffc0392ad0 R09: 0000000000000000 [ 151.646803][ T1165] R10: ffff8880b17cfd50 R11: ffff8880a9225440 R12: 0000000000000000 [ 151.647846][ T1165] R13: dffffc0000000000 R14: ffffffffbd16e7c0 R15: 00000000000000a0 [ 151.651979][ T1165] FS: 00007f9731c8e740(0000) GS:ffff8880da800000(0000) knlGS:0000000000000000 [ 151.655905][ T1165] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 151.656828][ T1165] CR2: 000055be472e1140 CR3: 00000000b1e14005 CR4: 00000000000606e0 [ 151.657906][ T1165] Call Trace: [ 151.658346][ T1165] ? nsim_dev_port_add+0x50/0x150 [netdevsim] [ 151.659146][ T1165] ? mutex_lock_io_nested+0x1380/0x1380 [ 151.659902][ T1165] ? _kstrtoull+0x76/0x160 [ 151.660480][ T1165] ? _parse_integer+0xf0/0xf0 [ 151.661097][ T1165] ? kernfs_fop_write+0x1cf/0x410 [ 151.661751][ T1165] ? sysfs_file_ops+0x160/0x160 [ 151.662389][ T1165] ? kstrtouint+0x86/0x110 [ 151.662972][ T1165] ? nsim_dev_port_add+0x50/0x150 [netdevsim] [ 151.663768][ T1165] nsim_dev_port_add+0x50/0x150 [netdevsim] [ ... ] In this patch, __init and __exit function also acquire a lock. operations could be called while __init and __exit functions are processing. If so, uninitialized or freed resources could be used. So, __init() and __exit function also need lock. Fixes: 83c9e13aa39a ("netdevsim: add software driver for testing offloads") Signed-off-by: Taehee Yoo --- drivers/net/netdevsim/bus.c | 64 ++++++++++++++++++++++++------- drivers/net/netdevsim/dev.c | 20 +++++++++- drivers/net/netdevsim/netdevsim.h | 2 + 3 files changed, 71 insertions(+), 15 deletions(-) diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c index 6aeed0c600f8..b40e4e70995d 100644 --- a/drivers/net/netdevsim/bus.c +++ b/drivers/net/netdevsim/bus.c @@ -16,7 +16,8 @@ static DEFINE_IDA(nsim_bus_dev_ids); static LIST_HEAD(nsim_bus_dev_list); -static DEFINE_MUTEX(nsim_bus_dev_list_lock); +/* mutex lock for netdevsim operations */ +DEFINE_MUTEX(nsim_bus_dev_ops_lock); static struct nsim_bus_dev *to_nsim_bus_dev(struct device *dev) { @@ -51,9 +52,14 @@ nsim_bus_dev_numvfs_store(struct device *dev, struct device_attribute *attr, unsigned int num_vfs; int ret; + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; + ret = kstrtouint(buf, 0, &num_vfs); - if (ret) + if (ret) { + mutex_unlock(&nsim_bus_dev_ops_lock); return ret; + } rtnl_lock(); if (nsim_bus_dev->num_vfs == num_vfs) @@ -74,6 +80,7 @@ nsim_bus_dev_numvfs_store(struct device *dev, struct device_attribute *attr, ret = count; exit_unlock: rtnl_unlock(); + mutex_unlock(&nsim_bus_dev_ops_lock); return ret; } @@ -83,8 +90,13 @@ nsim_bus_dev_numvfs_show(struct device *dev, struct device_attribute *attr, char *buf) { struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev); + int ret; - return sprintf(buf, "%u\n", nsim_bus_dev->num_vfs); + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; + ret = sprintf(buf, "%u\n", nsim_bus_dev->num_vfs); + mutex_unlock(&nsim_bus_dev_ops_lock); + return ret; } static struct device_attribute nsim_bus_dev_numvfs_attr = @@ -99,10 +111,15 @@ new_port_store(struct device *dev, struct device_attribute *attr, unsigned int port_index; int ret; + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; ret = kstrtouint(buf, 0, &port_index); - if (ret) + if (ret) { + mutex_unlock(&nsim_bus_dev_ops_lock); return ret; + } ret = nsim_dev_port_add(nsim_bus_dev, port_index); + mutex_unlock(&nsim_bus_dev_ops_lock); return ret ? ret : count; } @@ -116,10 +133,17 @@ del_port_store(struct device *dev, struct device_attribute *attr, unsigned int port_index; int ret; + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; + ret = kstrtouint(buf, 0, &port_index); - if (ret) + if (ret) { + mutex_unlock(&nsim_bus_dev_ops_lock); return ret; + } + ret = nsim_dev_port_del(nsim_bus_dev, port_index); + mutex_unlock(&nsim_bus_dev_ops_lock); return ret ? ret : count; } @@ -179,13 +203,17 @@ new_device_store(struct bus_type *bus, const char *buf, size_t count) pr_err("Format for adding new device is \"id port_count\" (uint uint).\n"); return -EINVAL; } + + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; nsim_bus_dev = nsim_bus_dev_new(id, port_count); - if (IS_ERR(nsim_bus_dev)) + if (IS_ERR(nsim_bus_dev)) { + mutex_unlock(&nsim_bus_dev_ops_lock); return PTR_ERR(nsim_bus_dev); + } - mutex_lock(&nsim_bus_dev_list_lock); list_add_tail(&nsim_bus_dev->list, &nsim_bus_dev_list); - mutex_unlock(&nsim_bus_dev_list_lock); + mutex_unlock(&nsim_bus_dev_ops_lock); return count; } @@ -214,7 +242,8 @@ del_device_store(struct bus_type *bus, const char *buf, size_t count) } err = -ENOENT; - mutex_lock(&nsim_bus_dev_list_lock); + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; list_for_each_entry_safe(nsim_bus_dev, tmp, &nsim_bus_dev_list, list) { if (nsim_bus_dev->dev.id != id) continue; @@ -223,7 +252,7 @@ del_device_store(struct bus_type *bus, const char *buf, size_t count) err = 0; break; } - mutex_unlock(&nsim_bus_dev_list_lock); + mutex_unlock(&nsim_bus_dev_ops_lock); return !err ? count : err; } static BUS_ATTR_WO(del_device); @@ -314,12 +343,19 @@ int nsim_bus_init(void) { int err; + mutex_lock(&nsim_bus_dev_ops_lock); err = bus_register(&nsim_bus); - if (err) + if (err) { + mutex_unlock(&nsim_bus_dev_ops_lock); return err; + } err = driver_register(&nsim_driver); - if (err) + if (err) { + mutex_unlock(&nsim_bus_dev_ops_lock); goto err_bus_unregister; + } + + mutex_unlock(&nsim_bus_dev_ops_lock); return 0; err_bus_unregister: @@ -331,12 +367,12 @@ void nsim_bus_exit(void) { struct nsim_bus_dev *nsim_bus_dev, *tmp; - mutex_lock(&nsim_bus_dev_list_lock); + mutex_lock(&nsim_bus_dev_ops_lock); list_for_each_entry_safe(nsim_bus_dev, tmp, &nsim_bus_dev_list, list) { list_del(&nsim_bus_dev->list); nsim_bus_dev_del(nsim_bus_dev); } - mutex_unlock(&nsim_bus_dev_list_lock); driver_unregister(&nsim_driver); bus_unregister(&nsim_bus); + mutex_unlock(&nsim_bus_dev_ops_lock); } diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index 059711edfc61..634eb5cdcbbe 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -43,13 +43,24 @@ static ssize_t nsim_dev_take_snapshot_write(struct file *file, size_t count, loff_t *ppos) { struct nsim_dev *nsim_dev = file->private_data; + struct devlink *devlink; void *dummy_data; int err; u32 id; + devlink = priv_to_devlink(nsim_dev); + + if (!mutex_trylock(&nsim_bus_dev_ops_lock)) + return -EBUSY; + + devlink_reload_disable(devlink); + dummy_data = kmalloc(NSIM_DEV_DUMMY_REGION_SIZE, GFP_KERNEL); - if (!dummy_data) + if (!dummy_data) { + devlink_reload_enable(devlink); + mutex_unlock(&nsim_bus_dev_ops_lock); return -ENOMEM; + } get_random_bytes(dummy_data, NSIM_DEV_DUMMY_REGION_SIZE); @@ -59,9 +70,13 @@ static ssize_t nsim_dev_take_snapshot_write(struct file *file, if (err) { pr_err("Failed to create region snapshot\n"); kfree(dummy_data); + devlink_reload_enable(devlink); + mutex_unlock(&nsim_bus_dev_ops_lock); return err; } + devlink_reload_enable(devlink); + mutex_unlock(&nsim_bus_dev_ops_lock); return count; } @@ -909,9 +924,12 @@ int nsim_dev_port_del(struct nsim_bus_dev *nsim_bus_dev, unsigned int port_index) { struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); + struct devlink *devlink = priv_to_devlink(nsim_dev); struct nsim_dev_port *nsim_dev_port; int err = 0; + devlink_reload_disable(devlink); + mutex_lock(&nsim_dev->port_list_lock); nsim_dev_port = __nsim_dev_port_lookup(nsim_dev, port_index); if (!nsim_dev_port) diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h index 94df795ef4d3..6a7cfd2319df 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -30,6 +30,8 @@ #define NSIM_IPSEC_MAX_SA_COUNT 33 #define NSIM_IPSEC_VALID BIT(31) +extern struct mutex nsim_bus_dev_ops_lock; + struct nsim_sa { struct xfrm_state *xs; __be32 ipaddr[4]; From patchwork Sat Jan 11 16:37:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 1221652 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=DIcIzYFn; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47w59V6sNnz9sNx for ; Sun, 12 Jan 2020 03:37:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730388AbgAKQhS (ORCPT ); Sat, 11 Jan 2020 11:37:18 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:40851 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729957AbgAKQhR (ORCPT ); Sat, 11 Jan 2020 11:37:17 -0500 Received: by mail-pf1-f195.google.com with SMTP id q8so2687052pfh.7 for ; Sat, 11 Jan 2020 08:37:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=eLAImGD0pHCBf56xMSR45b9cn1YCQoioyqesM7JEOBE=; b=DIcIzYFnZHEFR12iAsCEspQp1Z7iEU6Fj3IwB4NcCs4uuJSh3gr1JCGM+5XFwbWfGf cfVeuq0wCceOM/EzP6ThofVGaIqfUVysaWTfQ40M8lJzUwFuMoKuNawbOOvSbEPsnVrg cUUggsloPN4EHwrUh5qhC+exsAMKo9j5R6EWgqEuQMvgsfvJev/i7Zk2iUv+RH9LjEw2 CxuZS5YneV0X1plX0woWK/TRJdEF0vom/mNYZcQExy/zjY8GlDSjq8X+YuPiFbBEEKXI Us++XdBUSxjIx5/OuictUlGEe2lWd0ll0tsZ6T1CgX1Mgutk7GbYU32e34GdwPdTjQ/N Jo0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=eLAImGD0pHCBf56xMSR45b9cn1YCQoioyqesM7JEOBE=; b=E4/3O23UMgzYQ7nWKZfuMmOpJGcrJcGsW24QPcI0yza9s+0kLKl5Zg8qZDyan7RYPC wLwm6oyvCQO+it06oE4IJSEIrG5/CyZXYE1uNOLFeDzxN+RPHZRp6L3QUCrTiN98ioMn 3VMcJgO8O6kctzrc5uOLZMu4c4Wy0O7Zn1RwUlE3FazzSKSZLwSZs4iRo3XGp0NpVrEK VgvPBvEI5vNpwkLsr0Ob7LOj5vEmqsM/8OitxmZlcNsfWKbRKYsedPTi1zDG5DSe1BPk tZZenasfHsGVKDeCmk5D6j+EiciiGkDLx35kEoENgTn5SLrgRnTLOZgQRqvaWMaAnWpR yExQ== X-Gm-Message-State: APjAAAWB+48kE7aDoi4PyVjvJrn01rltiHNrhF++yx0C0/0cPAJsLriP l5WFT17HGJ5fVKkuy4F79GA= X-Google-Smtp-Source: APXvYqxcQUD87QYu/4jjwznGFQ/oCJ3nTeUPyncNyW3Z7dnzSistTRXBkN7dP0imdx8ztsXol2Gqrg== X-Received: by 2002:a63:4f54:: with SMTP id p20mr11986580pgl.246.1578760637067; Sat, 11 Jan 2020 08:37:17 -0800 (PST) Received: from localhost.localdomain ([180.70.143.152]) by smtp.gmail.com with ESMTPSA id u7sm7430778pfh.128.2020.01.11.08.37.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2020 08:37:16 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, jakub.kicinski@netronome.com, netdev@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH net 2/5] netdevsim: fix stack-out-of-bounds in nsim_dev_debugfs_init() Date: Sat, 11 Jan 2020 16:37:09 +0000 Message-Id: <20200111163709.4181-1-ap420073@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When netdevsim dev is being created, a debugfs directory is created. The variable "dev_ddir_name" is 16bytes device name pointer and device name is "netdevsim". The maximum dev id length is 10. So, 16bytes for device name isn't enough. Test commands: modprobe netdevsim echo "1000000000 0" > /sys/bus/netdevsim/new_device Splat looks like: [ 90.624922][ T1000] BUG: KASAN: stack-out-of-bounds in number+0x824/0x880 [ 90.626999][ T1000] Write of size 1 at addr ffff8880b7f47988 by task bash/1000 [ 90.627798][ T1000] [ 90.628076][ T1000] CPU: 0 PID: 1000 Comm: bash Not tainted 5.5.0-rc5+ #270 [ 90.628806][ T1000] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [ 90.629752][ T1000] Call Trace: [ 90.630080][ T1000] dump_stack+0x96/0xdb [ 90.630512][ T1000] ? number+0x824/0x880 [ 90.630939][ T1000] print_address_description.constprop.5+0x1be/0x360 [ 90.631610][ T1000] ? number+0x824/0x880 [ 90.632038][ T1000] ? number+0x824/0x880 [ 90.632469][ T1000] __kasan_report+0x12a/0x16f [ 90.632939][ T1000] ? number+0x824/0x880 [ 90.633397][ T1000] kasan_report+0xe/0x20 [ 90.633954][ T1000] number+0x824/0x880 [ 90.634513][ T1000] ? put_dec+0xa0/0xa0 [ 90.635047][ T1000] ? rcu_read_lock_sched_held+0x90/0xc0 [ 90.636469][ T1000] vsnprintf+0x63c/0x10b0 [ 90.637187][ T1000] ? pointer+0x5b0/0x5b0 [ 90.637871][ T1000] ? mark_lock+0x11d/0xc40 [ 90.638591][ T1000] sprintf+0x9b/0xd0 [ 90.639164][ T1000] ? scnprintf+0xe0/0xe0 [ 90.639802][ T1000] nsim_dev_probe+0x63c/0xbf0 [netdevsim] [ ... ] Fixes: 83c9e13aa39a ("netdevsim: add software driver for testing offloads") Signed-off-by: Taehee Yoo --- drivers/net/netdevsim/dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index 634eb5cdcbbe..a0c80a70bb23 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -88,7 +88,7 @@ static const struct file_operations nsim_dev_take_snapshot_fops = { static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev) { - char dev_ddir_name[16]; + char dev_ddir_name[32]; sprintf(dev_ddir_name, DRV_NAME "%u", nsim_dev->nsim_bus_dev->dev.id); nsim_dev->ddir = debugfs_create_dir(dev_ddir_name, nsim_dev_ddir); From patchwork Sat Jan 11 16:37:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 1221653 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=bwzbul2R; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47w59t3v7Lz9sPW for ; Sun, 12 Jan 2020 03:37:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730424AbgAKQhh (ORCPT ); Sat, 11 Jan 2020 11:37:37 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:44934 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729957AbgAKQhg (ORCPT ); Sat, 11 Jan 2020 11:37:36 -0500 Received: by mail-pg1-f193.google.com with SMTP id x7so2515449pgl.11 for ; Sat, 11 Jan 2020 08:37:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=9RB2MYKfwXEHx4e0SSOiacv8L/wL9ZKWzh/vfX16f5Q=; b=bwzbul2RgLRnIJspiUV1K4mlh2ovbMpnT7i7w13uhhTDBfCpiUtQrIdZtrfAZzkTlj dKgEMlYpgf/BUmCYdRkaRRKKpLgYqtK3zzkfFqIa8wGT0e4JJgsz63WUhR6uJeVPbjmC 5LDwMvHW9u2tUxWQ9HwcLSZO5FVR8nl2xSRpz0F/ZftknuAI8UVpbbY4VrAmd2vSfYDn T8KjkAJ4vNFHdMK3rLLtBzMnQhFr5BrXXiB+8lEBxTo9MdGlsGCB70Kx71Sjp0X4vQnQ ttP+TUSLLK8b1+fc+Tyf/ER5lkNu2MB+ag3Q0GV0BLGH6NCoe7vB2s/5EqqCaM2drfWi F82Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=9RB2MYKfwXEHx4e0SSOiacv8L/wL9ZKWzh/vfX16f5Q=; b=TYefY0AYYcD4Qz/uyrrb4kAeVr6iNWshICjht7Jc8h8JdAjn1rq5Tdvzkpe+Dtx+ge MofYg7dxpn7PG1BtmIq4nzQzhopCC/QjSa3GHEFrbGOEui/hBCrNDjVWBHzYOrRZAuwC yXTTzijcnddpf0I4AM4BJTkE7eXs0e9eu8rS01ivFaIdLlLPUesk3aN5VI/tu3cMmoUh bNlR8jv7rqQ3Qe5xK6ftQ1Db1CIbBKz9oqdVGyac8ZanXyCgr0dRq16D3r14+YeWSoCR bsCEhSqnDYKEC2XNvBL2ENCCSGKOlcnxwkwhf49CfGjQKe90g6Gy6Iv2OxYNuTdIci2w 16Bg== X-Gm-Message-State: APjAAAVUZjAnuy+naRdP0YNwXBRDlMUjOnSO7cXex84qVs33B/4BPxDt WwbnE8Pei/ESvBIMPtMWcT8fEtO7 X-Google-Smtp-Source: APXvYqzFhJ87HcwP0dwbvbGk+ItugoZG1NUCkguQQ6AJyH9I22yozrTr0AxcK8H6G4DkXB9MpL5KOA== X-Received: by 2002:a63:4664:: with SMTP id v36mr11740040pgk.147.1578760655401; Sat, 11 Jan 2020 08:37:35 -0800 (PST) Received: from localhost.localdomain ([180.70.143.152]) by smtp.gmail.com with ESMTPSA id ep12sm7024055pjb.7.2020.01.11.08.37.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2020 08:37:34 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, jakub.kicinski@netronome.com, netdev@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH net 3/5] netdevsim: avoid debugfs warning message when module is remove Date: Sat, 11 Jan 2020 16:37:23 +0000 Message-Id: <20200111163723.4260-1-ap420073@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When module is being removed, it couldn't be held by try_module_get(). debugfs's open function internally tries to hold file_operation->owner if .owner is set. If holding owner operation is failed, it prints a warning message. Test commands: #SHELL1 while : do modprobe netdevsim echo 1 > /sys/bus/netdevsim/new_device modprobe -rv netdevsim done #SHELL2 while : do cat /sys/kernel/debug/netdevsim/netdevsim1/ports/0/ipsec done Splat looks like: [ 412.227709][ T1720] debugfs file owner did not clean up at exit: ipsec [ 412.227728][ T1720] WARNING: CPU: 3 PID: 1720 at fs/debugfs/file.c:309 full_proxy_open+0x10f/0x650 [ 412.231755][ T1720] Modules linked in: netdevsim(-) veth openvswitch nsh nf_conncount nf_nat nf_conntrack nf_d] [ 412.236495][ T1720] CPU: 3 PID: 1720 Comm: cat Tainted: G B W 5.5.0-rc5+ #270 [ 412.237468][ T1720] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [ 412.239480][ T1720] RIP: 0010:full_proxy_open+0x10f/0x650 [ 412.240321][ T1720] Code: 48 c1 ea 03 80 3c 02 00 0f 85 c1 04 00 00 49 8b 3c 24 e8 24 fb 78 ff 84 c0 75 2d 4c 8 [ 412.247099][ T1720] RSP: 0018:ffff8880c9787a38 EFLAGS: 00010286 [ 412.247905][ T1720] RAX: dffffc0000000008 RBX: ffff8880ccb94b80 RCX: ffffffff912c2234 [ 412.248961][ T1720] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff93d6dcf4 [ 412.252583][ T1720] RBP: 0000000000000000 R08: fffffbfff2722f5d R09: fffffbfff2722f5d [ 412.253677][ T1720] R10: 0000000000000001 R11: fffffbfff2722f5c R12: ffffffffc02a7a80 [ 412.258939][ T1720] R13: ffff8880acd07728 R14: ffff8880ae9a9b60 R15: ffffffff931b3b60 [ 412.260021][ T1720] FS: 00007f24a0b9c540(0000) GS:ffff8880da800000(0000) knlGS:0000000000000000 [ 412.261208][ T1720] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 412.262131][ T1720] CR2: 0000561898255068 CR3: 00000000c6a6c004 CR4: 00000000000606e0 [ 412.263201][ T1720] Call Trace: [ 412.263650][ T1720] do_dentry_open+0x63c/0xf50 [ 412.264304][ T1720] ? open_proxy_open+0x270/0x270 [ 412.265015][ T1720] ? __x64_sys_fchdir+0x180/0x180 [ 412.265708][ T1720] ? inode_permission+0x65/0x390 [ 412.266566][ T1720] path_openat+0x701/0x2810 [ 412.267445][ T1720] ? save_stack+0x69/0x80 [ 412.268288][ T1720] ? path_lookupat+0x880/0x880 [ 412.269218][ T1720] ? getname_flags+0xba/0x500 [ 412.270556][ T1720] ? do_sys_open+0x15d/0x350 [ 412.271195][ T1720] ? do_syscall_64+0x99/0x4f0 [ 412.271843][ T1720] ? entry_SYSCALL_64_after_hwframe+0x49/0xbe [ 412.272676][ T1720] ? _raw_spin_unlock+0x1f/0x30 [ 412.273349][ T1720] ? deactivate_slab.isra.77+0x62e/0x800 [ 412.274149][ T1720] ? check_object+0xaf/0x260 [ 412.274784][ T1720] ? init_object+0x6b/0x80 [ 412.275385][ T1720] do_filp_open+0x17a/0x270 [ ... ] In order to avoid the warning message, this patch makes netdevsim module does not set .owner. Unsetting .owner is safe because these are protected by inode_lock(). Fixes: 7699353da875 ("netdevsim: add ipsec offload testing") Fixes: 31d3ad832948 ("netdevsim: add bpf offload support") Signed-off-by: Taehee Yoo --- drivers/net/netdevsim/bpf.c | 13 ++++++++++++- drivers/net/netdevsim/ipsec.c | 1 - 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c index 2b74425822ab..13e17c82d71c 100644 --- a/drivers/net/netdevsim/bpf.c +++ b/drivers/net/netdevsim/bpf.c @@ -57,7 +57,18 @@ static int nsim_bpf_string_show(struct seq_file *file, void *data) return 0; } -DEFINE_SHOW_ATTRIBUTE(nsim_bpf_string); + +static int nsim_debugfs_bpf_string_open(struct inode *inode, struct file *f) +{ + return single_open(f, nsim_bpf_string_show, inode->i_private); +} + +static const struct file_operations nsim_bpf_string_fops = { + .open = nsim_debugfs_bpf_string_open, + .release = single_release, + .read = seq_read, + .llseek = seq_lseek +}; static int nsim_bpf_verify_insn(struct bpf_verifier_env *env, int insn_idx, int prev_insn) diff --git a/drivers/net/netdevsim/ipsec.c b/drivers/net/netdevsim/ipsec.c index e27fc1a4516d..63aff6399d11 100644 --- a/drivers/net/netdevsim/ipsec.c +++ b/drivers/net/netdevsim/ipsec.c @@ -60,7 +60,6 @@ static ssize_t nsim_dbg_netdev_ops_read(struct file *filp, } static const struct file_operations ipsec_dbg_fops = { - .owner = THIS_MODULE, .open = simple_open, .read = nsim_dbg_netdev_ops_read, }; From patchwork Sat Jan 11 16:37:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 1221654 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jhB+8hzW; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47w5B812THz9sNx for ; Sun, 12 Jan 2020 03:37:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730431AbgAKQhv (ORCPT ); Sat, 11 Jan 2020 11:37:51 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:42266 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730425AbgAKQhv (ORCPT ); Sat, 11 Jan 2020 11:37:51 -0500 Received: by mail-pf1-f196.google.com with SMTP id 4so2682554pfz.9 for ; Sat, 11 Jan 2020 08:37:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=zEukTaDPVmeW1rRNEKzilX8PH74WDVyvzPN/YsnR9oI=; b=jhB+8hzWGxb/3FzRarBqPmYSR/8C3BG/5MejTLCYb9ixHMl0R7PWWyFMZWLLXJGBgl oYZaSXYTdceBklM240UUwrOgZSsPJ4//AsknURcM4wJb6UuooIdO3+kWIKQfyqbSFqPR uciEU1etvqVxY0Ut08PhLg8XmtZG/9TsWKOfyxYSAjGw79HOJYR0p42tzfleMw0BXrZF hDPEnIuX35MaqRqMJmWx+do/T2XeCDTlQw7d4o2BOn+p7I8LH2YhEJVrWlIuJEl9RyAe GUYnimfIOXPn+VlkQ7aOGZy3FtjxS4k3BOqid0V1CVxUKszXolMt4VNE98zSWGmYDZTE 7M/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=zEukTaDPVmeW1rRNEKzilX8PH74WDVyvzPN/YsnR9oI=; b=anqFl+LzX4Fb6PC6FZMD0FKy7ilxc95zyaxJTBHoAoIonoE5VrrFbOR78nHphf5U0r vMNLjD2j8HcANlyiteH55bpkSV3XL3p7X03Bzsdp6+B4QPAbKCfRAdOzev79aPI1CSWT 5kxqbCx0CdEbkBMOL31Q0QUWhEoL6Y3dl1unbhN+MA5N/Ve2gakZ68Tvk5+XCXDUa0rt t04nyPWIlRDZpmrySsbFyRPsquEzrwFuzHmNPXvHRoyral0UePnr482NrvPKaBRHKGXd xTsTy84/jon0V/QpnNnm6VgznBgTywHyBdfD2nnJlVozPynh1qNh86spW1UIQWnwcFdA J+kw== X-Gm-Message-State: APjAAAVxdKKTTCErgWB/RTMyu9RFFEVfuxvQ6rdavbZlzcogjA7MG8K6 b7NC1bQRZkJNdAgHIdAQ28E= X-Google-Smtp-Source: APXvYqzQTYadeREMELzCKqJtXRRD7bMrtv7igi2O1Xw8VJfIvZ4RqV4bpRdPnt97dl2A1oDNKK53Yw== X-Received: by 2002:a63:214f:: with SMTP id s15mr12465342pgm.238.1578760670123; Sat, 11 Jan 2020 08:37:50 -0800 (PST) Received: from localhost.localdomain ([180.70.143.152]) by smtp.gmail.com with ESMTPSA id t30sm6954764pgl.75.2020.01.11.08.37.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2020 08:37:49 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, jakub.kicinski@netronome.com, netdev@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH net 4/5] netdevsim: use IS_ERR instead of IS_ERR_OR_NULL for debugfs Date: Sat, 11 Jan 2020 16:37:43 +0000 Message-Id: <20200111163743.4339-1-ap420073@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Debugfs APIs return valid pointer or error pointer. it doesn't return NULL. So, using IS_ERR is enough, not using IS_ERR_OR_NULL. Signed-off-by: Taehee Yoo Reported-by: kbuild test robot Reported-by: Dan Carpenter --- drivers/net/netdevsim/bpf.c | 8 ++++---- drivers/net/netdevsim/dev.c | 16 ++++++++-------- drivers/net/netdevsim/health.c | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c index 13e17c82d71c..8d2e157f6efc 100644 --- a/drivers/net/netdevsim/bpf.c +++ b/drivers/net/netdevsim/bpf.c @@ -241,9 +241,9 @@ static int nsim_bpf_create_prog(struct nsim_dev *nsim_dev, /* Program id is not populated yet when we create the state. */ sprintf(name, "%u", nsim_dev->prog_id_gen++); state->ddir = debugfs_create_dir(name, nsim_dev->ddir_bpf_bound_progs); - if (IS_ERR_OR_NULL(state->ddir)) { + if (IS_ERR(state->ddir)) { kfree(state); - return -ENOMEM; + return PTR_ERR(state->ddir); } debugfs_create_u32("id", 0400, state->ddir, &prog->aux->id); @@ -598,8 +598,8 @@ int nsim_bpf_dev_init(struct nsim_dev *nsim_dev) nsim_dev->ddir_bpf_bound_progs = debugfs_create_dir("bpf_bound_progs", nsim_dev->ddir); - if (IS_ERR_OR_NULL(nsim_dev->ddir_bpf_bound_progs)) - return -ENOMEM; + if (IS_ERR(nsim_dev->ddir_bpf_bound_progs)) + return PTR_ERR(nsim_dev->ddir_bpf_bound_progs); nsim_dev->bpf_dev = bpf_offload_dev_create(&nsim_bpf_dev_ops, nsim_dev); err = PTR_ERR_OR_ZERO(nsim_dev->bpf_dev); diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index a0c80a70bb23..9ea283a02bcf 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -92,11 +92,11 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev) sprintf(dev_ddir_name, DRV_NAME "%u", nsim_dev->nsim_bus_dev->dev.id); nsim_dev->ddir = debugfs_create_dir(dev_ddir_name, nsim_dev_ddir); - if (IS_ERR_OR_NULL(nsim_dev->ddir)) - return PTR_ERR_OR_ZERO(nsim_dev->ddir) ?: -EINVAL; + if (IS_ERR(nsim_dev->ddir)) + return PTR_ERR(nsim_dev->ddir); nsim_dev->ports_ddir = debugfs_create_dir("ports", nsim_dev->ddir); - if (IS_ERR_OR_NULL(nsim_dev->ports_ddir)) - return PTR_ERR_OR_ZERO(nsim_dev->ports_ddir) ?: -EINVAL; + if (IS_ERR(nsim_dev->ports_ddir)) + return PTR_ERR(nsim_dev->ports_ddir); debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir, &nsim_dev->fw_update_status); debugfs_create_u32("max_macs", 0600, nsim_dev->ddir, @@ -127,8 +127,8 @@ static int nsim_dev_port_debugfs_init(struct nsim_dev *nsim_dev, sprintf(port_ddir_name, "%u", nsim_dev_port->port_index); nsim_dev_port->ddir = debugfs_create_dir(port_ddir_name, nsim_dev->ports_ddir); - if (IS_ERR_OR_NULL(nsim_dev_port->ddir)) - return -ENOMEM; + if (IS_ERR(nsim_dev_port->ddir)) + return PTR_ERR(nsim_dev_port->ddir); sprintf(dev_link_name, "../../../" DRV_NAME "%u", nsim_dev->nsim_bus_dev->dev.id); @@ -943,8 +943,8 @@ int nsim_dev_port_del(struct nsim_bus_dev *nsim_bus_dev, int nsim_dev_init(void) { nsim_dev_ddir = debugfs_create_dir(DRV_NAME, NULL); - if (IS_ERR_OR_NULL(nsim_dev_ddir)) - return -ENOMEM; + if (IS_ERR(nsim_dev_ddir)) + return PTR_ERR(nsim_dev_ddir); return 0; } diff --git a/drivers/net/netdevsim/health.c b/drivers/net/netdevsim/health.c index 9aa637d162eb..30595b1299bd 100644 --- a/drivers/net/netdevsim/health.c +++ b/drivers/net/netdevsim/health.c @@ -285,8 +285,8 @@ int nsim_dev_health_init(struct nsim_dev *nsim_dev, struct devlink *devlink) } health->ddir = debugfs_create_dir("health", nsim_dev->ddir); - if (IS_ERR_OR_NULL(health->ddir)) { - err = PTR_ERR_OR_ZERO(health->ddir) ?: -EINVAL; + if (IS_ERR(health->ddir)) { + err = PTR_ERR(health->ddir); goto err_dummy_reporter_destroy; } From patchwork Sat Jan 11 16:37:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 1221655 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Cnu1rcIh; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47w5BK2SGJz9sNx for ; Sun, 12 Jan 2020 03:38:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730447AbgAKQiA (ORCPT ); Sat, 11 Jan 2020 11:38:00 -0500 Received: from mail-pj1-f68.google.com ([209.85.216.68]:53768 "EHLO mail-pj1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730425AbgAKQiA (ORCPT ); Sat, 11 Jan 2020 11:38:00 -0500 Received: by mail-pj1-f68.google.com with SMTP id n96so2278841pjc.3 for ; Sat, 11 Jan 2020 08:37:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=3XJG4GqN4WkT1LN+h2fHdBpJFMOBat2HQt8lw2B7sOw=; b=Cnu1rcIhb9O68f1Y9jI4OeSZkcukQns8F2ueGtdF/3W93FteMsbONLMcWqQYvkZQl4 GYXIhIt+74rI/S9YV/Dbs6vcCXYkCt1AF8Px/emMYP3Dxbi0RpBZDCY9BTX/tFszhXPt 71u/TEegyZWZQH9dNmWkUmXxZMyZJIwVZuft1GoFcK7T6pQrsxsbDejAZr1Sn/JNOWF9 Hcne6N2Ci8GZAPw6UkeBTUIV+NCfGEXrTxBQAXZHx0Gdg3Of2n8TeQHDpFrPTlQmQJT2 +lNOI+5X6aaEE3YU2uqJAF+MyNh6ysrCMH/H6WVFkd8Ygty6X/ia3eCuJHVCbX19MdOE 4hdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=3XJG4GqN4WkT1LN+h2fHdBpJFMOBat2HQt8lw2B7sOw=; b=WKNpfI8jE43HLJO5/RklBXXYu3C+Cynn+NcueazxtfF4EOWY34uIc9544w6g4pdTYv wRTC9RadFY6QmjyJwlSSarVvvfBfszC6mHj9y9elax/lXF6YhD3hrROR7FUSyqx5Uo4Q e1RpGGVaC92seuy8j/PNJCxBrDcz+uVheKrG5u4j1Li5VcQ13B2wL/SiSfPHh5PBxhTW p6HZYovl13x6/bJ9YaMs0I1O3VqkssQOkt/3wMJ/SdT2QEfmE/aFyhNz//pVGGtbCTYa 7RmNQTChMyLGywg4DuFhYmap3NrQyl6aVUM51bGXCPurbKRBbCFw3TRaSTRc3z5hrqSA zRAQ== X-Gm-Message-State: APjAAAVUgPqMVUcHBBjJuv7uGiucgKjUyJ0gWL0MnL25M5k/yr5VWDbe /J5r9lv6zrf1Iasg3Rxguew= X-Google-Smtp-Source: APXvYqwz1d1ovuHaxQQAccxDkrPbh8FkegyUx3VvtXdHMR9WSnL5CACqaCuzQWogju7uvj/XA4OpTA== X-Received: by 2002:a17:90a:3ae5:: with SMTP id b92mr12404600pjc.26.1578760679319; Sat, 11 Jan 2020 08:37:59 -0800 (PST) Received: from localhost.localdomain ([180.70.143.152]) by smtp.gmail.com with ESMTPSA id y38sm7013594pgk.33.2020.01.11.08.37.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jan 2020 08:37:58 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, jakub.kicinski@netronome.com, netdev@vger.kernel.org Cc: ap420073@gmail.com Subject: [PATCH net 5/5] netdevsim: use __GFP_NOWARN to avoid memalloc warning Date: Sat, 11 Jan 2020 16:37:52 +0000 Message-Id: <20200111163752.4418-1-ap420073@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org vfnum buffer size and binary_len buffer size is received by user-space. So, this buffer size could be too large. If so, kmalloc will internally print a warning message. This warning message is actually not necessary for the netdevsim module. So, this patch adds __GFP_NOWARN. Test commands: modprobe netdevsim echo 1 > /sys/bus/netdevsim/new_device echo 1000000000 > /sys/devices/netdevsim1/sriov_numvfs Splat looks like: [ 357.847266][ T1000] WARNING: CPU: 0 PID: 1000 at mm/page_alloc.c:4738 __alloc_pages_nodemask+0x2f3/0x740 [ 357.850273][ T1000] Modules linked in: netdevsim veth openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrx [ 357.852989][ T1000] CPU: 0 PID: 1000 Comm: bash Tainted: G B 5.5.0-rc5+ #270 [ 357.854334][ T1000] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [ 357.855703][ T1000] RIP: 0010:__alloc_pages_nodemask+0x2f3/0x740 [ 357.856669][ T1000] Code: 64 fe ff ff 65 48 8b 04 25 c0 0f 02 00 48 05 f0 12 00 00 41 be 01 00 00 00 49 89 47 0 [ 357.860272][ T1000] RSP: 0018:ffff8880b7f47bd8 EFLAGS: 00010246 [ 357.861009][ T1000] RAX: ffffed1016fe8f80 RBX: 1ffff11016fe8fae RCX: 0000000000000000 [ 357.861843][ T1000] RDX: 0000000000000000 RSI: 0000000000000017 RDI: 0000000000000000 [ 357.862661][ T1000] RBP: 0000000000040dc0 R08: 1ffff11016fe8f67 R09: dffffc0000000000 [ 357.863509][ T1000] R10: ffff8880b7f47d68 R11: fffffbfff2798180 R12: 1ffff11016fe8f80 [ 357.864355][ T1000] R13: 0000000000000017 R14: 0000000000000017 R15: ffff8880c2038d68 [ 357.865178][ T1000] FS: 00007fd9a5b8c740(0000) GS:ffff8880d9c00000(0000) knlGS:0000000000000000 [ 357.866248][ T1000] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 357.867531][ T1000] CR2: 000055ce01ba8100 CR3: 00000000b7dbe005 CR4: 00000000000606f0 [ 357.868972][ T1000] Call Trace: [ 357.869423][ T1000] ? lock_contended+0xcd0/0xcd0 [ 357.870001][ T1000] ? __alloc_pages_slowpath+0x21d0/0x21d0 [ 357.870673][ T1000] ? _kstrtoull+0x76/0x160 [ 357.871148][ T1000] ? alloc_pages_current+0xc1/0x1a0 [ 357.871704][ T1000] kmalloc_order+0x22/0x80 [ 357.872184][ T1000] kmalloc_order_trace+0x1d/0x140 [ 357.872733][ T1000] __kmalloc+0x302/0x3a0 [ 357.873204][ T1000] nsim_bus_dev_numvfs_store+0x1ab/0x260 [netdevsim] [ 357.873919][ T1000] ? kernfs_get_active+0x12c/0x180 [ 357.874459][ T1000] ? new_device_store+0x450/0x450 [netdevsim] [ 357.875111][ T1000] ? kernfs_get_parent+0x70/0x70 [ 357.875632][ T1000] ? sysfs_file_ops+0x160/0x160 [ 357.876152][ T1000] kernfs_fop_write+0x276/0x410 [ 357.876680][ T1000] ? __sb_start_write+0x1ba/0x2e0 [ 357.877225][ T1000] vfs_write+0x197/0x4a0 [ 357.877671][ T1000] ksys_write+0x141/0x1d0 [ ... ] Fixes: 79579220566c ("netdevsim: add SR-IOV functionality") Fixes: 82c93a87bf8b ("netdevsim: implement couple of testing devlink health reporters") Signed-off-by: Taehee Yoo --- drivers/net/netdevsim/bus.c | 2 +- drivers/net/netdevsim/health.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/netdevsim/bus.c b/drivers/net/netdevsim/bus.c index b40e4e70995d..6cc790c4ac09 100644 --- a/drivers/net/netdevsim/bus.c +++ b/drivers/net/netdevsim/bus.c @@ -29,7 +29,7 @@ static int nsim_bus_dev_vfs_enable(struct nsim_bus_dev *nsim_bus_dev, { nsim_bus_dev->vfconfigs = kcalloc(num_vfs, sizeof(struct nsim_vf_config), - GFP_KERNEL); + GFP_KERNEL | __GFP_NOWARN); if (!nsim_bus_dev->vfconfigs) return -ENOMEM; nsim_bus_dev->num_vfs = num_vfs; diff --git a/drivers/net/netdevsim/health.c b/drivers/net/netdevsim/health.c index 30595b1299bd..ba8d9ad60feb 100644 --- a/drivers/net/netdevsim/health.c +++ b/drivers/net/netdevsim/health.c @@ -82,7 +82,7 @@ static int nsim_dev_dummy_fmsg_put(struct devlink_fmsg *fmsg, u32 binary_len) if (err) return err; - binary = kmalloc(binary_len, GFP_KERNEL); + binary = kmalloc(binary_len, GFP_KERNEL | __GFP_NOWARN); if (!binary) return -ENOMEM; get_random_bytes(binary, binary_len);