diff options
author | Thomas Huth <thuth@linux.vnet.ibm.com> | 2011-09-27 11:20:38 +0200 |
---|---|---|
committer | Jan Kiszka <jan.kiszka@siemens.com> | 2011-09-28 13:11:30 +0200 |
commit | 9cb0e8129b9e416edad6da4057edf2d4256314e5 (patch) | |
tree | a51f682b0e57ebb050d6ae54d0498a0d2ee0ab6f /mbuf.h | |
parent | 605425be8e09655fcde274a17f7387e9c9fb2291 (diff) | |
download | slirp-9cb0e8129b9e416edad6da4057edf2d4256314e5.zip slirp-9cb0e8129b9e416edad6da4057edf2d4256314e5.tar.gz slirp-9cb0e8129b9e416edad6da4057edf2d4256314e5.tar.bz2 |
slirp: Fix packet expiration
The two new variables "arp_requested" and "expiration_date" in the mbuf
structure have been added after the variable-sized "m_dat_" array. The
variables have to be added before the m_dat_ array instead.
Without this patch, the expiration_date gets clobbered by code that
accesses the m_dat_ array.
I experienced this problem with the code in slirp/tftp.c: The
tftp_send_data() function created a new packet with the m_get()
function (which fills-in a default expiration_date value). Then the
TFTP code cleared the data section of the packet, which accidentially
also cleared the expiration_date. This zeroed expiration_date then
finally causes the packet to be discarded during if_start(), so that
TFTP packets were not transmitted anymore.
[Jan: added comment as suggested by Fabien ]
CC: Fabien Chouteau <chouteau@adacore.com>
Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Diffstat (limited to 'mbuf.h')
-rw-r--r-- | mbuf.h | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -81,12 +81,13 @@ struct m_hdr { struct mbuf { struct m_hdr m_hdr; Slirp *slirp; + bool arp_requested; + uint64_t expiration_date; + /* start of dynamic buffer area, must be last element */ union M_dat { char m_dat_[1]; /* ANSI don't like 0 sized arrays */ char *m_ext_; } M_dat; - bool arp_requested; - uint64_t expiration_date; }; #define m_next m_hdr.mh_next |