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=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 1E437C433E6 for ; Mon, 8 Mar 2021 00:13:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E164065151 for ; Mon, 8 Mar 2021 00:13:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233326AbhCHANF (ORCPT ); Sun, 7 Mar 2021 19:13:05 -0500 Received: from zeniv-ca.linux.org.uk ([142.44.231.140]:34826 "EHLO zeniv-ca.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231894AbhCHAMd (ORCPT ); Sun, 7 Mar 2021 19:12:33 -0500 X-Greylist: delayed 1117 seconds by postgrey-1.27 at vger.kernel.org; Sun, 07 Mar 2021 19:12:32 EST Received: from viro by zeniv-ca.linux.org.uk with local (Exim 4.94 #2 (Red Hat Linux)) id 1lJ3VW-003qWR-Cw; Mon, 08 Mar 2021 00:12:22 +0000 Date: Mon, 8 Mar 2021 00:12:22 +0000 From: Al Viro To: Alexander Mikhalitsyn Cc: Ian Kent , Matthew Wilcox , Pavel Tikhomirov , Kirill Tkhai , autofs@vger.kernel.org, linux-kernel@vger.kernel.org, Miklos Szeredi , Christian Brauner , Ross Zwisler , Aleksa Sarai , Eric Biggers , Mattias Nissler , linux-fsdevel@vger.kernel.org, alexander@mihalicyn.com Subject: Re: [RFC PATCH] autofs: find_autofs_mount overmounted parent support Message-ID: References: <20210303152931.771996-1-alexander.mikhalitsyn@virtuozzo.com> <832c1a384dc0b71b2902accf3091ea84381acc10.camel@themaw.net> <20210304131133.0ad93dee12a17f41f4052bcb@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: Al Viro Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Mar 07, 2021 at 11:51:20PM +0000, Al Viro wrote: > On Thu, Mar 04, 2021 at 01:11:33PM +0300, Alexander Mikhalitsyn wrote: > > > That problem connected with CRIU (Checkpoint-Restore in Userspace) project. > > In CRIU we have support of autofs mounts C/R. To acheive that we need to use > > ioctl's from /dev/autofs to get data about mounts, restore mount as catatonic > > (if needed), change pipe fd and so on. But the problem is that during CRIU > > dump we may meet situation when VFS subtree where autofs mount present was > > overmounted as whole. > > > > Simpliest example is /proc/sys/fs/binfmt_misc. This mount present on most > > GNU/Linux distributions by default. For instance on my Fedora 33: > > > > trigger automount of binfmt_misc > > $ ls /proc/sys/fs/binfmt_misc > > > > $ cat /proc/1/mountinfo | grep binfmt > > 35 24 0:36 / /proc/sys/fs/binfmt_misc rw,relatime shared:16 - autofs systemd-1 rw,...,direct,pipe_ino=223 > > 632 35 0:56 / /proc/sys/fs/binfmt_misc rw,...,relatime shared:315 - binfmt_misc binfmt_misc rw > > > > $ sudo unshare -m -p --fork --mount-proc sh > > # cat /proc/self/mountinfo | grep "/proc" > > 828 809 0:23 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw > > 829 828 0:36 / /proc/sys/fs/binfmt_misc rw,relatime - autofs systemd-1 rw,...,direct,pipe_ino=223 > > 943 829 0:56 / /proc/sys/fs/binfmt_misc rw,...,relatime - binfmt_misc binfmt_misc rw > > 949 828 0:57 / /proc rw...,relatime - proc proc rw > > > > As we can see now autofs mount /proc/sys/fs/binfmt_misc is inaccessible. > > If we do something like: > > > > struct autofs_dev_ioctl *param; > > param = malloc(...); > > devfd = open("/dev/autofs", O_RDONLY); > > init_autofs_dev_ioctl(param); > > param->size = size; > > strcpy(param->path, "/proc/sys/fs/binfmt_misc"); > > param->openmount.devid = 36; > > err = ioctl(devfd, AUTOFS_DEV_IOCTL_OPENMOUNT, param) > > > > now we get err = -ENOENT. > > Where does that -ENOENT come from? AFAICS, pathwalk ought to succeed and > return you the root of overmounting binfmt_misc. Why doesn't the loop in > find_autofs_mount() locate anything it would accept? > > I really dislike the patch - the whole "normalize path" thing is fundamentally > bogus, not to mention the iterator over all mounts, etc., so I would like to > understand what the hell is going on before even thinking of *not* NAKing > it on sight. Wait, so you have /proc overmounted, without anything autofs-related on /proc/sys/fs/binfmt_misc and still want to have the pathname resolved, just because it would've resolved with that overmount of /proc removed? I hope I'm misreading you; in case I'm not, the ABI is extremely tasteless and until you manage to document the exact semantics you want for param->path, consider it NAKed.