On 22.12.21 02:12, Peng Hao wrote: > There is a check for vm->sbm.sb_states before, and it should check > it here as well. > > Signed-off-by: Peng Hao <flyingpeng@xxxxxxxxxxx> > --- > drivers/virtio/virtio_mem.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c > index 96e5a8782769..b6b7c489c8b6 100644 > --- a/drivers/virtio/virtio_mem.c > +++ b/drivers/virtio/virtio_mem.c > @@ -592,7 +592,7 @@ static int virtio_mem_sbm_sb_states_prepare_next_mb(struct virtio_mem *vm) > return -ENOMEM; > > mutex_lock(&vm->hotplug_mutex); > - if (new_bitmap) > + if (vm->sbm.sb_states) > memcpy(new_bitmap, vm->sbm.sb_states, old_pages * PAGE_SIZE); > > old_bitmap = vm->sbm.sb_states; Right, on the first iteration (vm->sbm.sb_states == NULL) we would copy from NULL. I wonder why this never failed so far. I guess that's because "the behavior is undefined" if a NULL pointer is passed. I assume the memcpy implementation that we've been using so far simply skips the operation if they detect a NULL pointer, although according to the standard the behavior is undefined: " AFAIK, most implementations allow null pointers for no-op calls to memcpy() but gcc issues a warning when it detects at compile time that a null pointer is passed as the first or second argument to memcpy(). " [1] Fixes: 5f1f79bbc9e2 ("virtio-mem: Paravirtualized memory hotplug") Cc: stable@xxxxxxxxxxxxxxx # v5.8+ Thanks! [1] https://mail-archives.apache.org/mod_mbox/stdcxx-dev/200804.mbox/%3CCFFDD219128FD94FB4F92B99F52D0A49010A36F4@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3E -- Thanks, David / dhildenb