Browse Source

memset zero before using

Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
pull/998/head
Syrone Wong 8 years ago
committed by Max Lv
parent
commit
e6c0780435
7 changed files with 52 additions and 41 deletions
  1. 3
      src/encrypt.c
  2. 11
      src/local.c
  3. 13
      src/manager.c
  4. 19
      src/redir.c
  5. 8
      src/resolv.c
  6. 21
      src/server.c
  7. 18
      src/tunnel.c

3
src/encrypt.c

@ -726,7 +726,8 @@ cipher_context_init(cipher_ctx_t *ctx, int method, int enc)
FATAL("Cannot initialize PolarSSL cipher context");
}
#elif defined(USE_CRYPTO_MBEDTLS)
ctx->evp = (cipher_evp_t *)ss_malloc(sizeof(cipher_evp_t));
ctx->evp = ss_malloc(sizeof(cipher_evp_t));
memset(ctx->evp, 0, sizeof(cipher_evp_t));
cipher_evp_t *evp = ctx->evp;
if (cipher == NULL) {

11
src/local.c

@ -907,6 +907,9 @@ new_remote(int fd, int timeout)
remote->buf = ss_malloc(sizeof(buffer_t));
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
balloc(remote->buf, BUF_SIZE);
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
remote->recv_ctx->connected = 0;
remote->send_ctx->connected = 0;
remote->fd = fd;
@ -920,8 +923,6 @@ new_remote(int fd, int timeout)
ev_timer_init(&remote->recv_ctx->watcher, remote_timeout_cb,
timeout, timeout);
balloc(remote->buf, BUF_SIZE);
return remote;
}
@ -964,6 +965,9 @@ new_server(int fd, int method)
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
server->buf = ss_malloc(sizeof(buffer_t));
balloc(server->buf, BUF_SIZE);
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
memset(server->send_ctx, 0, sizeof(server_ctx_t));
server->stage = STAGE_INIT;
server->recv_ctx->connected = 0;
server->send_ctx->connected = 0;
@ -984,8 +988,6 @@ new_server(int fd, int method)
ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);
ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);
balloc(server->buf, BUF_SIZE);
cork_dllist_add(&connections, &server->entries);
return server;
@ -1388,6 +1390,7 @@ main(int argc, char **argv)
listen_ctx_t listen_ctx;
listen_ctx.remote_num = remote_num;
listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);
memset(listen_ctx.remote_addr, 0, sizeof(struct sockaddr *) * remote_num);
for (i = 0; i < remote_num; i++) {
char *host = remote_addr[i].host;
char *port = remote_addr[i].port == NULL ? remote_port :

13
src/manager.c

@ -98,7 +98,7 @@ build_config(char *prefix, struct server *server)
char *path = NULL;
int path_size = strlen(prefix) + strlen(server->port) + 20;
path = malloc(path_size);
path = ss_malloc(path_size);
snprintf(path, path_size, "%s/.shadowsocks_%s.conf", prefix, server->port);
FILE *f = fopen(path, "w+");
if (f == NULL) {
@ -243,7 +243,7 @@ get_server(char *buf, int len)
return NULL;
}
struct server *server = (struct server *)malloc(sizeof(struct server));
struct server *server = ss_malloc(sizeof(struct server));
memset(server, 0, sizeof(struct server));
if (obj->type == json_object) {
int i = 0;
@ -322,7 +322,7 @@ kill_server(char *prefix, char *pid_file)
{
char *path = NULL;
int pid, path_size = strlen(prefix) + strlen(pid_file) + 2;
path = malloc(path_size);
path = ss_malloc(path_size);
snprintf(path, path_size, "%s/%s", prefix, pid_file);
FILE *f = fopen(path, "r");
if (f == NULL) {
@ -345,7 +345,7 @@ stop_server(char *prefix, char *port)
{
char *path = NULL;
int pid, path_size = strlen(prefix) + strlen(port) + 20;
path = malloc(path_size);
path = ss_malloc(path_size);
snprintf(path, path_size, "%s/.shadowsocks_%s.pid", prefix, port);
FILE *f = fopen(path, "r");
if (f == NULL) {
@ -861,7 +861,7 @@ main(int argc, char **argv)
struct passwd *pw = getpwuid(getuid());
const char *homedir = pw->pw_dir;
working_dir_size = strlen(homedir) + 15;
working_dir = malloc(working_dir_size);
working_dir = ss_malloc(working_dir_size);
snprintf(working_dir, working_dir_size, "%s/.shadowsocks", homedir);
int err = mkdir(working_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
@ -894,7 +894,8 @@ main(int argc, char **argv)
if (conf != NULL) {
for (i = 0; i < conf->port_password_num; i++) {
struct server *server = (struct server *)malloc(sizeof(struct server));
struct server *server = ss_malloc(sizeof(struct server));
memset(server, 0, sizeof(struct server));
strncpy(server->port, conf->port_password[i].port, 8);
strncpy(server->password, conf->port_password[i].password, 128);
add_server(&manager, server);

19
src/redir.c

@ -531,14 +531,15 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
static remote_t *
new_remote(int fd, int timeout)
{
remote_t *remote;
remote = ss_malloc(sizeof(remote_t));
remote_t *remote = ss_malloc(sizeof(remote_t));
memset(remote, 0, sizeof(remote_t));
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->buf = ss_malloc(sizeof(buffer_t));
balloc(remote->buf, BUF_SIZE);
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
remote->fd = fd;
remote->recv_ctx->remote = remote;
remote->recv_ctx->connected = 0;
@ -552,8 +553,6 @@ new_remote(int fd, int timeout)
ev_timer_init(&remote->recv_ctx->watcher, remote_timeout_cb,
timeout, 0);
balloc(remote->buf, BUF_SIZE);
return remote;
}
@ -590,12 +589,15 @@ close_and_free_remote(EV_P_ remote_t *remote)
static server_t *
new_server(int fd, int method)
{
server_t *server;
server = ss_malloc(sizeof(server_t));
server_t *server = ss_malloc(sizeof(server_t));
memset(server, 0, sizeof(server_t));
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
server->buf = ss_malloc(sizeof(buffer_t));
balloc(server->buf, BUF_SIZE);
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
memset(server->send_ctx, 0, sizeof(server_ctx_t));
server->fd = fd;
server->recv_ctx->server = server;
server->recv_ctx->connected = 0;
@ -618,8 +620,6 @@ new_server(int fd, int method)
ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);
ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);
balloc(server->buf, BUF_SIZE);
return server;
}
@ -981,6 +981,7 @@ main(int argc, char **argv)
listen_ctx_t listen_ctx;
listen_ctx.remote_num = remote_num;
listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);
memset(listen_ctx.remote_addr, 0, sizeof(struct sockaddr *) * remote_num);
for (int i = 0; i < remote_num; i++) {
char *host = remote_addr[i].host;
char *port = remote_addr[i].port == NULL ? remote_port :

8
src/resolv.c

@ -266,8 +266,8 @@ dns_query_v4_cb(struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data)
cb_data->responses = new_responses;
for (int i = 0; i < result->dnsa4_nrr; i++) {
struct sockaddr_in *sa =
(struct sockaddr_in *)ss_malloc(sizeof(struct sockaddr_in));
struct sockaddr_in *sa = ss_malloc(sizeof(struct sockaddr_in));
memset(sa, 0, sizeof(struct sockaddr_in));
sa->sin_family = AF_INET;
sa->sin_port = cb_data->port;
sa->sin_addr = result->dnsa4_addr[i];
@ -313,8 +313,8 @@ dns_query_v6_cb(struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data)
cb_data->responses = new_responses;
for (int i = 0; i < result->dnsa6_nrr; i++) {
struct sockaddr_in6 *sa =
(struct sockaddr_in6 *)ss_malloc(sizeof(struct sockaddr_in6));
struct sockaddr_in6 *sa = ss_malloc(sizeof(struct sockaddr_in6));
memset(sa, 0, sizeof(struct sockaddr_in6));
sa->sin6_family = AF_INET6;
sa->sin6_port = cb_data->port;
sa->sin6_addr = result->dnsa6_addr[i];

21
src/server.c

@ -969,7 +969,8 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
ev_io_start(EV_A_ & remote->send_ctx->io);
}
} else {
query_t *query = (query_t *)ss_malloc(sizeof(query_t));
query_t *query = ss_malloc(sizeof(query_t));
memset(query, 0, sizeof(query_t));
query->server = server;
snprintf(query->hostname, 256, "%s", host);
@ -1311,12 +1312,15 @@ new_remote(int fd)
remote_conn++;
}
remote_t *remote;
remote_t *remote = ss_malloc(sizeof(remote_t));
memset(remote, 0, sizeof(remote_t));
remote = ss_malloc(sizeof(remote_t));
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->buf = ss_malloc(sizeof(buffer_t));
balloc(remote->buf, BUF_SIZE);
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
remote->fd = fd;
remote->recv_ctx->remote = remote;
remote->recv_ctx->connected = 0;
@ -1327,8 +1331,6 @@ new_remote(int fd)
ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);
ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);
balloc(remote->buf, BUF_SIZE);
return remote;
}
@ -1378,6 +1380,10 @@ new_server(int fd, listen_ctx_t *listener)
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
server->buf = ss_malloc(sizeof(buffer_t));
server->header_buf = ss_malloc(sizeof(buffer_t));
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
memset(server->send_ctx, 0, sizeof(server_ctx_t));
balloc(server->buf, BUF_SIZE);
balloc(server->header_buf, BUF_SIZE);
server->fd = fd;
server->recv_ctx->server = server;
server->recv_ctx->connected = 0;
@ -1406,10 +1412,7 @@ new_server(int fd, listen_ctx_t *listener)
ev_timer_init(&server->recv_ctx->watcher, server_timeout_cb,
request_timeout, listener->timeout);
balloc(server->buf, BUF_SIZE);
balloc(server->header_buf, BUF_SIZE);
server->chunk = (chunk_t *)malloc(sizeof(chunk_t));
server->chunk = ss_malloc(sizeof(chunk_t));
memset(server->chunk, 0, sizeof(chunk_t));
server->chunk->buf = ss_malloc(sizeof(buffer_t));
memset(server->chunk->buf, 0, sizeof(buffer_t));

18
src/tunnel.c

@ -502,14 +502,16 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
static remote_t *
new_remote(int fd, int timeout)
{
remote_t *remote;
remote = ss_malloc(sizeof(remote_t));
remote_t *remote = ss_malloc(sizeof(remote_t));
memset(remote, 0, sizeof(remote_t));
remote->buf = ss_malloc(sizeof(buffer_t));
remote->recv_ctx = ss_malloc(sizeof(remote_ctx_t));
remote->send_ctx = ss_malloc(sizeof(remote_ctx_t));
balloc(remote->buf, BUF_SIZE);
memset(remote->recv_ctx, 0, sizeof(remote_ctx_t));
memset(remote->send_ctx, 0, sizeof(remote_ctx_t));
remote->fd = fd;
remote->recv_ctx->remote = remote;
remote->recv_ctx->connected = 0;
@ -521,8 +523,6 @@ new_remote(int fd, int timeout)
ev_timer_init(&remote->send_ctx->watcher, remote_timeout_cb,
min(MAX_CONNECT_TIMEOUT, timeout), 0);
balloc(remote->buf, BUF_SIZE);
return remote;
}
@ -558,12 +558,15 @@ close_and_free_remote(EV_P_ remote_t *remote)
static server_t *
new_server(int fd, int method)
{
server_t *server;
server_t *server = ss_malloc(sizeof(server_t));
memset(server, 0, sizeof(server_t));
server = ss_malloc(sizeof(server_t));
server->buf = ss_malloc(sizeof(buffer_t));
server->recv_ctx = ss_malloc(sizeof(server_ctx_t));
server->send_ctx = ss_malloc(sizeof(server_ctx_t));
balloc(server->buf, BUF_SIZE);
memset(server->recv_ctx, 0, sizeof(server_ctx_t));
memset(server->send_ctx, 0, sizeof(server_ctx_t));
server->fd = fd;
server->recv_ctx->server = server;
server->recv_ctx->connected = 0;
@ -580,8 +583,6 @@ new_server(int fd, int method)
server->d_ctx = NULL;
}
balloc(server->buf, BUF_SIZE);
ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);
ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);
@ -984,6 +985,7 @@ main(int argc, char **argv)
listen_ctx.tunnel_addr = tunnel_addr;
listen_ctx.remote_num = remote_num;
listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);
memset(listen_ctx.remote_addr, 0, sizeof(struct sockaddr *) * remote_num);
for (i = 0; i < remote_num; i++) {
char *host = remote_addr[i].host;
char *port = remote_addr[i].port == NULL ? remote_port :

Loading…
Cancel
Save