diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2016-03-21 15:48:36 +0100 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2016-03-21 15:50:32 +0100 |
commit | 8fad9b9e5d219861fc1f758216fb446cffe3817f (patch) | |
tree | e05d9cb31bf959545ccf1c060d4827e06ba4bc04 | |
parent | ca7bac53cf0b3b64bdfa375085fc1535589ab1eb (diff) | |
download | lvm2-8fad9b9e5d219861fc1f758216fb446cffe3817f.tar.gz |
dev: be safer when reading sysfs properties
Check if the value we read from sysfs is not blank and replace the '\n'
at the end only when needed ('\n' should usually be there for sysfs values,
but better check this).
-rw-r--r-- | lib/device/dev-cache.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c index 490cec3d6..d912dea88 100644 --- a/lib/device/dev-cache.c +++ b/lib/device/dev-cache.c @@ -365,6 +365,7 @@ static int _add_alias(struct device *dev, const char *path) static int _get_sysfs_value(const char *path, char *buf, size_t buf_size) { FILE *fp; + size_t len; if (!(fp = fopen(path, "r"))) { log_sys_error("fopen", path); @@ -378,7 +379,13 @@ static int _get_sysfs_value(const char *path, char *buf, size_t buf_size) return 0; } - buf[strlen(buf) - 1] = '\0'; + if (!(len = strlen(buf))) { + log_error("_get_sysfs_value: %s: no value", path); + return 0; + } + + if (buf[len - 1] == '\n') + buf[len - 1] = '\0'; if (fclose(fp)) log_sys_error("fclose", path); |