vlserver: Use correct base value when replacing
authorSimon Wilkinson <sxw@your-file-system.com>
Thu, 19 May 2011 17:19:29 +0000 (18:19 +0100)
committerDerrick Brashear <shadow@dementia.org>
Sun, 5 Jun 2011 13:55:18 +0000 (06:55 -0700)
When we're removing existing address entries the code calculates
a base and index value for each entry that we're removing an address
from. However, it then _uses_ a previously calculated base value,
with the new index. This works fine if the old base and the new base
match, but if they don't, chaos will ensue.

Fix to always use matched base and index pairs.

Change-Id: Ia592abdc1c58b5cf5776bb24e67aee708275a9b0
Reviewed-on: http://gerrit.openafs.org/4771
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/vlserver/vlprocs.c

index 1c86a65..98a6aed 100644 (file)
@@ -2379,7 +2379,7 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
 
        base = (ctx.hostaddress[WillChange[i]] >> 16) & 0xff;
        index = ctx.hostaddress[WillChange[i]] & 0x0000ffff;
-       tex = &ctx.ex_addr[fbase][index];
+       tex = &ctx.ex_addr[base][index];
 
        if (++m == 1)
            VLog(0,