Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp687678ybv; Thu, 13 Feb 2020 07:47:16 -0800 (PST) X-Google-Smtp-Source: APXvYqyrB8zZj0xmGTi4jyx/pUn2+CJ58es8cuHCtlVwZZvQkpDqg8JtG7VdkEXyedvfz60N3QV7 X-Received: by 2002:a9d:545:: with SMTP id 63mr14356210otw.285.1581608835977; Thu, 13 Feb 2020 07:47:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581608835; cv=none; d=google.com; s=arc-20160816; b=PcZJyIHc881RfLcS27l3Z8sigvoNuhnPTmbOjJDo7U2Eyumn89NVa8PIyJ8y1RueIO FJuSHp0kPt6xQUazL5SvhHpwc+ZzZYmNEY3HLk39AMetHNS650iaQid30EOAhBppjEbS JsLPj+Tk0zZ/04MJEzvTnqv7EbTTf20GCjpOnERmI+hjvzILkcBO2YJs5T5l7R9Bu1T+ phKjqPv860MrqjdJzLhasoj3GtY8OexWNMY1pf2xQae8Debw84vXmbq19upWswmcYswA chIqCbG1QPKES9Uwpmd2++eqdTLBZmDKIR0Z5vQfJ+ZFz6xLdBq2inuOeh7Qu86t/sgm cP9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=sfjJFljGr+x+pZfdmM9zNBTodLH69bxA77dBiteGy/0=; b=mDU0XjNSefyxLsSZr2tLAKSaF4XMmRCIaANHfzV4RpmRD1Swmm5Riu93koglxXwynD MygzwIjYs4oc59jQO/zhwAuzcs4RcpC5nZB4b5K993nHEG0YGyJQHkS3AOX+K/kqXprj ikfNrm35cbwrrSvcTADNmY4u5K+1r/RbtsDemQ/+QMaQdM7BzYX6uh+rfYOb+IbKWUEG ZoitBx1e3DkNyn524c+y7rAdMKpn/+vhlPkZfllOvT8x8qK3Y1YTH3m4i8BCkQ0ueBc3 QFR6stS0trrjo1yHw2qEWliVjmoiEd7yHIoKSrEWLVtrYW1ikV67OyI8EnivixH0lgYx 5TEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=eqKyYBMg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b21si1684785ots.38.2020.02.13.07.47.02; Thu, 13 Feb 2020 07:47:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=eqKyYBMg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387914AbgBMPq4 (ORCPT + 99 others); Thu, 13 Feb 2020 10:46:56 -0500 Received: from mail-io1-f65.google.com ([209.85.166.65]:46601 "EHLO mail-io1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387857AbgBMPqr (ORCPT ); Thu, 13 Feb 2020 10:46:47 -0500 Received: by mail-io1-f65.google.com with SMTP id t26so6932878ioi.13 for ; Thu, 13 Feb 2020 07:46:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=sfjJFljGr+x+pZfdmM9zNBTodLH69bxA77dBiteGy/0=; b=eqKyYBMg8DZY2FoBpNd7eRsKf+QTWnZURyfZZtxV0YACNIKAiIuHLZT3WNA8f8BFEF JJHjQkRQmtLrpLXl0YSDGfQXoR3J22Vs0stavAxDp7qrnVbOyYedfnvYZPNC8yXhYNG9 t/pC0dzm4Jkg+KGLN/OVIQYlyeePa9lfcc46wnabnvuo7rRDIy4X2wDX+KUAmnucSBy3 RvjwCg55eMST+B2g5fY3LaEaILcuiIISIHhd6/HskvpiNEgStsNy5EAC7M8+aDD36T5O OkAlrNSO+ZD27E4HzM+W9M8TDQJ2P+zxFNM49e4Mamhz+7ZHyscnZWKefA1SIJgCgKpz tqWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=sfjJFljGr+x+pZfdmM9zNBTodLH69bxA77dBiteGy/0=; b=WP+8RruxMYDTotb62JqZYnNy6SkiHibOaDHS06PCHHPTnVvV6/YUWP+gRWSPTIBM7b THetrKWV6nknK+taWbT74j8FlSasfOiz4RqLliqvyhSupaIZwk+NVw3K3y1OMliGps/q XR0Nm2ou2u69vlkGy8dIZP1NyV7mdOCvEQr7u6aEWXTwxoWXygyTTKqonLgq4ROPjayc t2RGXIPJBAX2cHezbR4ZBLq7Etd4bkIpupXMbR9PsyyHPZLh/HHAtjHTA2WH1Jj0L+2L zdmtNhT8A6ARiXChnIn5TWcxrgUjgSvp6pNPwUH2aGKj59Hw2LejKJpZelXYSoiI3gCj 5Kyw== X-Gm-Message-State: APjAAAWDYizNvKNoFfRYdv+InDIb/pOL95tr6my59MEog5vyvllnQWfI kw9NdULCGFuYs/MU9s3NBXqYzQ== X-Received: by 2002:a02:a795:: with SMTP id e21mr22730090jaj.1.1581608805269; Thu, 13 Feb 2020 07:46:45 -0800 (PST) Received: from google.com ([2620:15c:183:200:855f:8919:84a7:4794]) by smtp.gmail.com with ESMTPSA id x3sm737699ior.66.2020.02.13.07.46.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 07:46:44 -0800 (PST) Date: Thu, 13 Feb 2020 08:46:42 -0700 From: Ross Zwisler To: David Howells Cc: David Howells , Matthew Wilcox , Raul Rangel , linux-kernel , Mattias Nissler , Alexander Viro , linux-fsdevel@vger.kernel.org, Benjamin Gordon , Micah Morton , Dmitry Torokhov , Jan Kara , Aleksa Sarai Subject: Re: [PATCH v5] Add a "nosymfollow" mount option. Message-ID: <20200213154642.GA38197@google.com> References: <20200204215014.257377-1-zwisler@google.com> <20200205032110.GR8731@bombadil.infradead.org> <20200205034500.x3omkziqwu3g5gpx@yavin> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 06, 2020 at 12:10:45PM -0700, Ross Zwisler wrote: > On Tue, Feb 4, 2020 at 8:45 PM Aleksa Sarai wrote: > > On 2020-02-04, Matthew Wilcox wrote: > > > On Tue, Feb 04, 2020 at 04:49:48PM -0700, Ross Zwisler wrote: > > > > On Tue, Feb 4, 2020 at 3:11 PM Ross Zwisler wrote: > > > > > On Tue, Feb 4, 2020 at 2:53 PM Raul Rangel wrote: > > > > > > > --- a/include/uapi/linux/mount.h > > > > > > > +++ b/include/uapi/linux/mount.h > > > > > > > @@ -34,6 +34,7 @@ > > > > > > > #define MS_I_VERSION (1<<23) /* Update inode I_version field */ > > > > > > > #define MS_STRICTATIME (1<<24) /* Always perform atime updates */ > > > > > > > #define MS_LAZYTIME (1<<25) /* Update the on-disk [acm]times lazily */ > > > > > > > +#define MS_NOSYMFOLLOW (1<<26) /* Do not follow symlinks */ > > > > > > Doesn't this conflict with MS_SUBMOUNT below? > > > > > > > > > > > > > > /* These sb flags are internal to the kernel */ > > > > > > > #define MS_SUBMOUNT (1<<26) > > > > > > > > > > Yep. Thanks for the catch, v6 on it's way. > > > > > > > > It actually looks like most of the flags which are internal to the > > > > kernel are actually unused (MS_SUBMOUNT, MS_NOREMOTELOCK, MS_NOSEC, > > > > MS_BORN and MS_ACTIVE). Several are unused completely, and the rest > > > > are just part of the AA_MS_IGNORE_MASK which masks them off in the > > > > apparmor LSM, but I'm pretty sure they couldn't have been set anyway. > > > > > > > > I'll just take over (1<<26) for MS_NOSYMFOLLOW, and remove the rest in > > > > a second patch. > > > > > > > > If someone thinks these flags are actually used by something and I'm > > > > just missing it, please let me know. > > > > > > Afraid you did miss it ... > > > > > > /* > > > * sb->s_flags. Note that these mirror the equivalent MS_* flags where > > > * represented in both. > > > */ > > > ... > > > #define SB_SUBMOUNT (1<<26) > > > > > > It's not entirely clear to me why they need to be the same, but I haven't > > > been paying close attention to the separation of superblock and mount > > > flags, so someone else can probably explain the why of it. > > > > I could be wrong, but I believe this is historic and originates from the > > kernel setting certain flags internally (similar to the whole O_* flag, > > "internal" O_* flag, and FMODE_NOTIFY mixup). > > > > Also, one of the arguments for the new mount API was that we'd run out > > MS_* bits so it's possible that you have to enable this new mount option > > in the new mount API only. (Though Howells is the right person to talk > > to on this point.) > > As far as I can tell, SB_SUBMOUNT doesn't actually have any dependence on > MS_SUBMOUNT. Nothing ever sets or checks MS_SUBMOUNT from within the kernel, > and whether or not it's set from userspace has no bearing on how SB_SUBMOUNT > is used. SB_SUBMOUNT is set independently inside of the kernel in > vfs_submount(). > > I agree that their association seems to be historical, introduced in this > commit from David Howells: > > e462ec50cb5fa VFS: Differentiate mount flags (MS_*) from internal superblock flags > > In that commit message David notes: > > (1) Some MS_* flags get translated to MNT_* flags (such as MS_NODEV -> > MNT_NODEV) without passing this on to the filesystem, but some > filesystems set such flags anyway. > > I think this is sort of what we are trying to do with MS_NOSYMFOLLOW: have a > userspace flag that translates to MNT_NOSYMFOLLOW, but which doesn't need an > associated SB_* flag. Is it okay to reclaim the bit currently owned by > MS_SUBMOUNT and use it for MS_NOSYMFOLLOW. > > A second option would be to choose one of the unused MS_* values from the > middle of the range, such as 256 or 512. Looking back as far as git will let > me, I don't think that these flags have been used for MS_* values at least > since v2.6.12: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/include/linux/fs.h?id=1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 > > I think maybe these used to be S_WRITE and S_APPEND, which weren't filesystem > mount flags? > > https://sites.uclouvain.be/SystInfo/usr/include/sys/mount.h.html > > A third option would be to create this flag using the new mount system: > > https://lwn.net/Articles/753473/ > https://lwn.net/Articles/759499/ > > My main concern with this option is that for Chrome OS we'd like to be able to > backport whatever solution we come up with to a variety of older kernels, and > if we go with the new mount system this would require us to backport the > entire new mount system to those kernels, which I think is infeasible. > > David, what are your thoughts on this? Of these three options for supporting > a new MS_NOSYMFOLLOW flag: > > 1) reclaim the bit currently used by MS_SUBMOUNT > 2) use a smaller unused value for the flag, 256 or 512 > 3) implement the new flag only in the new mount system > > do you think either #1 or #2 are workable? If so, which would you prefer? Gentle ping on this - do either of the options using the existing mount API seem possible? Would it be useful for me to send out example patches in one of those directions? Or is it out of the question, and I should spend my time on making patches using the new mount system? Thanks!