diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-05-17 16:23:50 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-05-17 16:23:50 +0200 |
commit | 0352849942a048b18f01405fc742005e428c043d (patch) | |
tree | 9c0b1a54167537b618fa5cfb43d10993a1f59769 | |
parent | e1f13c0a311308ea0172f2688e23a55c5cfd00af (diff) | |
parent | 04b42aafb9b17eb1951fc80e1bcd490ae77db14f (diff) | |
download | barebox-0352849942a048b18f01405fc742005e428c043d.tar.gz barebox-0352849942a048b18f01405fc742005e428c043d.tar.xz |
Merge branch 'for-next/fs'
-rw-r--r-- | fs/fs.c | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -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) { |