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 E3852C433F5 for ; Mon, 4 Apr 2022 12:39:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346690AbiDDMlQ (ORCPT ); Mon, 4 Apr 2022 08:41:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345904AbiDDMlO (ORCPT ); Mon, 4 Apr 2022 08:41:14 -0400 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8A5A12634 for ; Mon, 4 Apr 2022 05:39:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649075958; x=1680611958; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=SyqCbQaE1zRB9vkWiOqZ4DLw2LMw4PYHiKgvCzlnh9U=; b=Jin7l57ONe1+HeDi8kYUakRB8ZN+VW4PJUVNOt/8o+Xvb0+lF0ntLVnV URpYwx3OTyJfYUG5jO0BwlfWfXlw5lqx69ybvqOJS210nnm0bPCdyaJWq eVneV9pqp0WDshykpM/a2N7TPw9/fzfiQi9up6u7xZ+UGCyMeRZRrRjnk hvWljUMzohIKdaIWgp2VzidP1QImwQYvXbKlA3rS5kF/RBnQyWSUA3pbc H0KWSJpU+fzHXyPf2EACVLORDHlcrJqTcEFItoUeSqebzeHx5AaSb+3U8 FaCCrVxylWe+N1METjGROCt5S0ZxSHLvLjFCgvggB2/civ67AOTJVMDFx Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10306"; a="321199240" X-IronPort-AV: E=Sophos;i="5.90,234,1643702400"; d="scan'208";a="321199240" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Apr 2022 05:39:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,234,1643702400"; d="scan'208";a="569365368" Received: from unknown (HELO localhost.igk.intel.com) ([10.102.102.97]) by orsmga008.jf.intel.com with ESMTP; 04 Apr 2022 05:39:17 -0700 From: Kinga Tanska To: linux-raid@vger.kernel.org Cc: jes@trained-monkey.org, colyli@suse.de Subject: [PATCH 1/2] Mdmonitor: Fix segfault Date: Mon, 4 Apr 2022 14:43:15 +0200 Message-Id: <20220404124316.12880-2-kinga.tanska@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220404124316.12880-1-kinga.tanska@intel.com> References: <20220404124316.12880-1-kinga.tanska@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-raid@vger.kernel.org Check that devices passed to mdmonitor are md arrays. Signed-off-by: Kinga Tanska Signed-off-by: Oleksandr Shchirskyi --- Monitor.c | 11 ++++++++++- mdadm.h | 1 + mdopen.c | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Monitor.c b/Monitor.c index f5412299..0b24b656 100644 --- a/Monitor.c +++ b/Monitor.c @@ -183,6 +183,10 @@ int Monitor(struct mddev_dev *devlist, continue; if (strcasecmp(mdlist->devname, "") == 0) continue; + + if (!is_mddev(mdlist->devname)) + return 1; + st = xcalloc(1, sizeof *st); if (mdlist->devname[0] == '/') st->devname = xstrdup(mdlist->devname); @@ -204,7 +208,12 @@ int Monitor(struct mddev_dev *devlist, struct mddev_dev *dv; for (dv = devlist; dv; dv = dv->next) { - struct state *st = xcalloc(1, sizeof *st); + struct state *st; + + if (!is_mddev(dv->devname)) + return 1; + + st = xcalloc(1, sizeof *st); mdlist = conf_get_ident(dv->devname); st->devname = xstrdup(dv->devname); st->next = statelist; diff --git a/mdadm.h b/mdadm.h index 8f8841d8..03151c34 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1607,6 +1607,7 @@ extern int create_mddev(char *dev, char *name, int autof, int trustworthy, #define FOREIGN 2 #define METADATA 3 extern int open_mddev(char *dev, int report_errors); +extern int is_mddev(char *dev); extern int open_container(int fd); extern int metadata_container_matches(char *metadata, char *devnm); extern int metadata_subdev_matches(char *metadata, char *devnm); diff --git a/mdopen.c b/mdopen.c index 245be537..d18c9319 100644 --- a/mdopen.c +++ b/mdopen.c @@ -475,6 +475,23 @@ int open_mddev(char *dev, int report_errors) return mdfd; } +/** + * is_mddev() - check that file name passed is an md device. + * @dev: file name that has to be checked. + * Return: 1 if file passed is an md device, 0 if not. + */ +int is_mddev(char *dev) +{ + int fd = open_mddev(dev, 1); + + if (fd >= 0) { + close(fd); + return 1; + } + + return 0; +} + char *find_free_devnm(int use_partitions) { static char devnm[32]; -- 2.26.2