summaryrefslogtreecommitdiff
path: root/accel-pppd
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2012-07-13 12:33:04 +0400
committerKozlov Dmitry <xeb@mail.ru>2012-07-13 12:33:04 +0400
commit0575ad5069b4bf44ec62e4db172d2590ec7fb956 (patch)
treede98479fc6426ad26a9c814259ba59f2a7d413ee /accel-pppd
parent0df0604e7606b38f1f3fc4a2c92dbad720654f3c (diff)
parent0b99fef73bce3f1abed63e581594de9d1f132312 (diff)
downloadaccel-ppp-xebd-0575ad5069b4bf44ec62e4db172d2590ec7fb956.tar.gz
accel-ppp-xebd-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.c6
-rw-r--r--accel-pppd/iprange.c16
2 files changed, 13 insertions, 9 deletions
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c
index 0ad8649..e85876e 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 315a572..c3bf2fe 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)