Skip to content
Snippets Groups Projects
  • Eric Blake's avatar
    93676c88
    nbd: Don't send oversize strings · 93676c88
    Eric Blake authored
    
    Qemu as server currently won't accept export names larger than 256
    bytes, nor create dirty bitmap names longer than 1023 bytes, so most
    uses of qemu as client or server have no reason to get anywhere near
    the NBD spec maximum of a 4k limit per string.
    
    However, we weren't actually enforcing things, ignoring when the
    remote side violates the protocol on input, and also having several
    code paths where we send oversize strings on output (for example,
    qemu-nbd --description could easily send more than 4k).  Tighten
    things up as follows:
    
    client:
    - Perform bounds check on export name and dirty bitmap request prior
      to handing it to server
    - Validate that copied server replies are not too long (ignoring
      NBD_INFO_* replies that are not copied is not too bad)
    server:
    - Perform bounds check on export name and description prior to
      advertising it to client
    - Reject client name or metadata query that is too long
    - Adjust things to allow full 4k name limit rather than previous
      256 byte limit
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20191114024635.11363-4-eblake@redhat.com>
    Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    93676c88
    History
    nbd: Don't send oversize strings
    Eric Blake authored
    
    Qemu as server currently won't accept export names larger than 256
    bytes, nor create dirty bitmap names longer than 1023 bytes, so most
    uses of qemu as client or server have no reason to get anywhere near
    the NBD spec maximum of a 4k limit per string.
    
    However, we weren't actually enforcing things, ignoring when the
    remote side violates the protocol on input, and also having several
    code paths where we send oversize strings on output (for example,
    qemu-nbd --description could easily send more than 4k).  Tighten
    things up as follows:
    
    client:
    - Perform bounds check on export name and dirty bitmap request prior
      to handing it to server
    - Validate that copied server replies are not too long (ignoring
      NBD_INFO_* replies that are not copied is not too bad)
    server:
    - Perform bounds check on export name and description prior to
      advertising it to client
    - Reject client name or metadata query that is too long
    - Adjust things to allow full 4k name limit rather than previous
      256 byte limit
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20191114024635.11363-4-eblake@redhat.com>
    Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>