From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1039) id 83642385F009; Mon, 27 May 2024 14:42:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 83642385F009 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1716820925; bh=eAC4GW1DsmZDM0aAHbDNhDoZXe7aVsh9PPatWqNkGG4=; h=From:To:Subject:Date:From; b=W5t0YsGxu96D6f+DMkxS8bmMLqjVRQVALq2x1o16aAd1isxIpO87TFCVHL1QJwmEo erYKQWhPqM5ItQKbVrNLt0XRDMCgGGBe6/Rv7IQ9r8Jz0VrASFdne11sWXofpxvFDL cTbT0NVqb4UNbFq0QdtzgF2QDR0PJhGaIYi86tqE= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: H.J. Lu To: glibc-cvs@sourceware.org Subject: [glibc/release/2.39/master] parse_fdinfo: Don't advance pointer twice [BZ #31798] X-Act-Checkin: glibc X-Git-Author: H.J. Lu X-Git-Refname: refs/heads/release/2.39/master X-Git-Oldrev: c7c3f5bf80ae86b34501f473f1a9fc545c911b7f X-Git-Newrev: 9f2b100d6705b9bbb25206b53e80d7759644e06e Message-Id: <20240527144205.83642385F009@sourceware.org> Date: Mon, 27 May 2024 14:42:05 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9f2b100d6705b9bbb25206b53e80d7759644e06e commit 9f2b100d6705b9bbb25206b53e80d7759644e06e Author: H.J. Lu Date: Sat May 25 05:13:41 2024 -0700 parse_fdinfo: Don't advance pointer twice [BZ #31798] pidfd_getpid.c has /* Ignore invalid large values. */ if (INT_MULTIPLY_WRAPV (10, n, &n) || INT_ADD_WRAPV (n, *l++ - '0', &n)) return -1; For GCC older than GCC 7, INT_ADD_WRAPV(a, b, r) is defined as _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) and *l++ - '0' is evaluated twice. Fix BZ #31798 by moving "l++" out of the if statement. Tested with GCC 6.4 and GCC 14.1. Signed-off-by: H.J. Lu Reviewed-by: Adhemerval Zanella (cherry picked from commit f981bf6b9db87e0732b46bfe92fdad4d363225e8) Diff: --- sysdeps/unix/sysv/linux/pidfd_getpid.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/sysv/linux/pidfd_getpid.c b/sysdeps/unix/sysv/linux/pidfd_getpid.c index 8567b413dd..30025e5863 100644 --- a/sysdeps/unix/sysv/linux/pidfd_getpid.c +++ b/sysdeps/unix/sysv/linux/pidfd_getpid.c @@ -74,8 +74,10 @@ parse_fdinfo (const char *l, void *arg) /* Ignore invalid large values. */ if (INT_MULTIPLY_WRAPV (10, n, &n) - || INT_ADD_WRAPV (n, *l++ - '0', &n)) + || INT_ADD_WRAPV (n, *l - '0', &n)) return -1; + + l++; } /* -1 indicates that the process is terminated. */