mirror of
https://git.proxmox.com/git/qemu
synced 2025-07-21 06:24:45 +00:00
Merge remote-tracking branch 'kiszka/queues/slirp' into staging
# By Bas van Sisseren (1) and Gertjan Halkes (1) # Via Jan Kiszka * kiszka/queues/slirp: make user networking hostfwd work with restrict=y fix -net user checks by reordering checks Message-id: cover.1371638848.git.jan.kiszka@siemens.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
commit
b1588c3fd6
16
net/slirp.c
16
net/slirp.c
@ -212,14 +212,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vdhcp_start && !inet_aton(vdhcp_start, &dhcp)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if ((dhcp.s_addr & mask.s_addr) != net.s_addr ||
|
|
||||||
dhcp.s_addr == host.s_addr || dhcp.s_addr == dns.s_addr) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vnameserver && !inet_aton(vnameserver, &dns)) {
|
if (vnameserver && !inet_aton(vnameserver, &dns)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -228,6 +220,14 @@ static int net_slirp_init(NetClientState *peer, const char *model,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vdhcp_start && !inet_aton(vdhcp_start, &dhcp)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((dhcp.s_addr & mask.s_addr) != net.s_addr ||
|
||||||
|
dhcp.s_addr == host.s_addr || dhcp.s_addr == dns.s_addr) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (vsmbserver && !inet_aton(vsmbserver, &smbsrv)) {
|
if (vsmbserver && !inet_aton(vsmbserver, &smbsrv)) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -316,16 +316,6 @@ tcp_input(struct mbuf *m, int iphlen, struct socket *inso)
|
|||||||
m->m_data += sizeof(struct tcpiphdr)+off-sizeof(struct tcphdr);
|
m->m_data += sizeof(struct tcpiphdr)+off-sizeof(struct tcphdr);
|
||||||
m->m_len -= sizeof(struct tcpiphdr)+off-sizeof(struct tcphdr);
|
m->m_len -= sizeof(struct tcpiphdr)+off-sizeof(struct tcphdr);
|
||||||
|
|
||||||
if (slirp->restricted) {
|
|
||||||
for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
|
|
||||||
if (ex_ptr->ex_fport == ti->ti_dport &&
|
|
||||||
ti->ti_dst.s_addr == ex_ptr->ex_addr.s_addr) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!ex_ptr)
|
|
||||||
goto drop;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Locate pcb for segment.
|
* Locate pcb for segment.
|
||||||
*/
|
*/
|
||||||
@ -355,6 +345,22 @@ findso:
|
|||||||
* as if it was LISTENING, and continue...
|
* as if it was LISTENING, and continue...
|
||||||
*/
|
*/
|
||||||
if (so == NULL) {
|
if (so == NULL) {
|
||||||
|
if (slirp->restricted) {
|
||||||
|
/* Any hostfwds will have an existing socket, so we only get here
|
||||||
|
* for non-hostfwd connections. These should be dropped, unless it
|
||||||
|
* happens to be a guestfwd.
|
||||||
|
*/
|
||||||
|
for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
|
||||||
|
if (ex_ptr->ex_fport == ti->ti_dport &&
|
||||||
|
ti->ti_dst.s_addr == ex_ptr->ex_addr.s_addr) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ex_ptr) {
|
||||||
|
goto dropwithreset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) != TH_SYN)
|
if ((tiflags & (TH_SYN|TH_FIN|TH_RST|TH_URG|TH_ACK)) != TH_SYN)
|
||||||
goto dropwithreset;
|
goto dropwithreset;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user