From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DF7F35F161 for ; Mon, 4 May 2026 21:34:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777930475; cv=none; b=L4isHYu8gVqQGMyNktU3qSDoxzd+cdieLDMfwQNdca858nNsVTuq1dhvilScJxAP4aeCA4/mX9suHwELB6eUSDv0AuRGg7wzcw7aCcCL0PEOK5cRi5mgSFCgRZpXNBdZTBedY05v3x9KwX51U08KHMaTyrmD6UnRwJTzQjsGhyg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777930475; c=relaxed/simple; bh=CA6FQk89TOA4baC96QtgPVdZS7dng4OcxdsdoWy3+g0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=RQwqlR6DISNLtmWEX9ZL7vcwliZip3KFwy+cUsHPproN2AM/sDA2nlXfH1TTMqUfCgxkbK1POlpBYIYU2UkGgdP9yMQ6GH9jEmfxp1F1/n1ToQCIXny3cU7vsm9hWVNPYEEqlNMutkhxohW9ihprb3jkazsMGybPCtkv2qS/hwA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dbx1ZakF; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dbx1ZakF" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-43d7b879691so302574f8f.1 for ; Mon, 04 May 2026 14:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777930472; x=1778535272; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=n+yOUy5o4tyUwA3ddWOnmqsznj/i+jEBSQPJyT11Cik=; b=dbx1ZakFMV7zayDwBQ2B8c2FMG3tTim2BgICV71DML8T5/VMBjIDaAfKXwbC18DyFm sdEdSFfPGCrDR/p7Oogdb+Py4e8QVOYsQsmkBdghHnmYINFVpp5B7EKGhUb/4AurSEkr IJ3mZUFsBIbg8T8fP9lCN43xUMNHJdPkd38x8qbTeZyV2gnQkcijQbK2H8a/qAFeVobf csdXC2vqV8lju9yggsRziebme8CYoP6uW/nSn/GJryG4057zZmhL8Hnrxw0pRF3jkza9 syu88EfSmt58MZQFqjbXFnfKhwT9T4Zmcl7rf9APgSQhU3BMss9gdsM9aXR2Y5jtcPtq LqNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777930472; x=1778535272; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=n+yOUy5o4tyUwA3ddWOnmqsznj/i+jEBSQPJyT11Cik=; b=KXq0Y0EXBjC0J92jyRwo77Il2GrCV0yLoNMUwFdh2c6BvHpQq2Rv4gP7qoMTfCP5T/ mQ7JaP5CcW+RRXGizn/NU6zHMSAatm/sBAujP474mXTa/sPA51fR9TYW5jlP+H+/n4+3 dOT/Qg0DWcWLk7aq4paJJBufWVoXbM5MoXMcxk224NVcklahN74A6zfwzVxPInx3bq1/ mE3L0GPr3CviPsfLkuJa4atd8Bab9pi//Y0IzF58KG5M2G+TlzE0RCv2yvQMtdXeUbis obh9Tds44zh5yL7BkUolUeFX9BrBuC+JvNZ5f9QKtoEHEtGLkchqFuzO2sdfcKpwtzl/ 5QxA== X-Forwarded-Encrypted: i=1; AFNElJ+14rbNspCGih/gmi7gUU1IqtwPlLzc3rvxEHjz5B0KH5JzkaMpU3MlPh+W4sRdyiRg6egP6/uapWFXA+c=@vger.kernel.org X-Gm-Message-State: AOJu0YyqWzPxnhstc+F+bZeiz5EVK9pXc+iBstfL4ZRtsW49nlpq7wx2 tuk1WKNcgrI+lTxLMTiUN8s7VLbhJRrfevusQ/R6pmKJrG4gqsdWp2T/ X-Gm-Gg: AeBDieshEsM+4NCJh+cpkMGf6BNYRXoLzfU9FVZVSaX5ucgu2gjWN5u1Kb6Wu9rIy6B jeq8ftosfhyzwM2MRvoMwcvIVkQeQPo/IQvnuSZkcogbZOVb89Wt45mju36k7oVV4a7mmsLOlA3 SpkR+CssExrJAQvAF9n5CV6IpLp2yGhGxCW6PS0Mw3F7jz2vlyJ68gQ0WaBjQHiE9Y97u3Iu+kv BguUexJ3mvNwc4hUF0ODHOcqWPmlguLFCkMg/zUsLYye2MME4TyrDM6WVPANKAPByquFUb5RyE1 t/xO0j2Ad7SZCoqtPg3j0So0vbAX99oFImEHUf7PqtTTOvG/XGtZTwHqBZkiqK6SnxLWjYfTplu fd5R2lH4WvglgXUW6HObvo+vE/FiFchBHweQ0zSf4Henk3SMsTlBduxHXtH6rjzKZ2CJ3ars0H8 uNXmpeJ/N3GS/yRT9QrifV X-Received: by 2002:a5d:628f:0:b0:446:8299:c109 with SMTP id ffacd0b85a97d-44bb6206f83mr5539654f8f.7.1777930471491; Mon, 04 May 2026 14:34:31 -0700 (PDT) Received: from lucas ([2a01:e0a:354:c290:234c:5dad:48b0:9188]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4502b38b5c9sm200274f8f.24.2026.05.04.14.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 14:34:31 -0700 (PDT) From: Lucas Poupeau To: acme@kernel.org, linux-gpio@vger.kernel.org Cc: m32285159@gmail.com, brgl@bgdev.pl, linux-kernel@vger.kernel.org, Lucas Poupeau Subject: [PATCH v2 2/2] tools: include: add proper strscpy() declaration Date: Mon, 4 May 2026 23:34:29 +0200 Message-ID: <20260504213429.64596-1-lucasp.linux@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Currently, strscpy() is defined as a macro for strcpy() in the tools headers. This is unsafe and prevents using the real strscpy() logic that provides better buffer overflow protection. Remove the macro hack and add a proper extern declaration for strscpy(). This allows tools to use the safer string copying API once the implementation is provided. Suggested-by: Maxwell Doose Signed-off-by: Lucas Poupeau --- tools/include/linux/string.h | 5 ++++- tools/lib/string.c | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/tools/include/linux/string.h b/tools/include/linux/string.h index 51ad3cf4fa82..4f3547d0cd84 100644 --- a/tools/include/linux/string.h +++ b/tools/include/linux/string.h @@ -12,7 +12,6 @@ void argv_free(char **argv); int strtobool(const char *s, bool *res); -#define strscpy strcpy /* * glibc based builds needs the extern while uClibc doesn't. @@ -30,6 +29,10 @@ extern size_t strlcpy(char *dest, const char *src, size_t size); #endif #endif +extern ssize_t strscpy(char *dest, const char *src, size_t count); + +char *str_error_r(int errnum, char *buf, size_t buflen); + char *str_error_r(int errnum, char *buf, size_t buflen); char *strreplace(char *s, char old, char new); diff --git a/tools/lib/string.c b/tools/lib/string.c index 3126d2cff716..12fabbe583cf 100644 --- a/tools/lib/string.c +++ b/tools/lib/string.c @@ -36,6 +36,43 @@ void *memdup(const void *src, size_t len) return p; } +/** + * strscpy - Copy a C-string into a sized buffer + * @dest: Where to copy the string to + * @src: Where to copy the string from + * @count: Size of destination buffer + * + * Copy the source string to the destination buffer. The result is + * always a valid NUL-terminated string that fits in the buffer. + * + * Return: + * * The number of characters copied (not including the trailing NUL) + * * -E2BIG if count is 0 or @src was truncated. + */ +ssize_t strscpy(char *dest, const char *src, size_t count) +{ + size_t res = 0; + + if (count == 0) + return -E2BIG; + + while (count) { + char c = src[res]; + + dest[res] = c; + if (!c) + return res; + res++; + count--; + } + + /* Hit buffer length without finding a NUL; force NUL-termination. */ + if (res) + dest[res-1] = '\0'; + + return -E2BIG; +} + /** * strtobool - convert common user inputs into boolean values * @s: input string -- 2.54.0