Module Name: src Committed By: christos Date: Sun Apr 3 22:14:15 UTC 2011
Modified Files: src/lib/libc/net: getservbyname_r.c getservbyport_r.c Log Message: Protect against stack smashes (Maksymilian Arciemowicz) To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/lib/libc/net/getservbyname_r.c \ src/lib/libc/net/getservbyport_r.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/net/getservbyname_r.c diff -u src/lib/libc/net/getservbyname_r.c:1.7 src/lib/libc/net/getservbyname_r.c:1.8 --- src/lib/libc/net/getservbyname_r.c:1.7 Sat Apr 24 20:54:46 2010 +++ src/lib/libc/net/getservbyname_r.c Sun Apr 3 18:14:15 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: getservbyname_r.c,v 1.7 2010/04/25 00:54:46 joerg Exp $ */ +/* $NetBSD: getservbyname_r.c,v 1.8 2011/04/03 22:14:15 christos Exp $ */ /* * Copyright (c) 1983, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)getservbyname.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: getservbyname_r.c,v 1.7 2010/04/25 00:54:46 joerg Exp $"); +__RCSID("$NetBSD: getservbyname_r.c,v 1.8 2011/04/03 22:14:15 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -69,12 +69,14 @@ namelen = strlen(name); if (namelen == 0 || namelen > 255) return NULL; - if (proto != NULL && *proto == '\0') - return NULL; - if (proto != NULL) + if (proto != NULL) { protolen = strlen(proto); - else + if (protolen == 0 || protolen > 255) + return NULL; + } else protolen = 0; + if (namelen + protolen > 255) + return NULL; buf[0] = namelen; buf[1] = protolen; Index: src/lib/libc/net/getservbyport_r.c diff -u src/lib/libc/net/getservbyport_r.c:1.7 src/lib/libc/net/getservbyport_r.c:1.8 --- src/lib/libc/net/getservbyport_r.c:1.7 Sat Apr 24 20:54:46 2010 +++ src/lib/libc/net/getservbyport_r.c Sun Apr 3 18:14:15 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: getservbyport_r.c,v 1.7 2010/04/25 00:54:46 joerg Exp $ */ +/* $NetBSD: getservbyport_r.c,v 1.8 2011/04/03 22:14:15 christos Exp $ */ /* * Copyright (c) 1983, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)getservbyport.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: getservbyport_r.c,v 1.7 2010/04/25 00:54:46 joerg Exp $"); +__RCSID("$NetBSD: getservbyport_r.c,v 1.8 2011/04/03 22:14:15 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -67,11 +67,11 @@ port = be16toh(port); - if (proto != NULL && *proto == '\0') - return NULL; - if (proto != NULL) + if (proto != NULL) { protolen = strlen(proto); - else + if (protolen == 0 || protolen > 255) + return NULL; + } else protolen = 0; if (port < 0 || port > 65536) return NULL;