Mercurial > hg > nginx-quic
view src/os/unix/ngx_linux_config.h @ 8700:b09f055daa4e quic
QUIC: fixed handling of RETIRE_CONNECTION_ID frame.
Previously, the retired socket was not closed if it didn't match
active or backup.
New sockets could not be created (due to count limit), since retired socket
was not closed before calling ngx_quic_create_sockets().
When replacing retired socket, new socket is only requested after closing
old one, to avoid hitting the limit on the number of active connection ids.
Together with added restrictions, this fixes an issue when a current socket
could be closed during migration, recreated and erroneously reused leading
to null pointer dereference.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Thu, 18 Nov 2021 14:19:36 +0300 |
parents | bb5152ed045b |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_LINUX_CONFIG_H_INCLUDED_ #define _NGX_LINUX_CONFIG_H_INCLUDED_ #ifndef _GNU_SOURCE #define _GNU_SOURCE /* pread(), pwrite(), gethostname() */ #endif #define _FILE_OFFSET_BITS 64 #include <sys/types.h> #include <sys/time.h> #include <unistd.h> #include <stdarg.h> #include <stddef.h> /* offsetof() */ #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <errno.h> #include <string.h> #include <signal.h> #include <pwd.h> #include <grp.h> #include <dirent.h> #include <glob.h> #include <sys/vfs.h> /* statfs() */ #include <sys/uio.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/wait.h> #include <sys/mman.h> #include <sys/resource.h> #include <sched.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> /* TCP_NODELAY, TCP_CORK */ #include <arpa/inet.h> #include <netdb.h> #include <sys/un.h> #include <time.h> /* tzset() */ #include <malloc.h> /* memalign() */ #include <limits.h> /* IOV_MAX */ #include <sys/ioctl.h> #include <crypt.h> #include <sys/utsname.h> /* uname() */ #include <dlfcn.h> #include <ngx_auto_config.h> #if (NGX_HAVE_POSIX_SEM) #include <semaphore.h> #endif #if (NGX_HAVE_SYS_PRCTL_H) #include <sys/prctl.h> #endif #if (NGX_HAVE_SENDFILE64) #include <sys/sendfile.h> #else extern ssize_t sendfile(int s, int fd, int32_t *offset, size_t size); #define NGX_SENDFILE_LIMIT 0x80000000 #endif #if (NGX_HAVE_POLL) #include <poll.h> #endif #if (NGX_HAVE_EPOLL) #include <sys/epoll.h> #endif #if (NGX_HAVE_SYS_EVENTFD_H) #include <sys/eventfd.h> #endif #include <sys/syscall.h> #if (NGX_HAVE_FILE_AIO) #include <linux/aio_abi.h> typedef struct iocb ngx_aiocb_t; #endif #if (NGX_HAVE_CAPABILITIES) #include <linux/capability.h> #endif #if (NGX_HAVE_UDP_SEGMENT) #include <netinet/udp.h> #endif #define NGX_LISTEN_BACKLOG 511 #ifndef NGX_HAVE_SO_SNDLOWAT /* setsockopt(SO_SNDLOWAT) returns ENOPROTOOPT */ #define NGX_HAVE_SO_SNDLOWAT 0 #endif #ifndef NGX_HAVE_INHERITED_NONBLOCK #define NGX_HAVE_INHERITED_NONBLOCK 0 #endif #define NGX_HAVE_OS_SPECIFIC_INIT 1 #define ngx_debug_init() extern char **environ; #endif /* _NGX_LINUX_CONFIG_H_INCLUDED_ */