From: juhosg Date: Fri, 14 Jan 2011 18:19:21 +0000 (+0000) Subject: backfire: package/swconfig: add sanity checks to prevent a segfault (backport of... X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=commitdiff_plain;h=a2940c09a933e9d8e9c4dc068407fb2cd42f6e1c backfire: package/swconfig: add sanity checks to prevent a segfault (backport of r24932) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@24992 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- diff --git a/package/swconfig/Makefile b/package/swconfig/Makefile index b0a72ceeb..d7da694b9 100644 --- a/package/swconfig/Makefile +++ b/package/swconfig/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=swconfig -PKG_RELEASE:=6 +PKG_RELEASE:=7 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/kernel.mk diff --git a/package/swconfig/src/swlib.c b/package/swconfig/src/swlib.c index 59456a33d..c2316d068 100644 --- a/package/swconfig/src/swlib.c +++ b/package/swconfig/src/swlib.c @@ -368,11 +368,26 @@ int swlib_set_attr_string(struct switch_dev *dev, struct switch_attr *a, int por ptr = (char *)str; while(ptr && *ptr) { + while(*ptr && isspace(*ptr)) + ptr++; + + if (!*ptr) + break; + + if (!isdigit(*ptr)) + return -1; + + if (val.len >= dev->ports) + return -1; + ports[val.len].flags = 0; ports[val.len].id = strtoul(ptr, &ptr, 10); while(*ptr && !isspace(*ptr)) { if (*ptr == 't') ports[val.len].flags |= SWLIB_PORT_FLAG_TAGGED; + else + return -1; + ptr++; } if (*ptr)