diff options
author | Daniel Golle <daniel@makrotopia.org> | 2021-05-12 23:35:46 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-05-16 00:28:11 +0100 |
commit | bd7cc8dd12481167d5a3b289c19ca9ccd8effa7c (patch) | |
tree | 7a89f3e7164848620d0466733ca2ba1c0a28c4cf | |
parent | b5397a142d3ac35daeb526b1df82ccbf64bff741 (diff) | |
download | fstools-bd7cc8dd12481167d5a3b289c19ca9ccd8effa7c.tar.gz |
block: use dynamically allocated target string
Dynamically allocate string buffer for target mountpoint if needed in
order to avoid the static buffer overflowing for long (device mapper)
paths.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r-- | block.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -994,7 +994,7 @@ static int mount_device(struct probe_info *pr, int type) { struct mount *m; struct stat st; - char _target[32]; + char *_target = NULL; char *target; char *device; char *mp; @@ -1053,16 +1053,22 @@ static int mount_device(struct probe_info *pr, int type) } if (m->autofs) { - snprintf(_target, sizeof(_target), "/tmp/run/blockd/%s", device); + if (asprintf(&_target, "/tmp/run/blockd/%s", device) == -1) + exit(ENOMEM); + target = _target; } else if (m->target) { target = m->target; } else { - snprintf(_target, sizeof(_target), "/mnt/%s", device); + if (asprintf(&_target, "/mnt/%s", device) == -1) + exit(ENOMEM); + target = _target; } } else if (anon_mount) { - snprintf(_target, sizeof(_target), "/mnt/%s", device); + if (asprintf(&_target, "/mnt/%s", device) == -1) + exit(ENOMEM); + target = _target; } else { /* No reason to mount this device */ @@ -1082,9 +1088,16 @@ static int mount_device(struct probe_info *pr, int type) if (err) { ULOG_ERR("mounting %s (%s) as %s failed (%d) - %m\n", pr->dev, pr->type, target, errno); + + if (_target) + free(_target); + return err; } + if (_target) + free(_target); + handle_swapfiles(true); if (type != TYPE_AUTOFS) |