• J
    util: Set backing file name for LOOP_GET_STATUS64 queries. · 149bbc52
    Julio Faracco 提交于
    This is an issue for LXC loop devices when you are trying to get loop
    devices info using `ioctl`. Modern apps uses `/sys/dev/block` to grab
    information about devices, but if you use the method mention you won't
    be able to retrive the associated file with that loop device. See
    example below from cryptsetup sources:
    
        static char *_ioctl_backing_file(const char *loop)
        {
            struct loop_info64 lo64 = {0};
            int loop_fd;
    
            loop_fd = open(loop, O_RDONLY);
            if (loop_fd < 0)
                return NULL;
    
            if (ioctl(loop_fd, LOOP_GET_STATUS64, &lo64) < 0) {
                close(loop_fd);
                return NULL;
            }
    
            lo64.lo_file_name[LO_NAME_SIZE-2] = '*';
            lo64.lo_file_name[LO_NAME_SIZE-1] = 0;
    
            close(loop_fd);
            return strdup((char*)lo64.lo_file_name);
        }
    
    It will return an empty string because lo_file_name was not set.
    Function `virFileLoopDeviceOpenSearch()` is using `ioctl` to query data,
    but it is not checking `lo_file_name` field.
    Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
    Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
    149bbc52
virfile.c 115.9 KB