fix the core when acceptfd_sk_t->ep is null and dereference it in acceptfd_sk_delete
This commit is contained in:
parent
0ab14a6721
commit
165bd11da4
22
deps/ussl-hook/loop/ussl_factory.c
vendored
22
deps/ussl-hook/loop/ussl_factory.c
vendored
@ -36,9 +36,11 @@ static void clientfd_sk_delete(ussl_sf_t *sf, clientfd_sk_t *s)
|
||||
if (s->has_error) {
|
||||
shutdown(s->fd, SHUT_WR);
|
||||
}
|
||||
if (0 != (ret = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
ussl_log_warn("delete client fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
|
||||
s->fd, errno);
|
||||
if (NULL != s->ep) {
|
||||
if (0 != (ret = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
ussl_log_warn("delete client fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
|
||||
s->fd, errno);
|
||||
}
|
||||
}
|
||||
if (0 != (ret = libc_epoll_ctl(s->fd_info.org_epfd, EPOLL_CTL_ADD,
|
||||
s->fd_info.client_fd, &s->fd_info.event))) {
|
||||
@ -72,6 +74,8 @@ static acceptfd_sk_t *acceptfd_sk_new(ussl_sf_t *sf)
|
||||
s->type = SERVER_SOCK;
|
||||
s->has_error = 0;
|
||||
s->start_time = time(NULL);
|
||||
s->fd = -1;
|
||||
s->ep = NULL;
|
||||
ussl_dlink_init(&s->timeout_link);
|
||||
}
|
||||
return s;
|
||||
@ -86,7 +90,9 @@ static void acceptfd_sk_delete(ussl_sf_t *sf, acceptfd_sk_t *s)
|
||||
int err = 0;
|
||||
if (s->has_error) {
|
||||
} else {
|
||||
if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
if (NULL == s->ep) {
|
||||
need_close = 1;
|
||||
} else if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
ussl_log_warn("remove acceptfd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd, s->fd,
|
||||
errno);
|
||||
} else if (0 != (err = dispatch_accept_fd_to_certain_group(s->fd, s->fd_info.client_gid))) {
|
||||
@ -96,9 +102,11 @@ static void acceptfd_sk_delete(ussl_sf_t *sf, acceptfd_sk_t *s)
|
||||
}
|
||||
}
|
||||
if (need_close) {
|
||||
if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
ussl_log_warn("delete accept fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
|
||||
s->fd, errno);
|
||||
if (NULL != s->ep) {
|
||||
if (0 != (err = libc_epoll_ctl(s->ep->fd, EPOLL_CTL_DEL, s->fd, NULL))) {
|
||||
ussl_log_warn("delete accept fd from epoll failed, epfd:%d, fd:%d, errno:%d", s->ep->fd,
|
||||
s->fd, errno);
|
||||
}
|
||||
}
|
||||
if (0 != (err = ussl_close(s->fd))) {
|
||||
ussl_log_warn("ussl_close failed, fd:%d, errno:%d", s->fd, errno);
|
||||
|
9
deps/ussl-hook/loop/ussl_listenfd.c
vendored
9
deps/ussl-hook/loop/ussl_listenfd.c
vendored
@ -41,11 +41,14 @@ void ussl_on_accept(int fd, ussl_sf_t *sf, ussl_eloop_t *ep)
|
||||
}
|
||||
}
|
||||
if (!add_succ) {
|
||||
if (fd >= 0) {
|
||||
close(fd);
|
||||
}
|
||||
if (NULL != ns) {
|
||||
ns->has_error = 1;
|
||||
ns->fd = fd;
|
||||
sf->destroy(sf, ns);
|
||||
} else {
|
||||
if (fd >= 0) {
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user