From patchwork Tue Jul 16 17:20:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 56527 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2CC384C94; Tue, 16 Jul 2019 19:21:02 +0200 (CEST) Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by dpdk.org (Postfix) with ESMTP id A03404C8D for ; Tue, 16 Jul 2019 19:21:00 +0200 (CEST) Received: by mail-pg1-f196.google.com with SMTP id u17so9765667pgi.6 for ; Tue, 16 Jul 2019 10:21:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HEINuNFqMWTsW9gbTE/5q3ofvnAYV9WixCk6bGtLaDE=; b=SwcY5EaKxVWTNVgp+WyJxLRt0omtKhSMyHZ6dKkSaW0zTQ0gZSANBkZb5mE6MAgsrG mbRJGH6U7mku0pEyazUbFIqCwc4PRoMdD/qetaSmFL23RM6yhElCBLEiEe2h+SwqCPTr kyE9liOaYUjlN+GUNvoJmESCTCWhQnUoqK39CWCAp8QoPRbwGAxE+96/d/5ZcRmdu7Yd l3id3DQZHF05i8YLF6RTbT6ONdUZON6YwiPNAnzo2VWmC5FPn7gniv+a8GhXZmnRVM/h 337T7TY2e+V+3ukiHZdsTeV39oTIFqf+s00VP8BSf1csEDaOMxjpQfeGHFpy2xjf6Cut ohKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HEINuNFqMWTsW9gbTE/5q3ofvnAYV9WixCk6bGtLaDE=; b=VVdMdaM/u/o0/566e/Rc5JouqVAcz+CGlAYsTCEg45dYHfBqk3H+kJARYEqC2OeJHY osTiQbG9GpsattYDLysT2OcTH01nRmMDpQ9ZCz16Wr11hMn1XFkjBgnzftegULvZ81Dw w2azdT8hGvto/Pokv0x3pau19frmE64INh2WeMu3TRNkX8LHom7B2I7BmE9WeOFvkwcM fjL41v8JbzFRbBOoBOFACjFuYhYqNCXXI5iuk2VFvFhs14+okuO3uQfO9Rm2wvpdMjij kkwF7V6r4ODZevVg04hfNAwLsqyV6U3oUBFmSqfuti9xbs9VELLCaz50AbvaGUf3bv63 IKTg== X-Gm-Message-State: APjAAAVqmpc4lub7oLyN1aG20BQvPWBZGaaRNA3QeDyeFw7nv3wZhttJ +lrAAOL7Z0fi1rhJqX0DeQZyzbZq X-Google-Smtp-Source: APXvYqxSs4WCFRA8ju+bOcx4uebUNbnrdb9S3r3srdJMXqPFWSf03hgD6dJ+CWQ6NFEjuG6yHQfLiQ== X-Received: by 2002:a17:90a:e38f:: with SMTP id b15mr38940470pjz.85.1563297659584; Tue, 16 Jul 2019 10:20:59 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id j16sm16711463pjz.31.2019.07.16.10.20.58 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 16 Jul 2019 10:20:58 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org, jgrajcia@cisco.com Cc: Stephen Hemminger Date: Tue, 16 Jul 2019 10:20:57 -0700 Message-Id: <20190716172057.21110-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190708160600.25939-1-stephen@networkplumber.org> References: <20190708160600.25939-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [RFC v3] net/memif: allow for full key size in socket name X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" The key size for memif is 256 but the unix domain socket structure has space for 100 bytes. Change it to use a larger buffer and not hard code the keysize everywhere. Not sure what purpose of socket is anyway since there is no code which connects to it in the current tree anyway? Still an RFC, have no way to test. Signed-off-by: Stephen Hemminger Tested-by: Jakub Grajciar --- v3 - fix checkpatch issues drivers/net/memif/memif_socket.c | 29 ++++++++++++++++++----------- drivers/net/memif/memif_socket.h | 4 +++- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c index 01a935f87c9f..5eecbdc98040 100644 --- a/drivers/net/memif/memif_socket.c +++ b/drivers/net/memif/memif_socket.c @@ -860,11 +860,16 @@ memif_listener_handler(void *arg) rte_free(cc); } +#define MEMIF_SOCKET_UN_SIZE \ + (offsetof(struct sockaddr_un, sun_path) + MEMIF_SOCKET_KEY_LEN) + static struct memif_socket * -memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) +memif_socket_create(struct pmd_internals *pmd, + const char *key, uint8_t listener) { struct memif_socket *sock; - struct sockaddr_un un; + struct sockaddr_un *un; + char un_buf[MEMIF_SOCKET_UN_SIZE]; int sockfd; int ret; int on = 1; @@ -876,7 +881,7 @@ memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) } sock->listener = listener; - rte_memcpy(sock->filename, key, 256); + strlcpy(sock->filename, key, MEMIF_SOCKET_KEY_LEN); TAILQ_INIT(&sock->dev_queue); if (listener != 0) { @@ -884,15 +889,16 @@ memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) if (sockfd < 0) goto error; - un.sun_family = AF_UNIX; - memcpy(un.sun_path, sock->filename, - sizeof(un.sun_path) - 1); + memset(un_buf, 0, sizeof(un_buf)); + un = (struct sockaddr_un *)un_buf; + un->sun_family = AF_UNIX; + strlcpy(un->sun_path, sock->filename, MEMIF_SOCKET_KEY_LEN); ret = setsockopt(sockfd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); if (ret < 0) goto error; - ret = bind(sockfd, (struct sockaddr *)&un, sizeof(un)); + ret = bind(sockfd, (struct sockaddr *)un, MEMIF_SOCKET_UN_SIZE); if (ret < 0) goto error; ret = listen(sockfd, 1); @@ -928,9 +934,10 @@ static struct rte_hash * memif_create_socket_hash(void) { struct rte_hash_parameters params = { 0 }; + params.name = MEMIF_SOCKET_HASH_NAME; params.entries = 256; - params.key_len = 256; + params.key_len = MEMIF_SOCKET_KEY_LEN; params.hash_func = rte_jhash; params.hash_func_init_val = 0; return rte_hash_create(¶ms); @@ -945,7 +952,7 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename) struct pmd_internals *tmp_pmd; struct rte_hash *hash; int ret; - char key[256]; + char key[MEMIF_SOCKET_KEY_LEN]; hash = rte_hash_find_existing(MEMIF_SOCKET_HASH_NAME); if (hash == NULL) { @@ -956,8 +963,8 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename) } } - memset(key, 0, 256); - rte_memcpy(key, socket_filename, strlen(socket_filename)); + memset(key, 0, MEMIF_SOCKET_KEY_LEN); + strlcpy(key, socket_filename, MEMIF_SOCKET_KEY_LEN); ret = rte_hash_lookup_data(hash, key, (void **)&socket); if (ret < 0) { socket = memif_socket_create(pmd, key, diff --git a/drivers/net/memif/memif_socket.h b/drivers/net/memif/memif_socket.h index db293e200961..9f40f8d138bb 100644 --- a/drivers/net/memif/memif_socket.h +++ b/drivers/net/memif/memif_socket.h @@ -79,9 +79,11 @@ struct memif_socket_dev_list_elt { }; #define MEMIF_SOCKET_HASH_NAME "memif-sh" +#define MEMIF_SOCKET_KEY_LEN 256 + struct memif_socket { struct rte_intr_handle intr_handle; /**< interrupt handle */ - char filename[256]; /**< socket filename */ + char filename[MEMIF_SOCKET_KEY_LEN]; /**< socket filename */ TAILQ_HEAD(, memif_socket_dev_list_elt) dev_queue; /**< Queue of devices using this socket */