Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Aug 2015 07:29:58 +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: r286221 - head/sys/amd64/cloudabi64
Message-ID:  <201508030729.t737TwlP074814@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Mon Aug  3 07:29:57 2015
New Revision: 286221
URL: https://svnweb.freebsd.org/changeset/base/286221

Log:
  Set p_osrel to __FreeBSD_version on process startup.
  
  Certain system calls have quirks applied to make them work as if called
  on an older version of FreeBSD. As CloudABI executables don't have the
  FreeBSD OS release number in the ELF header, this value is set to zero,
  making the system calls fall back to typically historic, non-standard
  behaviour.
  
  Reviewed by:	kib

Modified:
  head/sys/amd64/cloudabi64/cloudabi64_sysvec.c

Modified: head/sys/amd64/cloudabi64/cloudabi64_sysvec.c
==============================================================================
--- head/sys/amd64/cloudabi64/cloudabi64_sysvec.c	Mon Aug  3 07:28:23 2015	(r286220)
+++ head/sys/amd64/cloudabi64/cloudabi64_sysvec.c	Mon Aug  3 07:29:57 2015	(r286221)
@@ -73,10 +73,20 @@ cloudabi64_fixup(register_t **stack_base
 {
 	char canarybuf[64];
 	Elf64_Auxargs *args;
+	struct thread *td;
 	void *argdata, *canary;
 	size_t argdatalen;
 	int error;
 
+	/*
+	 * CloudABI executables do not store the FreeBSD OS release
+	 * number in their header. Set the OS release number to the
+	 * latest version of FreeBSD, so that system calls behave as if
+	 * called natively.
+	 */
+	td = curthread;
+	td->td_proc->p_osrel = __FreeBSD_version;
+
 	/* Store canary for stack smashing protection. */
 	argdata = *stack_base;
 	arc4rand(canarybuf, sizeof(canarybuf), 0);
@@ -108,7 +118,7 @@ cloudabi64_fixup(register_t **stack_base
 		VAL(CLOUDABI_AT_PAGESZ, args->pagesz),
 		PTR(CLOUDABI_AT_PHDR, args->phdr),
 		VAL(CLOUDABI_AT_PHNUM, args->phnum),
-		VAL(CLOUDABI_AT_TID, curthread->td_tid),
+		VAL(CLOUDABI_AT_TID, td->td_tid),
 #undef VAL
 #undef PTR
 		{ .a_type = CLOUDABI_AT_NULL },



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