From: ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org (Eric W. Biederman) To: Al Viro <viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> Cc: Miklos Szeredi <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org>, Linux Containers <containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>, Kernel Mailing List <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, Andy Lutomirski <luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>, Linux-Fsdevel <linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, Matthias Schniedermeyer <ms-QGhoYOTWWTg@public.gmane.org>, Linus Torvalds <torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org> Subject: Re: [REVIEW][PATCH 1/4] vfs: Don't allow overwriting mounts in the current mount namespace Date: Fri, 08 Nov 2013 14:17:31 -0800 [thread overview] Message-ID: <87fvr61qtg.fsf@xmission.com> (raw) In-Reply-To: <20131108213551.GR13318-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> (Al Viro's message of "Fri, 8 Nov 2013 21:35:51 +0000") Al Viro <viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> writes: > On Fri, Nov 08, 2013 at 12:51:52PM -0800, Eric W. Biederman wrote: > >> The return value of d_mountpoint can be obsolete as soon as it returns >> as well, so I don't see this as being significantly different. > > Not if the ->i_mutex of that sucker is held. And it *is* held in > vfs_unlink/vfs_rmdir/vfs_rename. Note that we only care about a mountpoint > being falsely assumed to be a non-mountpoint - in the other direction we > can just shrug and say that we'd won the race and got EBUSY for that. I wasn't certain of your question. My point here was that covered() as a mechanism is as good as d_mountpoint. So the only potential issue with covered() as a mechanism is where covered() is called. Also please note old_dentry->d_inode->i_mutex is not held in rename. >> In 3.12 vfs_rmdir checks d_mountpoint with the >> dentry->d_inode->i_mutex and >> dentry->d_parent->d_inode->i_mutex held. >> >> In 3.12 vfs_unlink checks d_mountpoint with the >> dentry->d_inode->i_mutex and >> dentry->d_parent->d_inode->i_mutex hel.d >> >> In 3.12 vfs_rename_dir and vfs_rename_other checks d_mountpint with the >> target->i_mutex, new_dir->i_mutex, and old_dir->i_mutex held. >> >> >> Therefore the guarantees in 3.12 are: >> - unlink versus mount races are prevented by the >> dentry->d_inode->i_mutex of the dentry being removed. >> - unlink versus umount races are uninteresting. >> - mount versus rename races in testing of d_mountpoint are ignored. > > Read what you've written a few lines above. The part about target->i_mutex > being held. That works for the rename as unlink case but we don't hold old_dentry->d_inode->i_mutex which is what is needed to prevent a mount on the dentry we are renaming. >> So comparing this to how I have implemented covered the test is at a >> slightly different location in the call path so there may be a slightly >> larger race in rename. > > You've got a race in unlink. You've got a race in rename. You've got a race > in rmdir. And none of those had that race in 3.12 (including rename()). Rename absolutely has a race in 3.12. With very lucky timing it is possible to mount something on directory a, simultaneously rename a to b, and have the mount show up on b. > BTW, could you describe the races with umount in a bit more details? Races > with mount are simple - rmdir() sees that victim isn't a mountpoint and > proceeds, mount() sees that victim is still alive and proceeds, despite > the fact that victim is irretrievably on the way to removal. And that's > what ->i_mutex on victim prevents, making "check for d_mountpoint / remove / > call dont_mount()" atomic wrt mount(). What is the problem you are seeing > with umount()? rmdir() getting EBUSY because it hasn't noticed umount() > happening in parallel with it? Legitimate behaviour, as far I can see... > Or is it about something different? I did not say it was a problem only that it was a race. The only case I can see is getting a state EBUSY, and I see no problem with a that. Eric
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman) To: Al Viro <viro@ZenIV.linux.org.uk> Cc: Miklos Szeredi <miklos@szeredi.hu>, Andy Lutomirski <luto@amacapital.net>, "Serge E. Hallyn" <serge@hallyn.com>, Linux-Fsdevel <linux-fsdevel@vger.kernel.org>, Kernel Mailing List <linux-kernel@vger.kernel.org>, Rob Landley <rob@landley.net>, Linus Torvalds <torvalds@linux-foundation.org>, Matthias Schniedermeyer <ms@citd.de>, Linux Containers <containers@lists.linux-foundation.org> Subject: Re: [REVIEW][PATCH 1/4] vfs: Don't allow overwriting mounts in the current mount namespace Date: Fri, 08 Nov 2013 14:17:31 -0800 [thread overview] Message-ID: <87fvr61qtg.fsf@xmission.com> (raw) In-Reply-To: <20131108213551.GR13318@ZenIV.linux.org.uk> (Al Viro's message of "Fri, 8 Nov 2013 21:35:51 +0000") Al Viro <viro@ZenIV.linux.org.uk> writes: > On Fri, Nov 08, 2013 at 12:51:52PM -0800, Eric W. Biederman wrote: > >> The return value of d_mountpoint can be obsolete as soon as it returns >> as well, so I don't see this as being significantly different. > > Not if the ->i_mutex of that sucker is held. And it *is* held in > vfs_unlink/vfs_rmdir/vfs_rename. Note that we only care about a mountpoint > being falsely assumed to be a non-mountpoint - in the other direction we > can just shrug and say that we'd won the race and got EBUSY for that. I wasn't certain of your question. My point here was that covered() as a mechanism is as good as d_mountpoint. So the only potential issue with covered() as a mechanism is where covered() is called. Also please note old_dentry->d_inode->i_mutex is not held in rename. >> In 3.12 vfs_rmdir checks d_mountpoint with the >> dentry->d_inode->i_mutex and >> dentry->d_parent->d_inode->i_mutex held. >> >> In 3.12 vfs_unlink checks d_mountpoint with the >> dentry->d_inode->i_mutex and >> dentry->d_parent->d_inode->i_mutex hel.d >> >> In 3.12 vfs_rename_dir and vfs_rename_other checks d_mountpint with the >> target->i_mutex, new_dir->i_mutex, and old_dir->i_mutex held. >> >> >> Therefore the guarantees in 3.12 are: >> - unlink versus mount races are prevented by the >> dentry->d_inode->i_mutex of the dentry being removed. >> - unlink versus umount races are uninteresting. >> - mount versus rename races in testing of d_mountpoint are ignored. > > Read what you've written a few lines above. The part about target->i_mutex > being held. That works for the rename as unlink case but we don't hold old_dentry->d_inode->i_mutex which is what is needed to prevent a mount on the dentry we are renaming. >> So comparing this to how I have implemented covered the test is at a >> slightly different location in the call path so there may be a slightly >> larger race in rename. > > You've got a race in unlink. You've got a race in rename. You've got a race > in rmdir. And none of those had that race in 3.12 (including rename()). Rename absolutely has a race in 3.12. With very lucky timing it is possible to mount something on directory a, simultaneously rename a to b, and have the mount show up on b. > BTW, could you describe the races with umount in a bit more details? Races > with mount are simple - rmdir() sees that victim isn't a mountpoint and > proceeds, mount() sees that victim is still alive and proceeds, despite > the fact that victim is irretrievably on the way to removal. And that's > what ->i_mutex on victim prevents, making "check for d_mountpoint / remove / > call dont_mount()" atomic wrt mount(). What is the problem you are seeing > with umount()? rmdir() getting EBUSY because it hasn't noticed umount() > happening in parallel with it? Legitimate behaviour, as far I can see... > Or is it about something different? I did not say it was a problem only that it was a race. The only case I can see is getting a state EBUSY, and I see no problem with a that. Eric
next prev parent reply other threads:[~2013-11-08 22:17 UTC|newest] Thread overview: 181+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-08-14 17:42 DoS with unprivileged mounts Miklos Szeredi 2013-08-14 19:26 ` Andy Lutomirski 2013-08-14 19:53 ` Eric W. Biederman 2013-08-14 20:25 ` Andy Lutomirski 2013-08-14 21:54 ` Eric W. Biederman 2013-08-14 19:32 ` Eric W. Biederman 2013-08-15 4:59 ` Miklos Szeredi 2013-08-15 6:45 ` Eric W. Biederman 2013-08-15 6:52 ` Andy Lutomirski 2013-08-15 7:55 ` Eric W. Biederman 2013-08-15 9:29 ` Miklos Szeredi 2013-10-04 22:41 ` [RFC][PATCH 0/3] vfs: Detach mounts on unlink Eric W. Biederman 2013-10-04 22:42 ` [RFC][PATCH 1/3] vfs: Keep a list of mounts on a mount point Eric W. Biederman 2013-10-08 13:44 ` Miklos Szeredi 2013-10-08 20:31 ` Eric W. Biederman 2013-10-04 22:43 ` [RFC][PATCH 2/3] vfs: Add a function to lazily unmount all mounts from any dentry Eric W. Biederman 2013-10-07 4:22 ` Serge E. Hallyn 2013-10-07 6:15 ` Eric W. Biederman 2013-10-08 13:56 ` Miklos Szeredi 2013-10-08 20:32 ` Eric W. Biederman 2013-10-04 22:43 ` [RFC][PATCH 3/3] vfs: Lazily remove mounts on unlinked files and directories Eric W. Biederman 2013-10-08 15:50 ` Miklos Szeredi 2013-10-08 21:47 ` Eric W. Biederman 2013-10-09 19:12 ` Grrrr fusermount Eric W. Biederman 2013-10-09 20:09 ` Andy Lutomirski 2013-10-09 23:35 ` Eric W. Biederman 2013-10-04 23:20 ` [RFC][PATCH 0/3] vfs: Detach mounts on unlink Linus Torvalds 2013-10-05 0:03 ` Eric W. Biederman 2013-10-05 1:57 ` Eric W. Biederman 2013-10-05 23:42 ` Rob Landley 2013-10-06 0:44 ` Eric W. Biederman 2013-10-08 8:03 ` Karel Zak 2013-10-10 6:46 ` Rob Landley 2013-10-05 2:34 ` [RFC][PATCH 4/3] vfs: Allow rmdir to remove mounts in all but the current mount namespace Eric W. Biederman 2013-10-05 15:44 ` Serge E. Hallyn 2013-10-07 4:39 ` Serge E. Hallyn 2013-10-07 6:55 ` Eric W. Biederman 2013-10-07 16:53 ` Andy Lutomirski 2013-10-07 22:25 ` Eric W. Biederman 2013-10-08 16:06 ` Miklos Szeredi 2013-10-08 16:06 ` Andy Lutomirski 2013-10-08 16:11 ` Miklos Szeredi 2013-10-08 20:50 ` Eric W. Biederman 2013-10-10 10:02 ` Miklos Szeredi 2013-10-10 11:43 ` Eric W. Biederman 2013-10-10 11:57 ` Miklos Szeredi 2013-10-12 1:04 ` Eric W. Biederman 2013-10-12 1:39 ` Eric W. Biederman [not found] ` <87d2nb8dxy.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-15 20:15 ` [REVIEW][PATCH 0/4] vfs: Detach mounts on unlink Eric W. Biederman 2013-10-15 20:15 ` Eric W. Biederman 2013-10-15 20:16 ` [REVIEW][PATCH 1/4] vfs: Don't allow overwriting mounts in the current mount namespace Eric W. Biederman 2013-11-03 3:54 ` Al Viro [not found] ` <20131103035406.GA8537-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> 2013-11-08 20:51 ` Eric W. Biederman 2013-11-08 20:51 ` Eric W. Biederman 2013-11-08 21:35 ` Al Viro [not found] ` <20131108213551.GR13318-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> 2013-11-08 22:17 ` Eric W. Biederman [this message] 2013-11-08 22:17 ` Eric W. Biederman [not found] ` <87fvr61qtg.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-11-09 8:49 ` Christoph Hellwig 2013-11-09 8:49 ` Christoph Hellwig [not found] ` <20131109084916.GA21413-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> 2013-11-21 20:58 ` Eric W. Biederman 2013-11-21 20:58 ` Eric W. Biederman [not found] ` <87bo1u8vmf.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-11-08 21:35 ` Al Viro 2013-11-21 20:49 ` Eric W. Biederman 2013-11-21 20:49 ` Eric W. Biederman [not found] ` <87d2n6xpan.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-22 19:04 ` Serge E. Hallyn 2013-10-22 19:04 ` Serge E. Hallyn 2013-11-03 3:54 ` Al Viro [not found] ` <87iowyxpci.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-15 20:16 ` Eric W. Biederman 2013-10-15 20:17 ` [REVIEW][PATCH 2/4] vfs: Keep a list of mounts on a mount point Eric W. Biederman 2013-10-15 20:17 ` Eric W. Biederman [not found] ` <877gdexp9s.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-22 19:06 ` Serge E. Hallyn 2013-10-22 19:06 ` Serge E. Hallyn 2013-10-15 20:17 ` [REVIEW][PATCH 3/4] vfs: Add a function to lazily unmount all mounts from any dentry. v3 Eric W. Biederman 2013-10-15 20:17 ` Eric W. Biederman [not found] ` <871u3mxp8s.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-22 19:08 ` Serge E. Hallyn 2013-10-22 19:08 ` Serge E. Hallyn 2013-10-15 20:18 ` [REVIEW][PATCH 4/4] vfs: Lazily remove mounts on unlinked files and directories. v2 Eric W. Biederman 2013-10-15 20:18 ` Eric W. Biederman [not found] ` <87vc0ywan7.fsf_-_-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2013-10-22 19:13 ` Serge E. Hallyn 2013-10-22 19:13 ` Serge E. Hallyn 2013-10-08 10:42 ` [RFC][PATCH 4/3] vfs: Allow rmdir to remove mounts in all but the current mount namespace Matthias Schniedermeyer 2013-10-08 13:13 ` Eric W. Biederman 2013-10-05 23:07 ` [RFC][PATCH 0/3] vfs: Detach mounts on unlink Rob Landley 2013-10-05 23:17 ` Linus Torvalds 2013-10-05 23:22 ` Linus Torvalds 2013-10-06 0:18 ` Rob Landley 2013-10-06 0:37 ` Linus Torvalds 2013-10-05 23:24 ` Al Viro 2013-10-06 0:22 ` Rob Landley 2013-10-06 0:12 ` Rob Landley 2013-10-05 23:19 ` Al Viro 2013-10-06 0:13 ` Rob Landley 2014-02-15 21:34 ` [PATCH 0/11] Detaching " Eric W. Biederman 2014-02-15 21:35 ` [PATCH 01/11] vfs: Document the effect of d_revalidate on d_find_alias Eric W. Biederman 2014-02-15 21:36 ` [PATCH 02/11] vfs: More precise tests in d_invalidate Eric W. Biederman 2014-02-15 22:51 ` Linus Torvalds 2014-02-15 22:59 ` Linus Torvalds 2014-02-15 23:23 ` Eric W. Biederman 2014-02-15 23:39 ` Eric W. Biederman 2014-02-16 0:03 ` Linus Torvalds 2014-02-16 1:22 ` Eric W. Biederman 2014-02-15 21:36 ` [PATCH 03/11] vfs: Don't allow overwriting mounts in the current mount namespace Eric W. Biederman 2014-02-18 17:12 ` Miklos Szeredi 2014-02-18 21:28 ` Eric W. Biederman 2014-02-18 22:20 ` Linus Torvalds 2014-02-19 2:23 ` Stephen Rothwell 2014-02-24 23:43 ` Eric W. Biederman 2014-02-15 21:37 ` [PATCH 04/11] vfs: Keep a list of mounts on a mount point Eric W. Biederman 2014-02-15 21:37 ` [PATCH 05/11] vfs: Add a function to lazily unmount all mounts from any dentry Eric W. Biederman 2014-02-16 1:50 ` Eric W. Biederman 2014-02-18 17:17 ` Miklos Szeredi 2014-02-25 3:24 ` Eric W. Biederman 2014-02-15 21:38 ` [PATCH 06/11] vfs: Lazily remove mounts on unlinked files and directories Eric W. Biederman 2014-02-15 21:38 ` [PATCH 07/11] vfs: Remove unnecessary calls of check_submounts_and_drop Eric W. Biederman 2014-02-15 21:39 ` [PATCH 08/11] vfs: Merge check_submounts_and_drop and d_invalidate Eric W. Biederman 2014-02-18 17:40 ` Miklos Szeredi 2014-02-25 0:01 ` Eric W. Biederman 2014-02-25 15:13 ` J. Bruce Fields 2014-02-25 22:03 ` Eric W. Biederman 2014-02-26 19:37 ` J. Bruce Fields 2014-02-27 2:05 ` Eric W. Biederman 2014-02-15 21:39 ` [PATCH 09/11] vfs: Make d_invalidate return void Eric W. Biederman 2014-02-15 21:40 ` [PATCH 10/11] vfs: Remove d_drop calls from d_revalidate implementations Eric W. Biederman 2014-02-15 21:40 ` [PATCH 11/11] proc: Update proc_flush_task_mnt to use d_invalidate Eric W. Biederman 2014-02-18 17:43 ` [PATCH 0/11] Detaching mounts on unlink Miklos Szeredi 2014-02-25 9:33 ` [PATCH 0/12] Detaching mounts on unlink (for 3.15 v2) Eric W. Biederman 2014-02-25 9:34 ` [PATCH 01/12] vfs: Document the effect of d_revalidate on d_find_alias Eric W. Biederman 2014-02-25 9:35 ` [PATCH 02/12] vfs: More precise tests in d_invalidate Eric W. Biederman 2014-02-25 9:35 ` [PATCH 03/12] vfs: Don't allow overwriting mounts in the current mount namespace Eric W. Biederman 2014-02-25 9:36 ` [PATCH 04/12] vfs: Keep a list of mounts on a mount point Eric W. Biederman 2014-02-25 9:37 ` [PATCH 05/12] vfs: factor out lookup_mountpoint from new_mountpoint Eric W. Biederman 2014-02-25 9:38 ` [PATCH 06/12] vfs: Add a function to lazily unmount all mounts from any dentry Eric W. Biederman 2014-02-25 9:38 ` [PATCH 07/12] vfs: Lazily remove mounts on unlinked files and directories Eric W. Biederman 2014-02-25 9:39 ` [PATCH 08/12] vfs: Remove unnecessary calls of check_submounts_and_drop Eric W. Biederman 2014-02-25 9:40 ` [PATCH 09/12] vfs: Merge check_submounts_and_drop and d_invalidate Eric W. Biederman 2014-02-25 9:40 ` [PATCH 10/12] vfs: Make d_invalidate return void Eric W. Biederman 2014-02-25 9:41 ` [PATCH 11/12] vfs: Remove d_drop calls from d_revalidate implementations Eric W. Biederman 2014-02-25 9:41 ` [PATCH 12/12] proc: Update proc_flush_task_mnt to use d_invalidate Eric W. Biederman 2014-04-09 0:21 ` [GIT PULL] Detaching mounts on unlink for 3.15-rc1 Eric W. Biederman 2014-04-09 2:30 ` Al Viro 2014-04-09 2:39 ` Al Viro 2014-04-09 9:02 ` Eric W. Biederman 2014-04-09 17:32 ` Eric W. Biederman 2014-04-09 17:53 ` Al Viro 2014-04-09 18:28 ` Al Viro 2014-04-09 22:49 ` Eric W. Biederman 2014-04-09 22:58 ` [RFC][PATCH] vfs: In mntput run deactivate_super on a shallow stack Eric W. Biederman 2014-04-09 23:24 ` Al Viro 2014-04-10 1:36 ` Eric W. Biederman 2014-04-12 22:15 ` Eric W. Biederman 2014-04-13 5:39 ` Al Viro 2014-04-13 5:49 ` Al Viro 2014-04-13 7:01 ` Eric W. Biederman 2014-04-13 7:51 ` Eric W. Biederman 2014-04-13 21:52 ` Al Viro 2014-04-14 7:38 ` [RFC][PATCH 0/4] No I/O from mntput Eric W. Biederman 2014-04-14 7:40 ` [PATCH 1/4] vfs: Remove useless loop in mntput_no_expire Eric W. Biederman 2014-04-14 7:40 ` [PATCH 2/4] vfs: Move autoclose of BSD accounting into a work queue Eric W. Biederman 2014-04-14 7:41 ` [PATCH 3/4] vfs: In mntput run deactivate_super on a shallow stack Eric W. Biederman 2014-04-14 7:42 ` [PATCH 4/4] vfs: Block intuitively in the case of BSD accounting files Eric W. Biederman 2014-04-16 22:03 ` [RFC][PATCH 0/4] No I/O from mntput Eric W. Biederman 2014-04-17 20:05 ` [GIT PULL] Detaching mounts on unlink for 3.15 Eric W. Biederman 2014-04-17 20:22 ` Al Viro 2014-04-17 21:23 ` Eric W. Biederman 2014-04-17 22:12 ` Al Viro 2014-04-17 22:14 ` Al Viro 2014-04-18 0:37 ` Al Viro 2014-04-18 0:58 ` Al Viro 2014-04-19 1:35 ` Al Viro 2014-04-19 2:16 ` Al Viro 2014-04-19 7:05 ` Al Viro 2014-04-20 5:41 ` Al Viro 2014-05-11 16:45 ` Al Viro 2014-05-11 17:05 ` Al Viro 2014-08-09 9:34 ` Al Viro 2014-08-09 9:55 ` Eric W. Biederman 2014-08-12 10:17 ` Eric W. Biederman 2014-08-13 13:18 ` Al Viro 2014-08-13 17:18 ` Eric W. Biederman 2014-04-09 22:01 ` [GIT PULL] Detaching mounts on unlink for 3.15-rc1 Dave Chinner 2013-08-15 21:23 ` DoS with unprivileged mounts Rob Landley
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87fvr61qtg.fsf@xmission.com \ --to=ebiederm-as9lmozglivwk0htik3j/w@public.gmane.org \ --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \ --cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org \ --cc=miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org \ --cc=ms-QGhoYOTWWTg@public.gmane.org \ --cc=torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \ --cc=viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.