Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2773291pxj; Mon, 31 May 2021 10:22:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwMNMPGEVr6WrwRkhXUGiSic78dWcil2XVFJvW6sZ7Apt2tejB4rJVtwIIQS6JN+mo+lJE3 X-Received: by 2002:a17:906:5495:: with SMTP id r21mr24465396ejo.471.1622481751044; Mon, 31 May 2021 10:22:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622481751; cv=none; d=google.com; s=arc-20160816; b=oi9FjOZRZWBnDZ77SIqLHd8ZB1Fo15S6SKECH1nwv4jCZFcnxdA876GXYHgYSuSbaI adZsrNlb7HfELegOCLF1pEjfj9qXCuRUB6mxHuquPKnnLYzKEY7JxCghZ9onqlshlDML P2jBXz49vXUPtfhk1bXcW3zy5oMMUVpcNuKYO74bCyEXfbxgtQYr+Ou7cogC66P6K+1B eFGu+M11/mg+Rt9nG9SSHmrRfPI9VlmycjEzoaCxvOd+PZPSHupHTzI+l3bFXmUP0lqC G3BEGthks5eE0OQvIlW/GolLrPxWbm3tnU3pWuqulS9wXYXdpeM6o/Eq3Kcg/Oac1R3Z tM7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=YIxlSk91TuUABFkgr/k5Yi3OXLq37Uwi7gnEsi3Btt4=; b=AngCQdKd1H3n3xRs8FBkz80iS/U2m1b7zuj37ypcgOk34AeXB9zGxMnZ4dl1Nit+TZ HO/6OEbzU5pse9VAV5x5fXlpDD7/OkFSWkkkZVhWfHwOypxmhUnEH9O1vjEHayKeV12e SSSaIOxbB0oUkQDODhFmzDZclBXzKabc/+mZY2cbaPjd5yixAdRm8ysFtri5qM2JnUfS sWNv67OOBGWq9p+2Jcwym8AC17006S3bhzdlTnaIURy9n36QMCgXwWyXqM+mF3e5+vge Y5qTNzAVwAoCEWtZFQEmcGqcyV/3Jg0YQaF8d5RvZ8xgO961Rjkngk5wZgo3+16QNnpT GPAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qA1l1Pe1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f6si11359741edd.60.2021.05.31.10.22.08; Mon, 31 May 2021 10:22:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qA1l1Pe1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232823AbhEaRV1 (ORCPT + 99 others); Mon, 31 May 2021 13:21:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233271AbhEaRUk (ORCPT ); Mon, 31 May 2021 13:20:40 -0400 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40996C0431FC; Mon, 31 May 2021 08:34:35 -0700 (PDT) Received: by mail-pj1-x1034.google.com with SMTP id b15-20020a17090a550fb029015dad75163dso195798pji.0; Mon, 31 May 2021 08:34:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YIxlSk91TuUABFkgr/k5Yi3OXLq37Uwi7gnEsi3Btt4=; b=qA1l1Pe1DWi2hEyakId/vhm80G9PN4zkftLWig/60q0ofmynv4I1G8aZ4XXV8vQXbj WVB3kXNm6E9OQqjJHiGyxRZ4c1O7V6o3ncjQi0a93RiGYfFi0E8e13d2PiXvRRCrvXeo PxyrN926RykD739bnPk8dOe43GPF0cRbDyF+0JY/9LeFfP/QNriKZ1VCACRAz+ZLWGpS ebwNvVgr1Hm4u180TAnKmKaDiv3MKIAflhjnlBVeS/Jox/Qzzz1CtYBWk8lY9KeIvlCw 079N4B+ZGg1KzzZQBPpXNkkBwkWpqlhD5eooQ/TctDSzGJQMcJDEIgewQN8d9v1Dn0Uy qJOQ== 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:mime-version :content-transfer-encoding; bh=YIxlSk91TuUABFkgr/k5Yi3OXLq37Uwi7gnEsi3Btt4=; b=MEo2pALqI07o9n8WYQfD+2n6uBfxVJm7eeVVMDauOC8qev/JLSXYqDMmw15PBYbP4A /FhYvxf4aielTZwkGzHl/q8FOPWaJXFs9FQt6kT1q5HaZa8nhAErrFuGCGcyvNd5kKqK speVMhhtVcpVU+NKuOP7dgxAPyoEVBg8S+epmjDig1njCXz/vUoMe2c+ZpnZ0P5RfUcL WGU2inTeT9ZrRH3gbfKswOUce+0KezyAuaPByNtJBOEOGaLU5X/h27QZgM4mTiOl13qC M4hKMjHyUV6IgYz6tfvWq3w7U56QmmNqWtvvN8OEcqorkXb3Ed5XGeUcEQ3TL4idGqh1 xlYQ== X-Gm-Message-State: AOAM5307BxTkcIe/IAMqMYxsqHAI2TKIZnaoOuQTXKe/qqbjV8MLODr5 TTrBuL+9QJQ3BpjA1g68Inh3XGZ5ylqw9Q== X-Received: by 2002:a17:90a:aa12:: with SMTP id k18mr19852008pjq.232.1622475274796; Mon, 31 May 2021 08:34:34 -0700 (PDT) Received: from WRT-WX9.. ([141.164.41.4]) by smtp.gmail.com with ESMTPSA id q91sm4369382pja.50.2021.05.31.08.34.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 May 2021 08:34:34 -0700 (PDT) From: Changbin Du To: Alexander Viro Cc: "David S. Miller" , Jakub Kici nski , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Changbin Du , stable@vger.kernel.org, Cong Wang , David Laight Subject: [PATCH] nsfs: fix oops when ns->ops is not provided Date: Mon, 31 May 2021 23:34:10 +0800 Message-Id: <20210531153410.93150-1-changbin.du@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We should not create inode for disabled namespace. A disabled namespace sets its ns->ops to NULL. Kernel could panic if we try to create a inode for such namespace. Here is an example oops in socket ioctl cmd SIOCGSKNS when NET_NS is disabled. Kernel panicked wherever nsfs trys to access ns->ops since the proc_ns_operations is not implemented in this case. [7.670023] Unable to handle kernel NULL pointer dereference at virtual address 00000010 [7.670268] pgd = 32b54000 [7.670544] [00000010] *pgd=00000000 [7.671861] Internal error: Oops: 5 [#1] SMP ARM [7.672315] Modules linked in: [7.672918] CPU: 0 PID: 1 Comm: systemd Not tainted 5.13.0-rc3-00375-g6799d4f2da49 #16 [7.673309] Hardware name: Generic DT based system [7.673642] PC is at nsfs_evict+0x24/0x30 [7.674486] LR is at clear_inode+0x20/0x9c So let's reject such request for disabled namespace. Signed-off-by: Changbin Du Cc: Cc: Cong Wang Cc: Jakub Kicinski Cc: David Laight --- fs/nsfs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/nsfs.c b/fs/nsfs.c index 800c1d0eb0d0..6c055eb7757b 100644 --- a/fs/nsfs.c +++ b/fs/nsfs.c @@ -62,6 +62,10 @@ static int __ns_get_path(struct path *path, struct ns_common *ns) struct inode *inode; unsigned long d; + /* In case the namespace is not actually enabled. */ + if (!ns->ops) + return -EOPNOTSUPP; + rcu_read_lock(); d = atomic_long_read(&ns->stashed); if (!d) -- 2.30.2