hostmem-file: reject invalid pmem file sizes

Guests started with NVDIMMs larger than the underlying host file produce
confusing errors inside the guest.  This happens because the guest
accesses pages beyond the end of the file.

Check the pmem file size on startup and print a clear error message if
the size is invalid.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1669053
Cc: Wei Yang <richardw.yang@linux.intel.com>
Cc: Zhang Yi <yi.z.zhang@linux.intel.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20190214031004.32522-3-stefanha@redhat.com>
Reviewed-by: Wei Yang <richardw.yang@linux.intel.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Pankaj Gupta <pagupta@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Stefan Hajnoczi
2019-02-14 11:10:04 +08:00
committed by Eduardo Habkost
parent 336cfef495
commit 314aec4a6e
4 changed files with 94 additions and 0 deletions

View File

@ -570,6 +570,19 @@ void qemu_set_tty_echo(int fd, bool echo);
void os_mem_prealloc(int fd, char *area, size_t sz, int smp_cpus,
Error **errp);
/**
* qemu_get_pmem_size:
* @filename: path to a pmem file
* @errp: pointer to a NULL-initialized error object
*
* Determine the size of a persistent memory file. Besides supporting files on
* DAX file systems, this function also supports Linux devdax character
* devices.
*
* Returns: the size or 0 on failure
*/
uint64_t qemu_get_pmem_size(const char *filename, Error **errp);
/**
* qemu_get_pid_name:
* @pid: pid of a process