From: Zhilong Liu Date: Mon, 20 Mar 2017 05:21:41 +0000 (+0800) Subject: mdadm/Monitor: Fix NULL pointer dereference when stat2devnm return NULL X-Git-Tag: mdadm-4.1-rc1~251 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75dd32a185871fead13cd3586e00980b35410ff0;p=thirdparty%2Fmdadm.git 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 Signed-off-by: Zhilong Liu Signed-off-by: Jes Sorensen --- diff --git a/Monitor.c b/Monitor.c index 802a9d98..bdd3e63e 100644 --- a/Monitor.c +++ b/Monitor.c @@ -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);