On Thu, Aug 06, 2020 at 09:23:45PM -0500, Eric Blake wrote:
Serving a directory, char device, fifo, socket, or other unusual file type is likely to cause unusual problems down the road when trying to use .pread; let's move the failure sooner to .open.
Signed-off-by: Eric Blake <eblake@redhat.com> --- plugins/file/file.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/plugins/file/file.c b/plugins/file/file.c index dc99f992..e049864a 100644 --- a/plugins/file/file.c +++ b/plugins/file/file.c @@ -189,7 +189,16 @@ file_open (int readonly) return NULL; }
- h->is_block_device = S_ISBLK (statbuf.st_mode); + if (S_ISBLK (statbuf.st_mode)) + h->is_block_device = true; + else if (S_ISREG (statbuf.st_mode)) + h->is_block_device = false; + else { + nbdkit_error ("file is not regular or block device: %s", filename); + close (h->fd); + free (h); + return NULL; + } h->sector_size = 4096; /* Start with safe guess */
#ifdef BLKSSZGET
ACK, we should take this patch soon. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top