svn commit: r217991 - head/sys/amd64/linux32

Konstantin Belousov kib at FreeBSD.org
Thu Jan 27 21:45:39 UTC 2011


Author: kib
Date: Thu Jan 27 21:45:38 2011
New Revision: 217991
URL: http://svn.freebsd.org/changeset/base/217991

Log:
  linux_sigreturn() loads the struct trapframe from l_sigcontext
  members, thus making a signed extension of 32 bit register
  context. If the register is not touched in usermode between
  return from signal and next syscall entry, the sign-extension
  part of 64bit register is not cleared, causing
  linux32_fetch_syscall_args() to read wrong values.
  
  Use unsigned type for the registers in the linux sigcontext.
  
  Reported by:	Jacob Frelinger <jacob.frelinger duke edu>, arundel
  In collaboration with:	dchagin
  MFC after:	1 week

Modified:
  head/sys/amd64/linux32/linux.h

Modified: head/sys/amd64/linux32/linux.h
==============================================================================
--- head/sys/amd64/linux32/linux.h	Thu Jan 27 21:41:27 2011	(r217990)
+++ head/sys/amd64/linux32/linux.h	Thu Jan 27 21:45:38 2011	(r217991)
@@ -370,28 +370,28 @@ typedef struct {
 
 /* The Linux sigcontext, pretty much a standard 386 trapframe. */
 struct l_sigcontext {
-	l_int		sc_gs;
-	l_int		sc_fs;
-	l_int		sc_es;
-	l_int		sc_ds;
-	l_int		sc_edi;
-	l_int		sc_esi;
-	l_int		sc_ebp;
-	l_int		sc_esp;
-	l_int		sc_ebx;
-	l_int		sc_edx;
-	l_int		sc_ecx;
-	l_int		sc_eax;
-	l_int		sc_trapno;
-	l_int		sc_err;
-	l_int		sc_eip;
-	l_int		sc_cs;
-	l_int		sc_eflags;
-	l_int		sc_esp_at_signal;
-	l_int		sc_ss;
-	l_int		sc_387;
-	l_int		sc_mask;
-	l_int		sc_cr2;
+	l_uint		sc_gs;
+	l_uint		sc_fs;
+	l_uint		sc_es;
+	l_uint		sc_ds;
+	l_uint		sc_edi;
+	l_uint		sc_esi;
+	l_uint		sc_ebp;
+	l_uint		sc_esp;
+	l_uint		sc_ebx;
+	l_uint		sc_edx;
+	l_uint		sc_ecx;
+	l_uint		sc_eax;
+	l_uint		sc_trapno;
+	l_uint		sc_err;
+	l_uint		sc_eip;
+	l_uint		sc_cs;
+	l_uint		sc_eflags;
+	l_uint		sc_esp_at_signal;
+	l_uint		sc_ss;
+	l_uint		sc_387;
+	l_uint		sc_mask;
+	l_uint		sc_cr2;
 } __packed;
 
 struct l_ucontext {


More information about the svn-src-all mailing list