From: Shachar Sharon Date: Tue, 19 Aug 2025 08:34:13 +0000 (+0300) Subject: samr: Fix CID 1035506: close slave fd (REASOURCE_LEAK) X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3e128df1ef4ce6f633aa61a7141a9998cd7d13bc;p=thirdparty%2Fsamba.git samr: Fix CID 1035506: close slave fd (REASOURCE_LEAK) In the case of (unlikely) failure of dup2 on one of the standard file descriptors, close 'slave' fd upon return. Signed-off-by: Shachar Sharon Reviewed-by: Andreas Schneider Reviewed-by: Anoop C S Autobuild-User(master): Anoop C S Autobuild-Date(master): Thu Sep 11 13:29:37 UTC 2025 on atb-devel-224 --- diff --git a/source3/rpc_server/samr/srv_samr_chgpasswd.c b/source3/rpc_server/samr/srv_samr_chgpasswd.c index 6c0c0da0cfc..000f6c2b87d 100644 --- a/source3/rpc_server/samr/srv_samr_chgpasswd.c +++ b/source3/rpc_server/samr/srv_samr_chgpasswd.c @@ -201,18 +201,24 @@ static int dochild(int master, const char *slavedev, const struct passwd *pass, /* Make slave stdin/out/err of child. */ - if (dup2(slave, STDIN_FILENO) != STDIN_FILENO) + if ((slave != STDIN_FILENO) && + (dup2(slave, STDIN_FILENO) != STDIN_FILENO)) { + close(slave); DEBUG(3, ("Could not re-direct stdin\n")); return (False); } - if (dup2(slave, STDOUT_FILENO) != STDOUT_FILENO) + if ((slave != STDOUT_FILENO) && + (dup2(slave, STDOUT_FILENO) != STDOUT_FILENO)) { + close(slave); DEBUG(3, ("Could not re-direct stdout\n")); return (False); } - if (dup2(slave, STDERR_FILENO) != STDERR_FILENO) + if ((slave != STDERR_FILENO) && + (dup2(slave, STDERR_FILENO) != STDERR_FILENO)) { + close(slave); DEBUG(3, ("Could not re-direct stderr\n")); return (False); }