[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150414014855.GU889@ZenIV.linux.org.uk>
Date: Tue, 14 Apr 2015 02:48:55 +0100
From: Al Viro <viro@...IV.linux.org.uk>
To: Stephen Rothwell <sfr@...b.auug.org.au>
Cc: Theodore Ts'o <tytso@....edu>, linux-next@...r.kernel.org,
linux-kernel@...r.kernel.org, David Howells <dhowells@...hat.com>
Subject: Re: linux-next: manual merge of the vfs tree with the ext4 tree
On Tue, Apr 14, 2015 at 11:30:25AM +1000, Stephen Rothwell wrote:
> +static void ext4_put_link(struct dentry *dentry, struct nameidata *nd,
> + void *cookie)
> +{
> + struct page *page = cookie;
> + char *buf = nd_get_link(nd);
> +
> + if (page) {
> + kunmap(page);
> + page_cache_release(page);
> + }
> + if (buf) {
> + nd_set_link(nd, NULL);
> + kfree(buf);
What the hell is that for? ->put_link() has no damn reason to call
nd_set_link(); the whole _point_ of ->put_link() is to free what needs
to be freed when we discard a stack element. And why, in the name of
everything unholy, does it need to keep *any* page mapped?
Look, either nd_get_link() points inside that page (in which case that
kfree() is obviously invalid), or it points at kmalloc'ed buffer. In
which case kfree() is correct, but WTF do you need anything _else_?
Such as mapped pages, etc.
Has anyone reviewed that code?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists