rpms/gtk-vnc/F-7 gtk-vnc-0.2.0-coroutine-caller.patch, NONE, 1.1 gtk-vnc-0.2.0-execmem.patch, NONE, 1.1 gtk-vnc.spec, 1.2, 1.3

Daniel P. Berrange (berrange) fedora-extras-commits at redhat.com
Fri Oct 5 02:01:02 UTC 2007


Author: berrange

Update of /cvs/pkgs/rpms/gtk-vnc/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv14715

Modified Files:
	gtk-vnc.spec 
Added Files:
	gtk-vnc-0.2.0-coroutine-caller.patch 
	gtk-vnc-0.2.0-execmem.patch 
Log Message:
Fixed mmap permissions & coroutine caller

gtk-vnc-0.2.0-coroutine-caller.patch:

--- NEW FILE gtk-vnc-0.2.0-coroutine-caller.patch ---
changeset:   76:949312711737
tag:         tip
user:        "Daniel P. Berrange <berrange at redhat.com>"
date:        Thu Oct 04 21:45:15 2007 -0400
files:       src/coroutine.c
description:
Fix to coroutine caller state management to avoid SEGV


diff -r ef58fe73ab0c -r 949312711737 src/coroutine.c
--- a/src/coroutine.c	Thu Oct 04 10:30:40 2007 -0300
+++ b/src/coroutine.c	Thu Oct 04 21:45:15 2007 -0400
@@ -11,6 +11,7 @@
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include "coroutine.h"
 
 int coroutine_release(struct coroutine *co)
@@ -57,25 +58,23 @@ int coroutine_init(struct coroutine *co)
 }
 
 #if 0
-static __thread struct coroutine system;
+static __thread struct coroutine leader;
 static __thread struct coroutine *current;
 #else
-static struct coroutine system;
+static struct coroutine leader;
 static struct coroutine *current;
 #endif
 
 struct coroutine *coroutine_self(void)
 {
 	if (current == NULL)
-		current = &system;
+		current = &leader;
 	return current;
 }
 
 void *coroutine_swap(struct coroutine *from, struct coroutine *to, void *arg)
 {
 	int ret;
-
-	to->caller = from;
 	to->data = arg;
 	current = to;
 	ret = cc_swap(&from->cc, &to->cc);
@@ -83,7 +82,7 @@ void *coroutine_swap(struct coroutine *f
 		return from->data;
 	else if (ret == 1) {
 		coroutine_release(to);
-		current = &system;
+		current = &leader;
 		to->exited = 1;
 		return to->data;
 	}
@@ -93,12 +92,23 @@ void *coroutine_swap(struct coroutine *f
 
 void *yieldto(struct coroutine *to, void *arg)
 {
+	if (to->caller) {
+		fprintf(stderr, "Co-routine is re-entering itself\n");
+		abort();
+	}
+	to->caller = coroutine_self();
 	return coroutine_swap(coroutine_self(), to, arg);
 }
 
 void *yield(void *arg)
 {
-	return yieldto(coroutine_self()->caller, arg);
+	struct coroutine *to = coroutine_self()->caller;
+	if (!to) {
+		fprintf(stderr, "Co-routine is yielding to no one\n");
+		abort();
+	}
+	coroutine_self()->caller = NULL;
+	return coroutine_swap(coroutine_self(), to, arg);
 }
 /*
  * Local variables:


gtk-vnc-0.2.0-execmem.patch:

--- NEW FILE gtk-vnc-0.2.0-execmem.patch ---
diff -rup gtk-vnc-0.2.0.orig/src/coroutine.c gtk-vnc-0.2.0.new/src/coroutine.c
--- gtk-vnc-0.2.0.orig/src/coroutine.c	2007-09-13 17:11:29.000000000 -0400
+++ gtk-vnc-0.2.0.new/src/coroutine.c	2007-09-26 15:48:23.000000000 -0400
@@ -44,8 +44,8 @@ int coroutine_init(struct coroutine *co)
 
 	co->cc.stack_size = co->stack_size;
 	co->cc.stack = mmap(0, co->stack_size,
-			    PROT_READ | PROT_WRITE | PROT_EXEC,
-			    MAP_SHARED | MAP_ANONYMOUS | MAP_GROWSDOWN,
+			    PROT_READ | PROT_WRITE,
+			    MAP_PRIVATE | MAP_ANONYMOUS,
 			    -1, 0);
 	if (co->cc.stack == MAP_FAILED)
 		return -1;


Index: gtk-vnc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gtk-vnc/F-7/gtk-vnc.spec,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- gtk-vnc.spec	14 Sep 2007 04:34:36 -0000	1.2
+++ gtk-vnc.spec	5 Oct 2007 02:00:29 -0000	1.3
@@ -3,10 +3,12 @@
 Summary: A GTK widget for VNC clients
 Name: gtk-vnc
 Version: 0.2.0
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: LGPLv2+
 Group: Development/Libraries
 Source: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
+Patch1: %{name}-%{version}-execmem.patch
+Patch2: %{name}-%{version}-coroutine-caller.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 URL: http://gtk-vnc.sf.net/
 BuildRequires: gtk2-devel pygtk2-devel python-devel gnutls-devel
@@ -41,6 +43,8 @@
 
 %prep
 %setup -q
+%patch1 -p1
+%patch2 -p1
 
 %build
 %configure
@@ -80,6 +84,10 @@
 %{_libdir}/python*/site-packages/gtkvnc.so
 
 %changelog
+* Thu Oct  4 2007 Daniel P. Berrange <berrange at redhat.com> - 0.2.0-2.fc7
+- Fixed coroutine caller to avoid SEGV
+- Remove use of PROT_EXEC for coroutine stack (rhbz #307531 )
+
 * Thu Sep 13 2007 Daniel P. Berrange <berrange at redhat.com> - 0.2.0-1.fc7
 - Update to 0.2.0 release
 




More information about the fedora-extras-commits mailing list