On Mon, Jun 12, 2023 at 05:27:19PM +0300, Vladimir Sementsov-Ogievskiy wrote:
On 08.06.23 16:56, Eric Blake wrote:
> Our code relies on a sentinel cookie value of zero for deciding when a
> packet has been handled, as well as relying on array indices between 0
> and MAX_NBD_REQUESTS-1 for dereferencing purposes. As long as we can
> symmetrically convert between two forms, there is no reason to go with
> the odd choice of using XOR with a random pointer, when we can instead
> simplify the mappings with a mere offset of 1.
Should we go further and use (uint64)-1 as a sentinel cookie value, and just use index as
a cookie? Or, using zero cookie in a wire looks too asymmetric?
I thought about that too, but in the end I decided it would require
auditing more lines of code to make sure I was catching all places
where we currently expected a zero sentinel (where some of those uses
are not obvious, because of things like hiding behind g_new0). And
there is indeed the argument that if data corruption is going to
happen, it's harder to tell if an all-zero field on the wire was
intentional than a non-zero field.
>
> Signed-off-by: Eric Blake <eblake(a)redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov(a)yandex-team.ru>
Thanks; for now, I'll just leave this one as-is.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org