All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: Miklos Szeredi <mszeredi@redhat.com>
Cc: Xavier Roche <xavier.roche@algolia.com>, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v2] vfs: fix link vs. rename race
Date: Tue, 13 Sep 2022 05:29:02 +0100	[thread overview]
Message-ID: <YyAHDsGiaA/0ksX8@ZenIV> (raw)
In-Reply-To: <Yx/lIWoLCWHwM6DO@ZenIV>

On Tue, Sep 13, 2022 at 03:04:17AM +0100, Al Viro wrote:
> On Mon, Feb 21, 2022 at 09:20:02AM +0100, Miklos Szeredi wrote:
> 
> [digging through the old piles of mail]
> 
> Eyes-watering control flow in do_linkat() aside (it's bound to rot; too
> much of it won't get any regression testing and it's convoluted enough
> to break easily), the main problem I have with that is the DoS potential.
> 
> You have a system-wide lock, and if it's stuck you'll get every damn
> rename(2) stuck as well.  Sure, having it taken only upon the race
> with rename() (or unlink(), for that matter) make it harder to get
> stuck with lock held, but that'll make the problem harder to reproduce
> and debug...

FWIW, how much trouble would we have if link(2) would do the following?

	find the parent of source
	lock it
	look the child up
	verify it's a non-directory
	bump child's i_nlink
		all failure exits past that point decrement child's i_nlink
	unlock the parent
	find the parent of destination
	lock it
	look the destination up
	call vfs_link
	decrement child's i_nlink - vfs_link has bumped it
	unlock the parent of destination

I do realize it can lead to leaked link count on a crash, obviously...

  reply	other threads:[~2022-09-13  4:35 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-21  8:20 [PATCH v2] vfs: fix link vs. rename race Miklos Szeredi
2022-02-21  8:56 ` Xavier Roche
2022-09-13  2:04 ` Al Viro
2022-09-13  4:29   ` Al Viro [this message]
2022-09-13  8:02     ` Amir Goldstein
2022-09-13 10:03       ` Miklos Szeredi
2022-09-13  4:41 ` NeilBrown
2022-09-13  5:20   ` Al Viro
2022-09-13  5:40     ` Al Viro
2022-09-14  0:14       ` NeilBrown
2022-09-14  1:30         ` Al Viro
2022-09-13 23:52     ` NeilBrown
2022-09-14  0:13       ` Al Viro
2022-09-16  6:13         ` [PATCH RFC] VFS: lock source directory for link to avoid " NeilBrown
2022-09-16  6:28           ` Miklos Szeredi
2022-09-16  6:45             ` NeilBrown
2022-09-16  6:49             ` Al Viro
2022-09-16 14:32           ` Amir Goldstein
2022-09-19  8:28             ` Christian Brauner
2022-09-19 22:56               ` NeilBrown
2022-09-23  3:02           ` [LTP] [VFS] 3fb4ec6faa: ltp.linkat02.fail kernel test robot
2022-09-23  3:02             ` kernel test robot
2022-09-23  3:02             ` kernel test robot

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=YyAHDsGiaA/0ksX8@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mszeredi@redhat.com \
    --cc=xavier.roche@algolia.com \
    /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: link
Be 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.