blob: 63e6220007d4c86d8058f5dd34ada7086d6a5c41 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
--- a/utils.c
+++ b/utils.c
@@ -833,13 +833,19 @@
{
int ret;
FILE *f;
+ struct stat stat_buf;
char fmt[20];
char p[PATH_MAX];
char real_loop_dev[PATH_MAX];
if (!realpath(loop_dev, real_loop_dev))
return -errno;
- snprintf(p, PATH_MAX, "/sys/block/%s/loop/backing_file", strrchr(real_loop_dev, '/'));
+
+ if (stat(real_loop_dev, &stat_buf) || !S_ISBLK(stat_buf.st_mode))
+ return -errno;
+
+ snprintf(p, PATH_MAX, "/sys/dev/block/%d:%d/loop/backing_file",
+ major(stat_buf.st_rdev), minor(stat_buf.st_rdev));
if (!(f = fopen(p, "r")))
return -errno;
|