From: Daniel Golle Date: Wed, 12 May 2021 22:35:46 +0000 (+0100) Subject: block: use dynamically allocated target string X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;ds=sidebyside;h=bd7cc8dd12481167d5a3b289c19ca9ccd8effa7c;p=project%2Ffstools.git 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 --- diff --git a/block.c b/block.c index c6d93d1..a613fd7 100644 --- a/block.c +++ b/block.c @@ -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)