From: Yu Watanabe Date: Fri, 20 Feb 2026 07:18:07 +0000 (+0900) Subject: mstack: fix resource leak on failure path X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b78db85bca664b6ae5c0babb6ee12a938f6e6211;p=thirdparty%2Fsystemd.git mstack: fix resource leak on failure path This makes the mstack_load() requires 'ret', as clearing the loaded mstack without use is meaningless. All callers already pass non-NULL for the argument. Follow-up for 8343032a86b62f62780de85a696ab8f9d2632244. Fixes CID#1645105. --- diff --git a/src/shared/mstack.c b/src/shared/mstack.c index f0ebd57635b..d1eddda28bb 100644 --- a/src/shared/mstack.c +++ b/src/shared/mstack.c @@ -1120,19 +1120,18 @@ int mstack_apply( return mstack_bind_mounts(&mstack, where, /* where_fd= */ -EBADF, flags, ret_root_fd); } -int mstack_load(const char *dir, - int dir_fd, - MStack **ret) { - +int mstack_load(const char *dir, int dir_fd, MStack **ret) { int r; + assert(ret); + /* Well-known errors: * * -ENOTUNIQ → Multiple conflicting layers for the same path defined * -EBADMSG → Bad file suffix, inode type for layer, or unrecognized entry */ - MStack *mstack = new(MStack, 1); + _cleanup_(mstack_freep) MStack *mstack = new(MStack, 1); if (!mstack) return -ENOMEM; @@ -1142,9 +1141,7 @@ int mstack_load(const char *dir, if (r < 0) return r; - if (ret) - *ret = TAKE_PTR(mstack); - + *ret = TAKE_PTR(mstack); return 0; }