Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Aug 2015 06:01:14 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r286277 - head/sys/kern
Message-ID:  <201508040601.t7461EQG030676@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Tue Aug  4 06:01:13 2015
New Revision: 286277
URL: https://svnweb.freebsd.org/changeset/base/286277

Log:
  Fix bad arithmetic in umtx_key_get() to compute object offset.
  
  It looks like umtx_key_get() has the addition and subtraction the wrong
  way around, meaning that it fails to match in certain cases. This causes
  the cloudlibc unit tests to deadlock in certain cases.
  
  Reviewed by:	kib
  Differential Revision:	https://reviews.freebsd.org/D3287

Modified:
  head/sys/kern/kern_umtx.c

Modified: head/sys/kern/kern_umtx.c
==============================================================================
--- head/sys/kern/kern_umtx.c	Tue Aug  4 05:18:24 2015	(r286276)
+++ head/sys/kern/kern_umtx.c	Tue Aug  4 06:01:13 2015	(r286277)
@@ -820,8 +820,8 @@ umtx_key_get(const void *addr, int type,
 		    (share == AUTO_SHARE &&
 		     VM_INHERIT_SHARE == entry->inheritance)) {
 			key->shared = 1;
-			key->info.shared.offset = entry->offset + entry->start -
-				(vm_offset_t)addr;
+			key->info.shared.offset = (vm_offset_t)addr -
+			    entry->start + entry->offset;
 			vm_object_reference(key->info.shared.object);
 		} else {
 			key->shared = 0;



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