Skip to content

Commit 77c8b63

Browse files
committed
Fix phpGH-8517: FPM child pointer can be possibly uninitialized
1 parent f866295 commit 77c8b63

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

sapi/fpm/fpm/fpm_children.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ static void fpm_child_unlink(struct fpm_child_s *child) /* {{{ */
121121
}
122122
/* }}} */
123123

124-
static struct fpm_child_s *fpm_child_find(pid_t pid) /* {{{ */
124+
struct fpm_child_s *fpm_child_find(pid_t pid) /* {{{ */
125125
{
126126
struct fpm_worker_pool_s *wp;
127127
struct fpm_child_s *child = 0;

sapi/fpm/fpm/fpm_children.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
#include "fpm_events.h"
1111
#include "zlog.h"
1212

13+
struct fpm_child_s;
14+
1315
int fpm_children_create_initial(struct fpm_worker_pool_s *wp);
1416
int fpm_children_free(struct fpm_child_s *child);
1517
void fpm_children_bury();
1618
int fpm_children_init_main();
1719
int fpm_children_make(struct fpm_worker_pool_s *wp, int in_event_loop, int nb_to_spawn, int is_debug);
18-
19-
struct fpm_child_s;
20+
struct fpm_child_s *fpm_child_find(pid_t pid);
2021

2122
struct fpm_child_s {
2223
struct fpm_child_s *prev, *next;

sapi/fpm/fpm/fpm_stdio.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ static void fpm_stdio_child_said(struct fpm_event_s *ev, short which, void *arg)
129129
if (!arg) {
130130
return;
131131
}
132-
child = (struct fpm_child_s *)arg;
132+
child = fpm_child_find((intptr_t) arg);
133+
if (!child) {
134+
return;
135+
}
133136

134137
is_stdout = (fd == child->fd_stdout);
135138
if (is_stdout) {
@@ -275,10 +278,10 @@ int fpm_stdio_parent_use_pipes(struct fpm_child_s *child) /* {{{ */
275278
child->fd_stdout = fd_stdout[0];
276279
child->fd_stderr = fd_stderr[0];
277280

278-
fpm_event_set(&child->ev_stdout, child->fd_stdout, FPM_EV_READ, fpm_stdio_child_said, child);
281+
fpm_event_set(&child->ev_stdout, child->fd_stdout, FPM_EV_READ, fpm_stdio_child_said, (void *) (intptr_t) child->pid);
279282
fpm_event_add(&child->ev_stdout, 0);
280283

281-
fpm_event_set(&child->ev_stderr, child->fd_stderr, FPM_EV_READ, fpm_stdio_child_said, child);
284+
fpm_event_set(&child->ev_stderr, child->fd_stderr, FPM_EV_READ, fpm_stdio_child_said, (void *) (intptr_t) child->pid);
282285
fpm_event_add(&child->ev_stderr, 0);
283286
return 0;
284287
}

0 commit comments

Comments
 (0)