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 <ebl...@redhat.com> > > Reviewed-by: Vladimir Sementsov-Ogievskiy <vsement...@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