diff options
author | Kozlov Dmitry <xeb@mail.ru> | 2012-07-13 12:33:04 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2012-07-13 12:33:04 +0400 |
commit | 0575ad5069b4bf44ec62e4db172d2590ec7fb956 (patch) | |
tree | de98479fc6426ad26a9c814259ba59f2a7d413ee /accel-pppd | |
parent | 0df0604e7606b38f1f3fc4a2c92dbad720654f3c (diff) | |
parent | 0b99fef73bce3f1abed63e581594de9d1f132312 (diff) | |
download | accel-ppp-0575ad5069b4bf44ec62e4db172d2590ec7fb956.tar.gz accel-ppp-0575ad5069b4bf44ec62e4db172d2590ec7fb956.zip |
Merge commit '0b99fef73bce3f1abed63e581594de9d1f132312'
* commit '0b99fef73bce3f1abed63e581594de9d1f132312':
L2TP: Fix socket() error handling in l2tp_connect()
iprange: accept network with null mask (which actually disables iprange module)
Diffstat (limited to 'accel-pppd')
-rw-r--r-- | accel-pppd/ctrl/l2tp/l2tp.c | 6 | ||||
-rw-r--r-- | accel-pppd/iprange.c | 16 |
2 files changed, 13 insertions, 9 deletions
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c index 0ad8649c..e85876e9 100644 --- a/accel-pppd/ctrl/l2tp/l2tp.c +++ b/accel-pppd/ctrl/l2tp/l2tp.c @@ -386,7 +386,7 @@ static int l2tp_connect(struct l2tp_conn_t *conn) pppox_addr.pppol2tp.d_tunnel = conn->peer_tid; conn->tunnel_fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP); - if (!conn->ppp.fd) { + if (conn->tunnel_fd < 0) { log_ppp_error("l2tp: socket(AF_PPPOX): %s\n", strerror(errno)); return -1; } @@ -394,13 +394,13 @@ static int l2tp_connect(struct l2tp_conn_t *conn) fcntl(conn->tunnel_fd, F_SETFD, fcntl(conn->tunnel_fd, F_GETFD) | FD_CLOEXEC); conn->ppp.fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP); - if (!conn->ppp.fd) { + if (conn->ppp.fd < 0) { close(conn->tunnel_fd); conn->tunnel_fd = -1; log_ppp_error("l2tp: socket(AF_PPPOX): %s\n", strerror(errno)); return -1; } - + fcntl(conn->ppp.fd, F_SETFD, fcntl(conn->ppp.fd, F_GETFD) | FD_CLOEXEC); if (connect(conn->tunnel_fd, (struct sockaddr *)&pppox_addr, sizeof(pppox_addr)) < 0) { diff --git a/accel-pppd/iprange.c b/accel-pppd/iprange.c index 315a572f..c3bf2fec 100644 --- a/accel-pppd/iprange.c +++ b/accel-pppd/iprange.c @@ -42,7 +42,7 @@ static struct iprange_t *parse1(const char *str) return NULL; if (f4 > 255) return NULL; - if (m == 0 || m > 32) + if (m > 32) return NULL; r = _malloc(sizeof(*r)); @@ -94,11 +94,8 @@ static void load_ranges(struct list_head *list, const char *conf_sect) } list_for_each_entry(opt, &s->items, entry) { - if (!strcmp(opt->name, "disable")) { - conf_disable = 1; - log_emerg("iprange: iprange module disabled so improper ip address assigning may cause kernel soft lockup!\n"); - continue; - } + if (!strcmp(opt->name, "disable")) + goto disable; r = parse1(opt->name); if (!r) r = parse2(opt->name); @@ -106,8 +103,15 @@ static void load_ranges(struct list_head *list, const char *conf_sect) log_emerg("iprange: cann't parse '%s' in '%s'\n", opt->name, conf_sect); _exit(EXIT_FAILURE); } + if (r->begin == r->end) + goto disable; list_add_tail(&r->entry, list); } + + return; +disable: + conf_disable = 1; + log_emerg("iprange: iprange module disabled so improper ip address assigning may cause kernel soft lockup!\n"); } static int check_range(struct list_head *list, in_addr_t ipaddr) |