summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2021-05-17 16:23:50 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2021-05-17 16:23:50 +0200
commit0352849942a048b18f01405fc742005e428c043d (patch)
tree9c0b1a54167537b618fa5cfb43d10993a1f59769
parente1f13c0a311308ea0172f2688e23a55c5cfd00af (diff)
parent04b42aafb9b17eb1951fc80e1bcd490ae77db14f (diff)
downloadbarebox-0352849942a048b18f01405fc742005e428c043d.tar.gz
barebox-0352849942a048b18f01405fc742005e428c043d.tar.xz
Merge branch 'for-next/fs'
-rw-r--r--fs/fs.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/fs/fs.c b/fs/fs.c
index 6de5a3b59e..f4baba81e7 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -1866,14 +1866,17 @@ static struct filename *getname(const char *filename)
{
struct filename *result;
+ if (!*filename)
+ return ERR_PTR(-ENOENT);
+
result = malloc(sizeof(*result));
if (!result)
- return NULL;
+ return ERR_PTR(-ENOMEM);
result->name = strdup(filename);
if (!result->name) {
free(result);
- return NULL;
+ return ERR_PTR(-ENOMEM);
}
result->refcnt = 1;
@@ -2186,6 +2189,9 @@ static int filename_lookup(int dfd, struct filename *name, unsigned flags,
struct nameidata nd;
const char *s;
+ if (IS_ERR(name))
+ return PTR_ERR(name);
+
set_nameidata(&nd, dfd, name);
s = path_init(&nd, flags);
@@ -2362,8 +2368,14 @@ int open(const char *pathname, int flags, ...)
struct dentry *dentry = NULL;
struct nameidata nd;
const char *s;
+ struct filename *filename;
+
+ filename = getname(pathname);
+ if (IS_ERR(filename))
+ return PTR_ERR(filename);
+
+ set_nameidata(&nd, AT_FDCWD, filename);
- set_nameidata(&nd, AT_FDCWD, getname(pathname));
s = path_init(&nd, LOOKUP_FOLLOW);
while (1) {