mdadm/Monitor: Fix NULL pointer dereference when stat2devnm return NULL

Wait(): stat2devnm() returns NULL for non block devices. Check the
pointer is valid derefencing it. This can happen when using --wait,
such as the 'f' and 'd' file type, causing a core dump.
such as: ./mdadm --wait /dev/md/

Reviewed-by: NeilBrown <neilb@suse.com>
Signed-off-by: Zhilong Liu <zlliu@suse.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
This commit is contained in:
Zhilong Liu 2017-03-20 13:21:41 +08:00 committed by Jes Sorensen
parent e81070a69b
commit 75dd32a185
1 changed files with 7 additions and 1 deletions

View File

@ -994,6 +994,7 @@ int Wait(char *dev)
{
struct stat stb;
char devnm[32];
char *tmp;
int rv = 1;
int frozen_remaining = 3;
@ -1002,7 +1003,12 @@ int Wait(char *dev)
strerror(errno));
return 2;
}
strcpy(devnm, stat2devnm(&stb));
tmp = stat2devnm(&stb);
if (!tmp) {
pr_err("%s is not a block device.\n", dev);
return 2;
}
strcpy(devnm, tmp);
while(1) {
struct mdstat_ent *ms = mdstat_read(1, 0);