From patchwork Tue Mar 7 08:32:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: abushwang X-Patchwork-Id: 66065 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 13954385B522 for ; Tue, 7 Mar 2023 08:33:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 13954385B522 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678177988; bh=KQhQMi/H5YSgCbhroqvoX/EkxrWo+2mzBj26NP+qNHs=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=n+lfOokcyaxpZ6jlLgy6maEU8y3QuXn2CpMsq23CrX2XYXBp/j2YDk18te501rg1z x4hPfFj1KSpxnFIddt/0YrXxKr/n0MrLNzW8+HbL+ys6ahUVY/T9APqGrXRRA5HnJQ XpG3gO4MUyVw1hfrKyV1x3epZ6Wns27NkGGMgnis= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by sourceware.org (Postfix) with ESMTPS id 61CCA3858D39 for ; Tue, 7 Mar 2023 08:32:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 61CCA3858D39 Received: by mail-pj1-x1032.google.com with SMTP id qa18-20020a17090b4fd200b0023750b675f5so15800271pjb.3 for ; Tue, 07 Mar 2023 00:32:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678177955; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KQhQMi/H5YSgCbhroqvoX/EkxrWo+2mzBj26NP+qNHs=; b=eq/Y3uvodGwO5NuiYHhI5FVh9QEq7JIHBzxgwTbSVOnVut9e0M1+ei74/QnM4x8yON Fh5daNhIEDhqENGR6/ENVhyq3aq5p74j2XWZdqDsSISuM6qG2shv21AK/i3QEwY+AHKJ dk7OtyOv/opJBQy9gfYD2PZPSc38xp8LEkzvJpV18uPigxSCTglk/rfSHrAXrXOi1QF6 4U9tN2TKWIFAwx37jOBQJ5rwyvZKw2HKZy2GjNjIqWOV3WEUXAW3zEqeuNDOJ6pr/IVV LN4IEkfuOq37mujlpOM78+s3OWodLWJ3S/mWnRfMIBbcylcCWl8o7saNcQIuHuJX943o Bxcg== X-Gm-Message-State: AO0yUKUZn8GIPnHIsLiVvx7j7k+G16kIS9B7Wf9eKuhaWF5PkQ6K8xws BvgirV5N+fvkIPI74PJiNlkeBQsZbT+jJQ== X-Google-Smtp-Source: AK7set/vDsRFDSqs6HycmfxH6yA0yUzolkK0eqbKcElpQRzd6pAg5jFKvxbFu9cyDRy2Gn+xs70aig== X-Received: by 2002:a17:903:41c3:b0:19e:699e:9b64 with SMTP id u3-20020a17090341c300b0019e699e9b64mr18340407ple.65.1678177955276; Tue, 07 Mar 2023 00:32:35 -0800 (PST) Received: from localhost.localdomain ([43.132.141.9]) by smtp.gmail.com with ESMTPSA id x8-20020a1709027c0800b0019a70a85e8fsm7898816pll.220.2023.03.07.00.32.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Mar 2023 00:32:34 -0800 (PST) To: libc-alpha@sourceware.org, carlos@redhat.com Cc: abushwang Subject: [PATCH] rt: fix shm_open not set ENAMETOOLONG when name exceeds {_POSIX_PATH_MAX} Date: Tue, 7 Mar 2023 16:32:29 +0800 Message-Id: <20230307083229.629411-1-abushwangs@gmail.com> X-Mailer: git-send-email 2.36.1 MIME-Version: 1.0 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: abushwang via Libc-alpha From: abushwang Reply-To: abushwang Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" according to man-pages-posix-2017, shm_open() function may fail if the length of the name argument exceeds {_POSIX_PATH_MAX} and set ENAMETOOLONG Signed-off-by: abushwang --- posix/shm-directory.c | 5 ++++- rt/shm_open.c | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/posix/shm-directory.c b/posix/shm-directory.c index 86d9fd8e4f..93aaeb60a0 100644 --- a/posix/shm-directory.c +++ b/posix/shm-directory.c @@ -25,6 +25,7 @@ #include #include #include +#include int __shm_get_name (struct shmdir_name *result, const char *name, bool sem_prefix) @@ -50,13 +51,15 @@ __shm_get_name (struct shmdir_name *result, const char *name, bool sem_prefix) while (name[0] == '/') ++name; namelen = strlen (name); + if (namelen > NAME_MAX) + return ENAMETOOLONG; if (sem_prefix) alloc_buffer_copy_bytes (&buffer, "sem.", strlen ("sem.")); alloc_buffer_copy_bytes (&buffer, name, namelen + 1); if (namelen == 0 || memchr (name, '/', namelen) != NULL || alloc_buffer_has_failed (&buffer)) - return -1; + return EINVAL; return 0; } libc_hidden_def (__shm_get_name) diff --git a/rt/shm_open.c b/rt/shm_open.c index 6c1f4d604f..fc1dc96bb4 100644 --- a/rt/shm_open.c +++ b/rt/shm_open.c @@ -30,9 +30,10 @@ int __shm_open (const char *name, int oflag, mode_t mode) { struct shmdir_name dirname; - if (__shm_get_name (&dirname, name, false) != 0) + int ret =__shm_get_name (&dirname, name, false); + if (ret != 0) { - __set_errno (EINVAL); + __set_errno (ret); return -1; }