net/slirp: fix memory leak
commit b412eb61 introduce 'cmd:' target for guestfwd, and fwd don't be used in this scenario, and will leak memory in true branch with 'cmd:'. Let's allocate memory for fwd variable just in else statement. Cc: Alexander Graf <agraf@suse.de> Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									9c7074da5e
								
							
						
					
					
						commit
						7a8919dc29
					
				@ -643,17 +643,16 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str,
 | 
				
			|||||||
        goto fail_syntax;
 | 
					        goto fail_syntax;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fwd = g_malloc(sizeof(struct GuestFwd));
 | 
					 | 
				
			||||||
    snprintf(buf, sizeof(buf), "guestfwd.tcp.%d", port);
 | 
					    snprintf(buf, sizeof(buf), "guestfwd.tcp.%d", port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((strlen(p) > 4) && !strncmp(p, "cmd:", 4)) {
 | 
					    if ((strlen(p) > 4) && !strncmp(p, "cmd:", 4)) {
 | 
				
			||||||
        if (slirp_add_exec(s->slirp, 0, &p[4], &server, port) < 0) {
 | 
					        if (slirp_add_exec(s->slirp, 0, &p[4], &server, port) < 0) {
 | 
				
			||||||
            error_report("conflicting/invalid host:port in guest forwarding "
 | 
					            error_report("conflicting/invalid host:port in guest forwarding "
 | 
				
			||||||
                         "rule '%s'", config_str);
 | 
					                         "rule '%s'", config_str);
 | 
				
			||||||
            g_free(fwd);
 | 
					 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					        fwd = g_malloc(sizeof(struct GuestFwd));
 | 
				
			||||||
        fwd->hd = qemu_chr_new(buf, p, NULL);
 | 
					        fwd->hd = qemu_chr_new(buf, p, NULL);
 | 
				
			||||||
        if (!fwd->hd) {
 | 
					        if (!fwd->hd) {
 | 
				
			||||||
            error_report("could not open guest forwarding device '%s'", buf);
 | 
					            error_report("could not open guest forwarding device '%s'", buf);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user