From bd7cc8dd12481167d5a3b289c19ca9ccd8effa7c Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Wed, 12 May 2021 23:35:46 +0100 Subject: [PATCH] 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 --- block.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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) -- 2.30.2