Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Mar 2020 15:52:34 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r358676 - head/sys/kern
Message-ID:  <202003051552.025FqYXc000436@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Thu Mar  5 15:52:34 2020
New Revision: 358676
URL: https://svnweb.freebsd.org/changeset/base/358676

Log:
  buffer pager: deref ucred immediately after read.
  
  Ucred is passed to bread(9) so that non-local filesystems use proper
  credentials.  But, since clean buffer might be cached unless
  buf_pager_relbuf is not enabled, it makes credentials to have extra
  reference until buffer is reclaimed.  Ucred reference would prevent
  jail from destroying if creds are jailed.
  
  Dereferencing the read credentials on the valid buffer avoid that, and
  should be fine because the buffer is valid and does not need re-read.
  
  PR:	238032
  Reported by:	bz
  Reproduced and tested by:	pho
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D23775

Modified:
  head/sys/kern/vfs_bio.c

Modified: head/sys/kern/vfs_bio.c
==============================================================================
--- head/sys/kern/vfs_bio.c	Thu Mar  5 15:51:44 2020	(r358675)
+++ head/sys/kern/vfs_bio.c	Thu Mar  5 15:52:34 2020	(r358676)
@@ -5187,6 +5187,10 @@ again:
 			    br_flags, &bp);
 			if (error != 0)
 				goto end_pages;
+			if (bp->b_rcred == curthread->td_ucred) {
+				crfree(bp->b_rcred);
+				bp->b_rcred = NOCRED;
+			}
 			if (LIST_EMPTY(&bp->b_dep)) {
 				/*
 				 * Invalidation clears m->valid, but



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202003051552.025FqYXc000436>