From nobody Sun Mar 06 15:43:49 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 A440B1A0EDED; Sun, 6 Mar 2022 15:43:49 +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 4KBQqT2pz4z3qxQ; Sun, 6 Mar 2022 15:43:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646581429; 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=LOa5bsJvLfqRbe2Ie2nVV0HSa7qdBk+S9Ql2quO8x9U=; b=aCTmvqHv0dTwzWnOww/iFlpRvg5eXDnR0gDrCxiM8PLfoiw7MVK0SAQ4pNFv9D4TFbb3h6 8Qyq64+RsJPgolkOgPdxe31ruhahpbIsqwYJooQvxsJ59RPz/l/8nOo8HHdCpW+T7GP+2/ Gc5GKUSrF9JC8gEO0LhCGff4+zU2lqWDxPU1lizrjZfMW+ZEPHaZqMf0Q1ZMNx8m7XCX0G SrPpVwAq1RXxyKoHsDuy2mxe4rW9uKeZHnccmDqWfhGfDgRPynuGwBv6kHpeO/JnKH5CVS YRmL9tvb4jqJ5VkkOy9sz3+N3qLvvoS7Md49ZRtf3bzpogNCOO8mMY1G+eCWeg== 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 1BF1016F7F; Sun, 6 Mar 2022 15:43:49 +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 226Fhncd011498; Sun, 6 Mar 2022 15:43:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 226Fhns7011497; Sun, 6 Mar 2022 15:43:49 GMT (envelope-from git) Date: Sun, 6 Mar 2022 15:43:49 GMT Message-Id: <202203061543.226Fhns7011497@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: bafaa70b6f90 - main - 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/main X-Git-Reftype: branch X-Git-Commit: bafaa70b6f9098d83d074968c8e6747ecec1e118 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1646581429; 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=LOa5bsJvLfqRbe2Ie2nVV0HSa7qdBk+S9Ql2quO8x9U=; b=DwVjr2PrgiJiw2BU51bagYsUjYUjqloIfe9DMIBAlQRb0fSTgpEYjRh9cvMgZ65XS6tIlD a4qrfrN1Ze8icknc/3Q2SYbTCBBq4uORK+ZLHlvHu3wZl6zbjZrDn4mPoNUj6HaLpMc2/2 6jbs6NuD1MSNYMzBk19rAl7F5yF2cVog6rGCrBCoiqaCHVQELOzE28p1C1EIJYmAA8HvhG IAHWjh2us9YzRjDVyS/TDpKBoZPN0hyDKdOAtSDuv0A08j+aysc/W9xSlViFlg0lghhTkL HdlLOw9gltqlGjMhJTq72HCG5jJ2mq45xTHqC85IFb9aQN9fhMoMy31vVaSHDQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1646581429; a=rsa-sha256; cv=none; b=nU+QQcn6ndlXCP+I5ChNFHx+OqzAN4JlU+TMSnuMmz/x8P3qOVFj38e4TTYGgaMs5Wcpmb cM2sRNI+y93gQLJIW3UAtEGGUhljRKAWDRB5JTq/TYSgQYTmgxYkUy21+wKJ3PYLqwUu8A V08DUAgL+HESyTesCG4TlDlkSeg4Ba2fxn7YYahmkSDHO1BsI5lqHMLq6KYv0PRFb8hm4q aI8zlj/5mH2ca2R1e7SxgdHvlLFkPR99ZzFGStbfxO340dIu8UlFlGz8b7Zujx0pl97O5s S/KsjOv/tPU2rm81Z6+VO7PkQv+87QPBp5ab0CubdvhAQqICAQzMyfdMKtRqyQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=bafaa70b6f9098d83d074968c8e6747ecec1e118 commit bafaa70b6f9098d83d074968c8e6747ecec1e118 Author: Konstantin Belousov AuthorDate: 2022-03-06 08:59:39 +0000 Commit: Mark Johnston CommitDate: 2022-03-06 15:29:51 +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 MFC after: 1 week Fixes: 86a16ada1ea608408cec370171d9f59353e97c77 --- 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)