chiark
/
gitweb
/
~ianmdlvl
/
secnet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
netlink: Safely discard short packets
[secnet.git]
/
slip.c
diff --git
a/slip.c
b/slip.c
index d8f1a17113f4cd20b8711617f684c07a1f1f159a..9e63cb3cd6f3714c37524ca10f1e66f70c6cf9a1 100644
(file)
--- a/
slip.c
+++ b/
slip.c
@@
-79,6
+79,9
@@
static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l)
int outputchr;
enum { OUTPUT_END = 256, OUTPUT_NOTHING = 257 };
int outputchr;
enum { OUTPUT_END = 256, OUTPUT_NOTHING = 257 };
+ if (!st->buff->size)
+ buffer_init(st->buff,calculate_max_start_pad());
+
if (st->pending_esc) {
st->pending_esc=False;
switch(buf[i]) {
if (st->pending_esc) {
st->pending_esc=False;
switch(buf[i]) {
@@
-115,7
+118,7
@@
static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l)
if (st->ignoring_packet) {
if (outputchr == OUTPUT_END) {
st->ignoring_packet=False;
if (st->ignoring_packet) {
if (outputchr == OUTPUT_END) {
st->ignoring_packet=False;
-
buffer_init(st->buff,st->nl.max_start_pad)
;
+
st->buff->size=0
;
}
} else {
if (outputchr == OUTPUT_END) {
}
} else {
if (outputchr == OUTPUT_END) {
@@
-123,7
+126,7
@@
static void slip_unstuff(struct slip *st, uint8_t *buf, uint32_t l)
st->netlink_to_tunnel(&st->nl,st->buff);
BUF_ALLOC(st->buff,"userv_afterpoll");
}
st->netlink_to_tunnel(&st->nl,st->buff);
BUF_ALLOC(st->buff,"userv_afterpoll");
}
-
buffer_init(st->buff,st->nl.max_start_pad)
;
+
st->buff->size=0
;
} else if (outputchr != OUTPUT_NOTHING) {
if (st->buff->size < st->buff->len) {
buf_append_uint8(st->buff,outputchr);
} else if (outputchr != OUTPUT_NOTHING) {
if (st->buff->size < st->buff->len) {
buf_append_uint8(st->buff,outputchr);
@@
-230,7
+233,8
@@
static void userv_userv_callback(void *sst, pid_t pid, int status)
fatal("%s: userv exited unexpectedly: uncaught signal %d",
st->slip.nl.name,WTERMSIG(status));
} else {
fatal("%s: userv exited unexpectedly: uncaught signal %d",
st->slip.nl.name,WTERMSIG(status));
} else {
- fatal("%s: userv stopped unexpectedly");
+ fatal("%s: userv stopped unexpectedly",
+ st->slip.nl.name);
}
}
Message(M_WARNING,"%s: userv subprocess died with status %d\n",
}
}
Message(M_WARNING,"%s: userv subprocess died with status %d\n",