parse_nfs_url() returns either an allocated string on success or an error pointer otherwise. blspec_bootentry_provider() will early exit if the path couldn't be resolved and thus not free() the string. Fix this memory leak. While at it, change parse_nfs_url() to return NULL on error. The error code is unused and just returning NULL, simplifies the code. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- common/blspec.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/common/blspec.c b/common/blspec.c index 9bb25ee72123..d391f690ad0c 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -341,10 +341,10 @@ static char *parse_nfs_url(const char *url) int ret; if (!IS_ENABLED(CONFIG_FS_NFS)) - return ERR_PTR(-ENOSYS); + return NULL; if (strncmp(url, "nfs://", 6)) - return ERR_PTR(-EINVAL); + return NULL; url += 6; @@ -413,7 +413,7 @@ out: if (ret) free(mountpath); - return ret ? ERR_PTR(ret) : mountpath; + return ret ? NULL : mountpath; } /* @@ -824,12 +824,12 @@ static int blspec_bootentry_provider(struct bootentries *bootentries, if (*name == '/' || !strncmp(name, "nfs://", 6)) { char *nfspath = parse_nfs_url(name); - if (!IS_ERR(nfspath)) + if (nfspath) name = nfspath; ret = stat(name, &s); if (ret) - return found; + goto out; if (S_ISDIR(s.st_mode)) ret = blspec_scan_directory(bootentries, name); @@ -838,8 +838,8 @@ static int blspec_bootentry_provider(struct bootentries *bootentries, if (ret > 0) found += ret; - if (!IS_ERR(nfspath)) - free(nfspath); +out: + free(nfspath); } return found; -- 2.30.2