From fb9b1d0f6a9f355bceae435ea43f1c8f3635b2df Mon Sep 17 00:00:00 2001 From: "osdl.net!shemminger" Date: Mon, 7 Feb 2005 18:15:04 +0000 Subject: [PATCH] fix potential memory corruption (Logical change 1.136) --- ChangeLog | 5 +++++ include/utils.h | 4 ++-- lib/utils.c | 5 +++-- tc/q_netem.c | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index b8bb1cf3..68efd800 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-02-07 Jean-Marc Ranger + + * need to call getline() with null for first usage + * don't overwrite const arg + 2005-02-07 Stephen Hemminger * Add experimental distribution diff --git a/include/utils.h b/include/utils.h index ed1257e5..8466803f 100644 --- a/include/utils.h +++ b/include/utils.h @@ -66,9 +66,9 @@ struct ipx_addr { extern __u32 get_addr32(const char *name); extern int get_addr_1(inet_prefix *dst, const char *arg, int family); -extern int get_prefix_1(inet_prefix *dst, const char *arg, int family); +extern int get_prefix_1(inet_prefix *dst, char *arg, int family); extern int get_addr(inet_prefix *dst, const char *arg, int family); -extern int get_prefix(inet_prefix *dst, const char *arg, int family); +extern int get_prefix(inet_prefix *dst, char *arg, int family); extern int get_integer(int *val, const char *arg, int base); extern int get_unsigned(unsigned *val, const char *arg, int base); diff --git a/lib/utils.c b/lib/utils.c index 739383a6..cd9567bf 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -200,7 +200,7 @@ int get_addr_1(inet_prefix *addr, const char *name, int family) return 0; } -int get_prefix_1(inet_prefix *dst, const char *arg, int family) +int get_prefix_1(inet_prefix *dst, char *arg, int family) { int err; unsigned plen; @@ -222,6 +222,7 @@ int get_prefix_1(inet_prefix *dst, const char *arg, int family) slash = strchr(arg, '/'); if (slash) *slash = 0; + err = get_addr_1(dst, arg, family); if (err == 0) { switch(dst->family) { @@ -262,7 +263,7 @@ int get_addr(inet_prefix *dst, const char *arg, int family) return 0; } -int get_prefix(inet_prefix *dst, const char *arg, int family) +int get_prefix(inet_prefix *dst, char *arg, int family) { if (family == AF_PACKET) { fprintf(stderr, "Error: \"%s\" may be inet prefix, but it is not allowed in this context.\n", arg); diff --git a/tc/q_netem.c b/tc/q_netem.c index 5a591ed4..60369dc6 100644 --- a/tc/q_netem.c +++ b/tc/q_netem.c @@ -56,7 +56,7 @@ static int get_distribution(const char *type, __s16 *data) int n; long x; size_t len; - char *line; + char *line = NULL; char name[128]; snprintf(name, sizeof(name), "/usr/lib/tc/%s.dist", type);