Commit 3595e234 authored by Al Viro's avatar Al Viro
Browse files

link_path_walk: use explicit returns for failure exits



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent deb106c6
Loading
Loading
Loading
Loading
+7 −12
Original line number Original line Diff line number Diff line
@@ -1772,7 +1772,7 @@ static int link_path_walk(const char *name, struct nameidata *nd)


		err = may_lookup(nd);
		err = may_lookup(nd);
 		if (err)
 		if (err)
			break;
			return err;


		hash_len = hash_name(name);
		hash_len = hash_name(name);


@@ -1794,7 +1794,7 @@ static int link_path_walk(const char *name, struct nameidata *nd)
				struct qstr this = { { .hash_len = hash_len }, .name = name };
				struct qstr this = { { .hash_len = hash_len }, .name = name };
				err = parent->d_op->d_hash(parent, &this);
				err = parent->d_op->d_hash(parent, &this);
				if (err < 0)
				if (err < 0)
					break;
					return err;
				hash_len = this.hash_len;
				hash_len = this.hash_len;
				name = this.name;
				name = this.name;
			}
			}
@@ -1829,15 +1829,13 @@ static int link_path_walk(const char *name, struct nameidata *nd)
			err = walk_component(nd, WALK_GET);
			err = walk_component(nd, WALK_GET);
		}
		}
		if (err < 0)
		if (err < 0)
			break;
			return err;


		if (err) {
		if (err) {
			const char *s = get_link(nd);
			const char *s = get_link(nd);


			if (unlikely(IS_ERR(s))) {
			if (unlikely(IS_ERR(s)))
				err = PTR_ERR(s);
				return PTR_ERR(s);
				break;
			}
			err = 0;
			err = 0;
			if (unlikely(!s)) {
			if (unlikely(!s)) {
				/* jumped */
				/* jumped */
@@ -1848,12 +1846,9 @@ static int link_path_walk(const char *name, struct nameidata *nd)
				continue;
				continue;
			}
			}
		}
		}
		if (!d_can_lookup(nd->path.dentry)) {
		if (unlikely(!d_can_lookup(nd->path.dentry)))
			err = -ENOTDIR;
			return -ENOTDIR;
			break;
		}
	}
	}
	return err;
}
}


static const char *path_init(int dfd, const struct filename *name,
static const char *path_init(int dfd, const struct filename *name,