From patchwork Thu Oct 14 11:37:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 101612 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1C8CCA0C47; Thu, 14 Oct 2021 13:37:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9A7AB41219; Thu, 14 Oct 2021 13:37:39 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mails.dpdk.org (Postfix) with ESMTP id 7843040041 for ; Thu, 14 Oct 2021 13:37:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634211458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=s3iNWOekIPjopTnToEB8s4/VSMoCzFfC6FkVHPd2P8k=; b=eSgzcQBV9dDgJHShiPKczQjk8JptwtI1K/+++Sh59TbJHaj8cP5DyEuxJ3TALkkquhO7qH JwW9w80bDuwJ9ctqZi4SLyc02x5v46FgQ01xOgH/4CXU2ZhGOiKa4HRbC/+PqZiA1x7Fqb NvDtzVnzIJORuz2YNiJaRjAHTNT/yAo= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-537-nkLLdlXeMJi6B7FPkSeQMg-1; Thu, 14 Oct 2021 07:37:36 -0400 X-MC-Unique: nkLLdlXeMJi6B7FPkSeQMg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5254210A8E02; Thu, 14 Oct 2021 11:37:35 +0000 (UTC) Received: from dmarchan.remote.csb (unknown [10.40.193.65]) by smtp.corp.redhat.com (Postfix) with ESMTP id 634AB1972D; Thu, 14 Oct 2021 11:37:32 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: dkozlyuk@nvidia.com, stable@dpdk.org, Matan Azrad , Viacheslav Ovsiienko , Xueming Li , Xiaoyu Min Date: Thu, 14 Oct 2021 13:37:18 +0200 Message-Id: <20211014113718.12487-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=david.marchand@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [dpdk-dev] [PATCH] net/mlx5: do not close stdin on error 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 Sender: "dev" If for any reason, a socket could not be opened, mlx5_pmd_socket_init() could close the 0 fd (which is valid, and has a fair chance to be stdin), since server_socket == 0 from the variable being in .bss. Fixes: e6cdc54cc0ef ("net/mlx5: add socket server for external tools") Cc: stable@dpdk.org Signed-off-by: David Marchand Reviewed-by: Dmitry Kozlyuk --- drivers/net/mlx5/linux/mlx5_socket.c | 29 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_socket.c b/drivers/net/mlx5/linux/mlx5_socket.c index 902b8ec934..93a55bdce5 100644 --- a/drivers/net/mlx5/linux/mlx5_socket.c +++ b/drivers/net/mlx5/linux/mlx5_socket.c @@ -22,7 +22,7 @@ #define MLX5_SOCKET_PATH "/var/tmp/dpdk_net_mlx5_%d" -int server_socket; /* Unix socket for primary process. */ +int server_socket = -1; /* Unix socket for primary process. */ struct rte_intr_handle server_intr_handle; /* Interrupt handler. */ /** @@ -144,7 +144,7 @@ mlx5_pmd_socket_handle(void *cb __rte_unused) static int mlx5_pmd_interrupt_handler_install(void) { - MLX5_ASSERT(server_socket); + MLX5_ASSERT(server_socket != -1); server_intr_handle.fd = server_socket; server_intr_handle.type = RTE_INTR_HANDLE_EXT; return rte_intr_callback_register(&server_intr_handle, @@ -157,7 +157,7 @@ mlx5_pmd_interrupt_handler_install(void) static void mlx5_pmd_interrupt_handler_uninstall(void) { - if (server_socket) { + if (server_socket != -1) { mlx5_intr_callback_unregister(&server_intr_handle, mlx5_pmd_socket_handle, NULL); @@ -182,7 +182,7 @@ mlx5_pmd_socket_init(void) int flags; MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY); - if (server_socket) + if (server_socket != -1) return 0; ret = socket(AF_UNIX, SOCK_STREAM, 0); if (ret < 0) { @@ -193,10 +193,10 @@ mlx5_pmd_socket_init(void) server_socket = ret; flags = fcntl(server_socket, F_GETFL, 0); if (flags == -1) - goto error; + goto close; ret = fcntl(server_socket, F_SETFL, flags | O_NONBLOCK); if (ret < 0) - goto error; + goto close; snprintf(sun.sun_path, sizeof(sun.sun_path), MLX5_SOCKET_PATH, getpid()); remove(sun.sun_path); @@ -204,25 +204,26 @@ mlx5_pmd_socket_init(void) if (ret < 0) { DRV_LOG(WARNING, "cannot bind mlx5 socket: %s", strerror(errno)); - goto close; + goto remove; } ret = listen(server_socket, 0); if (ret < 0) { DRV_LOG(WARNING, "cannot listen on mlx5 socket: %s", strerror(errno)); - goto close; + goto remove; } if (mlx5_pmd_interrupt_handler_install()) { DRV_LOG(WARNING, "cannot register interrupt handler for mlx5 socket: %s", strerror(errno)); - goto close; + goto remove; } return 0; -close: +remove: remove(sun.sun_path); -error: +close: claim_zero(close(server_socket)); - server_socket = 0; + server_socket = -1; +error: DRV_LOG(ERR, "Cannot initialize socket: %s", strerror(errno)); return -errno; } @@ -233,11 +234,11 @@ mlx5_pmd_socket_init(void) void mlx5_pmd_socket_uninit(void) { - if (!server_socket) + if (server_socket == -1) return; mlx5_pmd_interrupt_handler_uninstall(); claim_zero(close(server_socket)); - server_socket = 0; + server_socket = -1; MKSTR(path, MLX5_SOCKET_PATH, getpid()); claim_zero(remove(path)); }