Revision 12b513d8 slirp/ip_input.c
b/slirp/ip_input.c | ||
---|---|---|
118 | 118 |
goto bad; |
119 | 119 |
} |
120 | 120 |
|
121 |
if (slirp->restricted) { |
|
122 |
if ((ip->ip_dst.s_addr & slirp->vnetwork_mask.s_addr) == |
|
123 |
slirp->vnetwork_addr.s_addr) { |
|
124 |
if (ip->ip_dst.s_addr == 0xffffffff && ip->ip_p != IPPROTO_UDP) |
|
125 |
goto bad; |
|
126 |
} else { |
|
127 |
uint32_t inv_mask = ~slirp->vnetwork_mask.s_addr; |
|
128 |
struct ex_list *ex_ptr; |
|
129 |
|
|
130 |
if ((ip->ip_dst.s_addr & inv_mask) == inv_mask) { |
|
131 |
goto bad; |
|
132 |
} |
|
133 |
for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) |
|
134 |
if (ex_ptr->ex_addr.s_addr == ip->ip_dst.s_addr) |
|
135 |
break; |
|
136 |
|
|
137 |
if (!ex_ptr) |
|
138 |
goto bad; |
|
139 |
} |
|
140 |
} |
|
141 |
|
|
142 | 121 |
/* Should drop packet if mbuf too long? hmmm... */ |
143 | 122 |
if (m->m_len > ip->ip_len) |
144 | 123 |
m_adj(m, ip->ip_len - m->m_len); |
Also available in: Unified diff