svn commit: r358676 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Thu Mar 5 15:52:35 UTC 2020


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


More information about the svn-src-head mailing list