Revision: 23474 http://trac.macosforge.org/projects/launchd/changeset/23474 Author: zarzycki@apple.com Date: 2007-12-21 13:06:36 -0800 (Fri, 21 Dec 2007) Log Message: ----------- <rdar://problem/5652211> Bug: launchd_core_logic.c:6375 (23433):0: (target_j = jobmgr_find_by_pid(j->mgr, target_pid, true)) != NULL Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-12-20 00:43:45 UTC (rev 23473) +++ trunk/launchd/src/launchd_core_logic.c 2007-12-21 21:06:36 UTC (rev 23474) @@ -405,9 +405,9 @@ static void job_callback_read(job_t j, int ident); static void job_log_stray_pg(job_t j); static void job_log_chidren_without_exec(job_t j); -static job_t job_new_anonymous(jobmgr_t jm, pid_t anonpid); -static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv); -static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond); +static job_t job_new_anonymous(jobmgr_t jm, pid_t anonpid) __attribute__((malloc, nonnull, warn_unused_result)); +static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv) __attribute__((malloc, nonnull(1,2), warn_unused_result)); +static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond) __attribute__((malloc, nonnull, warn_unused_result)); static const char *job_prog(job_t j); static jobmgr_t job_get_bs(job_t j); static void job_kill(job_t j); @@ -1055,11 +1055,13 @@ gid_t kp_egid, kp_gid, kp_svgid; if (!jobmgr_assumes(jm, anonpid != 0)) { + errno = EINVAL; return NULL; } if (!jobmgr_assumes(jm, anonpid < 100000)) { /* The kernel current defines PID_MAX to be 99999, but that define isn't exported */ + errno = EINVAL; return NULL; } @@ -1074,6 +1076,7 @@ } if (!jobmgr_assumes(jm, kp.kp_proc.p_comm[0] != '\0')) { + errno = EINVAL; return NULL; } @@ -6502,6 +6505,15 @@ return BOOTSTRAP_NO_MEMORY; } + target_j = jobmgr_find_by_pid(j->mgr, target_pid, true); + + if (unlikely(target_j == NULL)) { + if (job_assumes(j, errno == ESRCH)) { + job_log(j, LOG_ERR, "Could not find PID %u while trying to set Mach bootstrap service policy: %s", target_pid, target_service); + } + return BOOTSTRAP_NO_MEMORY; + } + if (!job_assumes(j, (target_j = jobmgr_find_by_pid(j->mgr, target_pid, true)) != NULL)) { return BOOTSTRAP_NO_MEMORY; }
participants (1)
-
source_changes@macosforge.org