mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
storage: avoid crash on parse error
Coverity detected that we could crash on bogus input. Meanwhile, strtok_r is rather heavy compared to strchr. * src/storage/storage_backend_iscsi.c (virStorageBackendIQNFound): Check for parse failure, and use lighter-weight functions.
This commit is contained in:
parent
222f6233b4
commit
5dc404b71d
@ -183,8 +183,7 @@ virStorageBackendIQNFound(const char *initiatoriqn,
|
||||
int ret = IQN_MISSING, fd = -1;
|
||||
char ebuf[64];
|
||||
FILE *fp = NULL;
|
||||
char *line = NULL, *newline = NULL, *iqn = NULL, *token = NULL,
|
||||
*saveptr = NULL;
|
||||
char *line = NULL, *newline = NULL, *iqn = NULL, *token = NULL;
|
||||
virCommandPtr cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "iface", NULL);
|
||||
|
||||
@ -232,8 +231,15 @@ virStorageBackendIQNFound(const char *initiatoriqn,
|
||||
iqn++;
|
||||
|
||||
if (STREQ(iqn, initiatoriqn)) {
|
||||
token = strtok_r(line, " ", &saveptr);
|
||||
*ifacename = strdup(token);
|
||||
token = strchr(line, ' ');
|
||||
if (!token) {
|
||||
ret = IQN_ERROR;
|
||||
virStorageReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Missing space when parsing output "
|
||||
"of '%s'"), ISCSIADM);
|
||||
goto out;
|
||||
}
|
||||
*ifacename = strndup(line, token - line);
|
||||
if (*ifacename == NULL) {
|
||||
ret = IQN_ERROR;
|
||||
virReportOOMError();
|
||||
|
Loading…
x
Reference in New Issue
Block a user