From nobody Mon Mar 14 14:11:20 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id F22511A1EDA4; Mon, 14 Mar 2022 14:11:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KHJP45NVfz3LCs; Mon, 14 Mar 2022 14:11:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1647267080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OexkPUtAWPoCv7h7DEXxWlyyuOeogDZWVX+LXT1c/Nk=; b=F14ECsZA3qyDEpc1zR9gsM74KECvHNZwC5Qj7148RGSTAcfAPX4iDk062lP6l9ravwFSrN UCBQ6TtKExcUDQVC5Lyw3YwTVU56aPAdRvC2JGUidD6NzXnT33mwKIohmYRgTIKcLPHZmv 7nRxJdBTG3+N+JILujgBfyhPBX4zV1DFk1AqhB53dR9BS7/5KoXgot6hhREi9GyNzmsyJo 1Q2OSHK4GZUhLwHx/ZR04cV6/WuiapVeOeopxUVl9Qns28PNdWEIzIqJ1Lroni/5/G6CNQ xYm3g23Lc/3J/IxA+uiKm7TngRWXrzAE+eHayWW4j53yw+acekkYb8eF2FytTA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 95FF76D94; Mon, 14 Mar 2022 14:11:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 22EEBKxA008902; Mon, 14 Mar 2022 14:11:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 22EEBKlq008901; Mon, 14 Mar 2022 14:11:20 GMT (envelope-from git) Date: Mon, 14 Mar 2022 14:11:20 GMT Message-Id: <202203141411.22EEBKlq008901@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 647f02d68a60 - stable/13 - libc __sfvwrite(): roll back FILE buffer pointer on fflush error List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 647f02d68a60b66d063a15feed3c817966114d52 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1647267080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OexkPUtAWPoCv7h7DEXxWlyyuOeogDZWVX+LXT1c/Nk=; b=d/ltmO/0mk+4yoZpOwAteX1PhtHqeQienxqEOpSYTQ3ydopOn2mpN6yo3oap6XLdedI8KX IeBRZmhejvNGRGaJCqHhz0gaOGZUyQnDVDY6c2qPWdVMGGJbTT3/10LtCyt9sJvFkREY+d zkSAxJ40yIQ7i8TlK9q64Rrn3gdBytiKegQPm980liLWbtluNDZXqFRAMomd1uYw3ADEbm +43RHfcHgBX3yYqeCezl1IEeOndnY/fUh4LqXjhozql5fZfYLZIUdmbZ41a1lUMEyIY6Xb xJJtEr7ZkcgxsT7zb0bYCTt+9jyqxCNVzkOhc6NqF8bN5Lkpa2M4hZ7xPGxC9w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1647267080; a=rsa-sha256; cv=none; b=Gj9Gb6UGCQKpMaGWf6ZzBt5jABz7vfT8+WyJolkQu+uU/gX5d3RttzCj986mcO81VfIgW4 XHQA8l9PofdTD1eYW1IpRvUTovKEy/wwJX7Tc5Tjd8OJO+Ee8g5j9o6GYcZNogj3VGeCgw R4bggWCKYoObqoS/OnJhPLw+CyrVQBCQ9PPaNkeQU71q3Exiu1JkYNEy0oEnbdiMoslzzE hwDGPqK4y6jHFfZxIEGASLtKkdjpwtKxYUb+idSBA5msjDEMzum5Aq212++e2x1PcQ+Cz3 P7k+pVVRaR155QW1UL4WtRuRPigPZD1AZx7CHR+ialPLBLg1X1Ep7HVj1FEopg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=647f02d68a60b66d063a15feed3c817966114d52 commit 647f02d68a60b66d063a15feed3c817966114d52 Author: Konstantin Belousov AuthorDate: 2022-03-06 08:59:39 +0000 Commit: Mark Johnston CommitDate: 2022-03-14 14:10:37 +0000 libc __sfvwrite(): roll back FILE buffer pointer on fflush error __sfvwrite() advances the pointer before calling fflush. If fflush() fails, it is not enough to roll back inside it, because we cannot know how much was advanced by the caller. Reported by: Peter Reviewed by: markj Sponsored by: The FreeBSD Foundation Fixes: 86a16ada1ea608408cec370171d9f59353e97c77 (cherry picked from commit bafaa70b6f9098d83d074968c8e6747ecec1e118) --- lib/libc/stdio/fvwrite.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c index 50b32b8eca6e..2a161859afa9 100644 --- a/lib/libc/stdio/fvwrite.c +++ b/lib/libc/stdio/fvwrite.c @@ -54,6 +54,7 @@ int __sfvwrite(FILE *fp, struct __suio *uio) { size_t len; + unsigned char *old_p; char *p; struct __siov *iov; int w, s; @@ -137,8 +138,12 @@ __sfvwrite(FILE *fp, struct __suio *uio) COPY(w); /* fp->_w -= w; */ /* unneeded */ fp->_p += w; - if (__fflush(fp)) + old_p = fp->_p; + if (__fflush(fp) == EOF) { + if (old_p == fp->_p) + fp->_p -= w; goto err; + } } else if (len >= (w = fp->_bf._size)) { /* write directly */ w = _swrite(fp, p, w); @@ -177,8 +182,12 @@ __sfvwrite(FILE *fp, struct __suio *uio) COPY(w); /* fp->_w -= w; */ fp->_p += w; - if (__fflush(fp)) + old_p = fp->_p; + if (__fflush(fp) == EOF) { + if (old_p == fp->_p) + fp->_p -= w; goto err; + } } else if (s >= (w = fp->_bf._size)) { w = _swrite(fp, p, w); if (w <= 0)