From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2972043388; Tue, 21 Nov 2023 04:45:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9BF4C40298; Tue, 21 Nov 2023 04:45:02 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 8B4BD4025F for ; Tue, 21 Nov 2023 04:45:00 +0100 (CET) Received: from kwepemm000004.china.huawei.com (unknown [172.30.72.55]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4SZ9H74SS1zvQVC; Tue, 21 Nov 2023 11:44:35 +0800 (CST) Received: from [10.67.121.59] (10.67.121.59) by kwepemm000004.china.huawei.com (7.193.23.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 21 Nov 2023 11:44:57 +0800 Message-ID: <33374b1c-5d68-ed0e-cb2c-ceda04187903@huawei.com> Date: Tue, 21 Nov 2023 11:44:57 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v2 01/16] eal: verify strdup return value To: Chengwen Feng , , , Keith Wiles , Ciara Power , Bruce Richardson , Jeff Guo , Jianfeng Tan CC: References: <20231110100117.8350-1-fengchengwen@huawei.com> <20231110100117.8350-2-fengchengwen@huawei.com> From: "lihuisong (C)" In-Reply-To: <20231110100117.8350-2-fengchengwen@huawei.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.121.59] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000004.china.huawei.com (7.193.23.18) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org 在 2023/11/10 18:01, Chengwen Feng 写道: > Add verify strdup() return value logic. > > Fixes: 293c53d8b23c ("eal: add telemetry callbacks") > Fixes: 0d0f478d0483 ("eal/linux: add uevent parse and process") > Cc: stable@dpdk.org > > Signed-off-by: Chengwen Feng > --- > lib/eal/common/eal_common_options.c | 24 ++++++++++++++++++++++-- > lib/eal/linux/eal_dev.c | 3 +++ > 2 files changed, 25 insertions(+), 2 deletions(-) > > diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c > index a6d21f1cba..8b5a4632dd 100644 > --- a/lib/eal/common/eal_common_options.c > +++ b/lib/eal/common/eal_common_options.c > @@ -226,6 +226,8 @@ eal_save_args(int argc, char **argv) > if (strcmp(argv[i], "--") == 0) > break; > eal_args[i] = strdup(argv[i]); > + if (eal_args[i] == NULL) > + goto error; > } > eal_args[i++] = NULL; /* always finish with NULL */ > > @@ -235,13 +237,31 @@ eal_save_args(int argc, char **argv) > > eal_app_args = calloc(argc - i + 1, sizeof(*eal_args)); > if (eal_app_args == NULL) > - return -1; > + goto error; > > - for (j = 0; i < argc; j++, i++) > + for (j = 0; i < argc; j++, i++) { > eal_app_args[j] = strdup(argv[i]); > + if (eal_app_args[j] == NULL) > + goto error; > + } > eal_app_args[j] = NULL; > > return 0; > + > +error: > + if (eal_app_args != NULL) { > + i = 0; > + while (eal_app_args[i] != NULL) > + free(eal_app_args[i++]); > + free(eal_app_args); > + eal_app_args = NULL; > + } > + i = 0; > + while (eal_args[i] != NULL) > + free(eal_args[i++]); > + free(eal_args); > + eal_args = NULL; > + return -1; > } > #endif > > diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c > index ac76f6174d..df3cd6b39a 100644 > --- a/lib/eal/linux/eal_dev.c > +++ b/lib/eal/linux/eal_dev.c > @@ -181,7 +181,10 @@ dev_uev_parse(const char *buf, struct rte_dev_event *event, int length) > buf += 14; > i += 14; > strlcpy(pci_slot_name, buf, sizeof(subsystem)); > + free(event->devname); It seems that above free for devname is unnecessary. > event->devname = strdup(pci_slot_name); > + if (event->devname == NULL) > + return -1; > } > for (; i < length; i++) { > if (*buf == '\0')