Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6500801 authored by Al Viro's avatar Al Viro
Browse files

__dentry_path() fixes



* we need to save the starting point for restarts
* reject pathologically short buffers outright

Spotted-by: default avatarDenys Vlasenko <dvlasenk@redhat.com>
Spotted-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent a8323da0
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -3116,19 +3116,22 @@ char *simple_dname(struct dentry *dentry, char *buffer, int buflen)
/*
 * Write full pathname from the root of the filesystem into the buffer.
 */
static char *__dentry_path(struct dentry *dentry, char *buf, int buflen)
static char *__dentry_path(struct dentry *d, char *buf, int buflen)
{
	struct dentry *dentry;
	char *end, *retval;
	int len, seq = 0;
	int error = 0;

	if (buflen < 2)
		goto Elong;

	rcu_read_lock();
restart:
	dentry = d;
	end = buf + buflen;
	len = buflen;
	prepend(&end, &len, "\0", 1);
	if (buflen < 1)
		goto Elong;
	/* Get '/' right */
	retval = end-1;
	*retval = '/';