mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
slirp: Fix port comparision in slirp_remove_hostfwd
For UDP host forwardings, fport is not stable, every outgoing packet of the redirection can modify it. Use getsockname instead to look up the port that is actually used on the host side. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
c92ef6a22d
commit
2ad82cf9e2
1 changed files with 6 additions and 2 deletions
|
@ -761,12 +761,16 @@ int slirp_remove_hostfwd(int is_udp, int host_port)
|
|||
{
|
||||
struct socket *so;
|
||||
struct socket *head = (is_udp ? &udb : &tcb);
|
||||
int fport = htons(host_port);
|
||||
struct sockaddr_in addr;
|
||||
int port = htons(host_port);
|
||||
socklen_t addr_len;
|
||||
int n = 0;
|
||||
|
||||
loop_again:
|
||||
for (so = head->so_next; so != head; so = so->so_next) {
|
||||
if (so->so_fport == fport) {
|
||||
addr_len = sizeof(addr);
|
||||
if (getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 &&
|
||||
addr.sin_port == port) {
|
||||
close(so->s);
|
||||
sofree(so);
|
||||
n++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue