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 4D3244705A for ; Tue, 16 Dec 2025 17:12:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 468BF402EB; Tue, 16 Dec 2025 17:12:29 +0100 (CET) Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com [209.85.222.176]) by mails.dpdk.org (Postfix) with ESMTP id C8EF24026D for ; Tue, 16 Dec 2025 17:12:24 +0100 (CET) Received: by mail-qk1-f176.google.com with SMTP id af79cd13be357-8b25ed53fcbso692764785a.0 for ; Tue, 16 Dec 2025 08:12:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytheb-org.20230601.gappssmtp.com; s=20230601; t=1765901544; x=1766506344; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=zIVKsZL29LY/AA3QOi6WxlAsNpbvOyQdwM0u7UyErYs=; b=AjhdFRLA98RjKC+GUtBL4ewupKk3UOt/JZEUtfcSa6t7/2NV/J1Edk6TQjancwxq3I EYpfy/5DD6npJZzckft7iG4i1DsBe8mthvs6GcfiKVqtS+BlNCfWLWDibMUpeCRrg/gT XqJ47eSFfSnBQUhW770mYYuJgr1aBVFmj9gxABjk+om/UW4KRrro5KlLpbBnXO9mKZIw zP18zDanbbtt6UWuBMHxKoC7ARyWTgj/UYOpsnI95G5n/2SfsjJKd56K1IPp5ta5S/uv N8pOIQQ0c04N3eh6B+A8Zh41e53p8QSQqpz/zndTwwNmoCg+4ltN5HGsQZxoei4duXFi rHTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765901544; x=1766506344; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=zIVKsZL29LY/AA3QOi6WxlAsNpbvOyQdwM0u7UyErYs=; b=g1L+oS4gwlkBvBsGs3qut657gdvCXL8IZL3xX6MhaClveRND8aO927/qs2Vc7ou3RP CU/UCNYQHILno3muVnI+ZWYZsR00tdPfSlMlKwsfHX4YxrY21KXJu9Uq4kzI4J/DdXPQ 53BwL+ShHm7aLuNI/+4KAMUvfTHt2jmB6+h0P+Hs3+ZSNNuQPKfQ77+xSGlWuHNFcr2L b0IJ5DZLuNRD9BXkZ/R7JXmml/NHM0zDPF/wVC9iF9EuHxp0KbzagtD+HAso7DHecaX8 o0gS1RXYQlvfN7miAa5e9S5sGNWXUdzjP1LKIcqHXYhYxfFantB6nNwe0dkbguGceN3b xM/w== X-Gm-Message-State: AOJu0Yyca5kaHKwpXyGZgCShVIX1JJ5OrXQlPEmvRowoBnli0N8ZL+I7 vEkmDf9HFlKNieuWPSuNGbbWO8ngnNaKz/jQkfagtRt3zezqNCvOAfgWjKGhQLP9WTwDKgI3EN5 K7D5S X-Gm-Gg: AY/fxX7L9yWSb2UXSG54xIB4yKRs4s8XOzAT0oWaiv8a7F6oXHzcqioGysf7NJNOebV NmVJ+yVWWnC9AMKN/nobddtp846rQnO6/4PyIHtqu/CcA1HPyHCQL8/3xbu+VfCRdLYLQRHJCrh SsnxePch1KgsZyRbjAvX5+TsARWMMpXT4nfygW2ScHXBXVwu87XeuXiVETxLvmfhS0vWVDs/8O1 rdDUCsegP8qP+lFMYHbFUvIl9M8MLiZ3bo9+8tL+tIm3fQrVrIa2zy6FZjS9csu6NPsu1K2yk1D oPYozr0WVkizZ6ZX0kSNS+XnptEky6cuNIzufgpXr9pLtcznFgATlj21vokWAcrG28K2OiOIOsq TRoik/o6EeclcnrqasV3PryEFWqDA41UGkyclFSiiRO7L3yXV4tEd0I6gfgITVjiMURfwYuvlZL 4HONfaqGpnXntZ54Bz6Q== X-Google-Smtp-Source: AGHT+IHdFs0IzYtY+WxCTPq+XpQm7OQ3y61a2P2RRg8QWD36xHdaE5rwXxWPGPdotSBRHIBbEf1o3Q== X-Received: by 2002:a05:620a:1983:b0:82e:ef43:38f0 with SMTP id af79cd13be357-8bb38e7f5b4mr2017417685a.0.1765901543399; Tue, 16 Dec 2025 08:12:23 -0800 (PST) Received: from RHTRH0061144.redhat.com ([47.14.5.10]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8be303e7e51sm223443885a.7.2025.12.16.08.12.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 08:12:23 -0800 (PST) From: 0-day Robot To: test-report@dpdk.org, Stephen Hemminger Subject: |SUCCESS| pw159222 [PATCH v5 11/17] eal: limit maximum runtime directory and socket paths Date: Tue, 16 Dec 2025 11:12:21 -0500 Message-ID: <20251216161221.762576-1-robot@bytheb.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251207191242.165619-12-stephen@networkplumber.org> References: <20251205022948.327743-1-stephen@networkplumber.org> <20251207191242.165619-1-stephen@networkplumber.org> <20251207191242.165619-12-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: test-report@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: automatic DPDK test reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: test-report-bounces@dpdk.org Test-Label: 0day Robot - Claude SONNET Test-Status: SUCCESS http://dpdk.org/patch/159222 _AI Review Comments Available_ git sha: Not provided in patch Author: Stephen Hemminger Subject: eal: limit maximum runtime directory and socket paths This commit changes the buffer sizes from PATH_MAX to UNIX_PATH_MAX to prevent unix domain socket path truncation issues, and adds proper bounds checking in path construction functions. > diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c > index 7fc7611a07..e2e69a75fb 100644 > --- a/lib/eal/common/eal_common_config.c > +++ b/lib/eal/common/eal_common_config.c > @@ -6,6 +6,7 @@ > > #include > #include "eal_private.h" > +#include "eal_filesystem.h" > #include "eal_memcfg.h" > > /* early configuration structure, when memory config is not mmapped */ > @@ -24,7 +25,7 @@ static struct rte_config rte_config = { > }; > > /* platform-specific runtime dir */ > -static char runtime_dir[PATH_MAX]; > +static char runtime_dir[UNIX_PATH_MAX]; > > /* internal configuration */ > static struct internal_config internal_config; > @@ -39,7 +40,8 @@ rte_eal_get_runtime_dir(void) > int > eal_set_runtime_dir(const char *run_dir) > { > - if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) { > + /* runtime directory limited by maximum allowable unix domain socket */ > + if (strlcpy(runtime_dir, run_dir, UNIX_PATH_MAX) >= UNIX_PATH_MAX) { > EAL_LOG(ERR, "Runtime directory string too long"); > return -1; > } [ ... ] > diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c > index 62fd4ba88f..dbf749c5b8 100644 > --- a/lib/eal/common/eal_common_proc.c > +++ b/lib/eal/common/eal_common_proc.c > @@ -36,10 +36,10 @@ > > static RTE_ATOMIC(int) mp_fd = -1; > static rte_thread_t mp_handle_tid; > -static char mp_filter[PATH_MAX]; /* Filter for secondary process sockets */ > -static char mp_dir_path[PATH_MAX]; /* The directory path for all mp sockets */ > +static char mp_filter[UNIX_PATH_MAX]; /* Filter for secondary process sockets */ > +static char mp_dir_path[UNIX_PATH_MAX]; /* The directory path for all mp sockets */ > static pthread_mutex_t mp_mutex_action = PTHREAD_MUTEX_INITIALIZER; > -static char peer_name[PATH_MAX]; > +static char peer_name[UNIX_PATH_MAX]; [ ... ] > -static void > -create_socket_path(const char *name, char *buf, int len) > +static int > +create_socket_path(const char *name, char *buf, size_t len) > { > const char *prefix = eal_mp_socket_path(); > > - if (strlen(name) > 0) > - snprintf(buf, len, "%s_%s", prefix, name); > - else > - strlcpy(buf, prefix, len); > + if (strlen(name) > 0) { > + if (snprintf(buf, len, "%s_%s", prefix, name) >= (int)len) > + return -1; > + } else { > + if (strlcpy(buf, prefix, len) >= len) > + return -1; > + } > + return 0; > } Does the create_socket_path function properly validate that prefix is not NULL before using it? The eal_mp_socket_path function returns a static buffer, but there's no null check here. [ ... ] > @@ -572,6 +576,11 @@ open_socket_fd(void) > snprintf(peer_name, sizeof(peer_name), > "%d_%"PRIx64, getpid(), rte_rdtsc()); > > + if (create_socket_path(peer_name, un.sun_path, sizeof(un.sun_path)) < 0) { > + EAL_LOG(ERR, "peer '%s' socket path too long", peer_name); > + return -1; > + } > + > mp_fd = socket(AF_UNIX, SOCK_DGRAM, 0); > if (mp_fd < 0) { > EAL_LOG(ERR, "failed to create unix socket"); Could this code leak the mp_fd if create_socket_path fails after the socket is created? The error path returns -1 without calling close on mp_fd. > @@ -581,8 +590,6 @@ open_socket_fd(void) > memset(&un, 0, sizeof(un)); > un.sun_family = AF_UNIX; > > - create_socket_path(peer_name, un.sun_path, sizeof(un.sun_path)); > - > unlink(un.sun_path); /* May still exist since last run */ [ ... ] > @@ -599,17 +606,20 @@ open_socket_fd(void) > static void > close_socket_fd(int fd) > { > - char path[PATH_MAX]; > + char path[UNIX_PATH_MAX]; > > close(fd); > - create_socket_path(peer_name, path, sizeof(path)); > - unlink(path); > + > + if (create_socket_path(peer_name, path, sizeof(path)) < 0) > + EAL_LOG(ERR, "file prefix path for peerr '%s' too long", peer_name); > + else > + unlink(path); > } There's a typo in the error message: "peerr" should be "peer". [ ... ] > diff --git a/lib/eal/common/eal_filesystem.h b/lib/eal/common/eal_filesystem.h > index 5d21f07c20..2de88d7cc2 100644 > --- a/lib/eal/common/eal_filesystem.h > +++ b/lib/eal/common/eal_filesystem.h > @@ -45,10 +45,21 @@ eal_runtime_config_path(void) > > /** Path of primary/secondary communication unix socket file. */ > #define MP_SOCKET_FNAME "mp_socket" > + > +#ifdef RTE_EXEC_ENV_WINDOWS > +#include > +#include > +#else > +#include > + > +/** Maximum length of unix domain socket path. */ > +#define UNIX_PATH_MAX (sizeof(((struct sockaddr_un *)0)->sun_path)) > +#endif > + > static inline const char * > eal_mp_socket_path(void) > { > - static char buffer[PATH_MAX]; /* static so auto-zeroed */ > + static char buffer[UNIX_PATH_MAX]; /* static so auto-zeroed */ > > snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), > MP_SOCKET_FNAME); What happens on Windows systems where UNIX_PATH_MAX isn't defined? The code includes Windows headers but doesn't define UNIX_PATH_MAX for that platform.