Skip to content
  • Eric Blake's avatar
    3add3ab7
    nbd/client: Reject inaccessible tail of inconsistent server · 3add3ab7
    Eric Blake authored
    
    
    The NBD spec suggests that a server should never advertise a size
    inconsistent with its minimum block alignment, as that tail is
    effectively inaccessible to a compliant client obeying those block
    constraints. Since we have a habit of rounding up rather than
    truncating, to avoid losing the last few bytes of user input, and we
    cannot access the tail when the server advertises bogus block sizing,
    abort the connection to alert the server to fix their bug.  And
    rejecting such servers matches what we already did for a min_block
    that was not a power of 2 or which was larger than max_block.
    
    Does not impact either qemu (which always sends properly aligned
    sizes) or nbdkit (which does not send minimum block requirements yet);
    so this is mostly aimed at new NBD server implementations, and ensures
    that the rest of our code can assume the size is aligned.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20190330155704.24191-1-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    3add3ab7
    nbd/client: Reject inaccessible tail of inconsistent server
    Eric Blake authored
    
    
    The NBD spec suggests that a server should never advertise a size
    inconsistent with its minimum block alignment, as that tail is
    effectively inaccessible to a compliant client obeying those block
    constraints. Since we have a habit of rounding up rather than
    truncating, to avoid losing the last few bytes of user input, and we
    cannot access the tail when the server advertises bogus block sizing,
    abort the connection to alert the server to fix their bug.  And
    rejecting such servers matches what we already did for a min_block
    that was not a power of 2 or which was larger than max_block.
    
    Does not impact either qemu (which always sends properly aligned
    sizes) or nbdkit (which does not send minimum block requirements yet);
    so this is mostly aimed at new NBD server implementations, and ensures
    that the rest of our code can assume the size is aligned.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20190330155704.24191-1-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Loading