Il 25/05/2014 11:50, Hani Benhabiles ha scritto:
@@ -236,9 +236,10 @@ static int nbd_receive_options(NBDClient *client)
LOG("read failed");
goto fail;
}
- TRACE("Checking reserved");
- if (tmp != 0) {
- LOG("Bad reserved received");
+ TRACE("Checking client flags");
+ tmp = be32_to_cpu(tmp);
+ if (tmp != 0 && tmp != NBD_FLAG_C_FIXED_NEWSTYLE) {
+ LOG("Bad client flags received");
goto fail;
}
@@ -246,7 +247,7 @@ static int nbd_receive_options(NBDClient *client)
LOG("read failed");
goto fail;
}
- TRACE("Checking reserved");
+ TRACE("Checking opts magic");
if (magic != be64_to_cpu(NBD_OPTS_MAGIC)) {
LOG("Bad magic received");
goto fail;
Here, if the client used "fixed new-style negotiation" you should reply
with NBD_REP_ERR_UNSUP. You also need to turn this into a while loop.
With these changes here, the logic in patch 2 should be okay.
Thanks,
Paolo