switch: fix some memory leaks in switch_parse_vlan()
SVN-Revision: 29936
This commit is contained in:
		| @@ -341,6 +341,7 @@ static int handle_vlan_port_write(void *driver, char *buf, int nr) | ||||
| 	} | ||||
| 	adm_wreg(0x13 + nr, (__u16) ports); | ||||
|  | ||||
| 	kfree(c); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -341,10 +341,9 @@ switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf) | ||||
| 	switch_vlan_config *c; | ||||
| 	int j, u, p, s; | ||||
|  | ||||
| 	c = kmalloc(sizeof(switch_vlan_config), GFP_KERNEL); | ||||
| 	c = kzalloc(sizeof(switch_vlan_config), GFP_KERNEL); | ||||
| 	if (!c) | ||||
| 		return NULL; | ||||
| 	memset(c, 0, sizeof(switch_vlan_config)); | ||||
|  | ||||
| 	while (isspace(*buf)) buf++; | ||||
| 	j = 0; | ||||
| @@ -382,7 +381,10 @@ switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf) | ||||
|  | ||||
| 		while (isspace(*buf)) buf++; | ||||
| 	} | ||||
| 	if (*buf != 0) return NULL; | ||||
| 	if (*buf != 0) { | ||||
| 		kfree(c); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| 	c->port &= (1 << driver->ports) - 1; | ||||
| 	c->untag &= (1 << driver->ports) - 1; | ||||
|   | ||||
| @@ -459,6 +459,7 @@ static int handle_vlan_port_write(void *driver, char *buf, int nr) | ||||
| 		robo_write32(ROBO_ARLIO_PAGE, 0x63 + regoff, (c->untag << 9) | c->port); | ||||
| 		robo_write16(ROBO_ARLIO_PAGE, 0x61 + regoff, nr); | ||||
| 		robo_write16(ROBO_ARLIO_PAGE, 0x60 + regoff, 1 << 7); | ||||
| 		kfree(c); | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| @@ -473,6 +474,7 @@ static int handle_vlan_port_write(void *driver, char *buf, int nr) | ||||
| 		robo_write16(ROBO_VLAN_PAGE, ROBO_VLAN_TABLE_ACCESS, val16); | ||||
| 	} | ||||
|  | ||||
| 	kfree(c); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @@ -520,13 +522,9 @@ static int handle_enable_vlan_write(void *driver, char *buf, int nr) | ||||
| static int handle_reset(void *driver, char *buf, int nr) | ||||
| { | ||||
| 	switch_driver *d = (switch_driver *) driver; | ||||
| 	switch_vlan_config *c = switch_parse_vlan(d, buf); | ||||
| 	int j; | ||||
| 	__u16 val16; | ||||
|  | ||||
| 	if (c == NULL) | ||||
| 		return -EINVAL; | ||||
|  | ||||
| 	/* disable switching */ | ||||
| 	set_switch(0); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens