summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-01-17 00:30:35 +0000
committerJeremy Allison <jra@samba.org>2004-01-17 00:30:35 +0000
commitbb1119acca3f0735ca57871015d499d2358c9fb2 (patch)
tree1edff3d69a1fe6e78420a19776005f024a33fbfc
parentad5817c3bf9869d8a637be9876df730ac1735661 (diff)
downloadsamba-bb1119acca3f0735ca57871015d499d2358c9fb2.tar.gz
samba-bb1119acca3f0735ca57871015d499d2358c9fb2.tar.bz2
samba-bb1119acca3f0735ca57871015d499d2358c9fb2.zip
Fix for a signing bug when the mid wraps.
Found by Fran Fabrizio <fran@cis.uab.edu>. Add to the *start* of the list not the end of the list. This ensures that the *last* send sequence with this mid is returned by preference. This can happen if the mid wraps and one of the early mid numbers didn't get a reply and is still lurking on the list. Jeremy. (This used to be commit 25d739978fe9081ba0946c36901492127248e3e0)
-rw-r--r--source3/libsmb/smb_signing.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/source3/libsmb/smb_signing.c b/source3/libsmb/smb_signing.c
index 8a056f659f..9010dbf5cb 100644
--- a/source3/libsmb/smb_signing.c
+++ b/source3/libsmb/smb_signing.c
@@ -46,15 +46,23 @@ static void store_sequence_for_reply(struct outstanding_packet_lookup **list,
uint16 mid, uint32 reply_seq_num)
{
struct outstanding_packet_lookup *t;
- struct outstanding_packet_lookup *tmp;
-
+
t = smb_xmalloc(sizeof(*t));
ZERO_STRUCTP(t);
- DLIST_ADD_END(*list, t, tmp);
t->mid = mid;
t->reply_seq_num = reply_seq_num;
+ /*
+ * Add to the *start* of the list not the end of the list.
+ * This ensures that the *last* send sequence with this mid
+ * is returned by preference.
+ * This can happen if the mid wraps and one of the early
+ * mid numbers didn't get a reply and is still lurking on
+ * the list. JRA. Found by Fran Fabrizio <fran@cis.uab.edu>.
+ */
+
+ DLIST_ADD(*list, t);
DEBUG(10,("store_sequence_for_reply: stored seq = %u mid = %u\n",
(unsigned int)reply_seq_num, (unsigned int)mid ));
}