mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-01 00:36:40 +09:00
um: fix ubd cow size
commit 8535639810 upstream.
ubd_file_size() cannot use ubd_dev->cow.file because at this time
ubd_dev->cow.file is not initialized.
Therefore, ubd_file_size() will always report a wrong disk size when
COW files are used.
Reading from /dev/ubd* would crash the kernel.
We have to read the correct disk size from the COW file's backing
file.
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9ae9f13480
commit
02e66bee63
@@ -513,8 +513,37 @@ __uml_exitcall(kill_io_thread);
|
||||
static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out)
|
||||
{
|
||||
char *file;
|
||||
int fd;
|
||||
int err;
|
||||
|
||||
file = ubd_dev->cow.file ? ubd_dev->cow.file : ubd_dev->file;
|
||||
__u32 version;
|
||||
__u32 align;
|
||||
char *backing_file;
|
||||
time_t mtime;
|
||||
unsigned long long size;
|
||||
int sector_size;
|
||||
int bitmap_offset;
|
||||
|
||||
if (ubd_dev->file && ubd_dev->cow.file) {
|
||||
file = ubd_dev->cow.file;
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
fd = os_open_file(ubd_dev->file, global_openflags, 0);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
err = read_cow_header(file_reader, &fd, &version, &backing_file, \
|
||||
&mtime, &size, §or_size, &align, &bitmap_offset);
|
||||
os_close_file(fd);
|
||||
|
||||
if(err == -EINVAL)
|
||||
file = ubd_dev->file;
|
||||
else
|
||||
file = backing_file;
|
||||
|
||||
out:
|
||||
return os_file_size(file, size_out);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user