Signed-off-by: Fedor Lyakhov <fedor.lyak...@gmail.com> --- slirp/bootp.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/slirp/bootp.c b/slirp/bootp.c index b7db9fa..df8d527 100644 --- a/slirp/bootp.c +++ b/slirp/bootp.c @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -#include <slirp.h> +#include "slirp.h" /* XXX: only DHCP is supported */ @@ -289,7 +289,7 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp) } if (slirp->vdnssearch) { - size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend); + size_t spaceleft = DHCP_OPT_LEN - (q - rbp->bp_vend); val = slirp->vdnssearch_len; if (val + 1 > spaceleft) { g_warning("DHCP packet size exceeded, " @@ -299,6 +299,18 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp) q += val; } } + + if (slirp->dhcp_vendopt) { + size_t spaceleft = DHCP_OPT_LEN - (q - rbp->bp_vend); + val = slirp->dhcp_vendopt_len; + if (val + 1 > spaceleft) { + g_warning("DHCP packet size exceeded, " + "omitting vendor-specific option."); + } else { + memcpy(q, slirp->dhcp_vendopt, val); + q += val; + } + } } else { static const char nak_msg[] = "requested address not available"; -- 1.8.4.5