From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE9A6C4332F for ; Mon, 12 Dec 2022 09:24:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231576AbiLLJY2 (ORCPT ); Mon, 12 Dec 2022 04:24:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231889AbiLLJXv (ORCPT ); Mon, 12 Dec 2022 04:23:51 -0500 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0EFE5FCB for ; Mon, 12 Dec 2022 01:23:49 -0800 (PST) Received: from kwepemm600010.china.huawei.com (unknown [172.30.72.54]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4NVx4D34YWz15NJy; Mon, 12 Dec 2022 17:22:52 +0800 (CST) Received: from [10.174.177.197] (10.174.177.197) by kwepemm600010.china.huawei.com (7.193.23.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Mon, 12 Dec 2022 17:23:47 +0800 From: lixiaokeng Subject: [PATCH] Fix NULL difference in super_by_fd To: , CC: linfeilong , "liuzhiqiang (I)" , Wu Guanghao Message-ID: <4dc03371-2b6f-a606-6e57-13fb774daa2d@huawei.com> Date: Mon, 12 Dec 2022 17:23:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.177.197] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemm600010.china.huawei.com (7.193.23.86) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-raid@vger.kernel.org When we create 100 partitions(major is 259 not 254) in a raid device, mdadm may coredump: Core was generated by `/usr/sbin/mdadm --detail --export /dev/md1p3'. Program terminated with signal SIGSEGV, Segmentation fault. #0 __strlen_sse2 () at ../sysdeps/x86_64/multiarch/strlen-vec.S:126 126 movdqu (%rax), %xmm4 (gdb) bt #0 __strlen_sse2 () at ../sysdeps/x86_64/multiarch/strlen-vec.S:126 #1 0x00007f1944659139 in __strcpy_chk ( dest=dest@entry=0x55ea8d7c23ac "", src=0x0, destlen=destlen@entry=32) at strcpy_chk.c:28 #2 0x000055ea8d10b66d in strcpy (__src=, __dest=0x55ea8d7c23ac "") at /usr/include/bits/string_fortified.h:79 #3 super_by_fd (fd=fd@entry=3, subarrayp=subarrayp@entry=0x7ffe6a1dff08) at util.c:1289 #4 0x000055ea8d11b3a6 in Detail ( dev=0x7ffe6a1e2f22 "/dev/md1p3", c=0x7ffe6a1e1700) at Detail.c:101 #5 0x000055ea8d101e61 in misc_list (c=, ss=, dump_directory=, ident=, devlist=) at mdadm.c:1959 #6 main (argc=, argv=) at mdadm.c:1629 The direct cause is fd2devnm return NULL. Here add a check. Signed-off-by:Lixiaokeng Signed-off-by:Wuguanghao --- util.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util.c b/util.c index 26ffdcea..843bfc6d 100644 --- a/util.c +++ b/util.c @@ -1177,6 +1177,7 @@ struct supertype *super_by_fd(int fd, char **subarrayp) int i; char *subarray = NULL; char container[32] = ""; + char *devnm = NULL; sra = sysfs_read(fd, NULL, GET_VERSION); @@ -1222,7 +1223,10 @@ struct supertype *super_by_fd(int fd, char **subarrayp) if (subarrayp) *subarrayp = subarray; strcpy(st->container_devnm, container); - strcpy(st->devnm, fd2devnm(fd)); + if (devnm = fd2devnm(fd)) + strcpy(st->devnm, devnm); + else + st->devnm[0] = '\0'; } else free(subarray); --