Bug#493168: gpm: Segfaults on boot.
Samuel Thibault
samuel.thibault at ens-lyon.org
Tue Oct 7 21:15:56 UTC 2008
tags 493168 + patch
thanks
Hello,
Nico Schottelius, le Wed 06 Aug 2008 10:31:50 +0200, a écrit :
> I'll backport the fix to 1.20.x and make a new release soon.
> As soon as the compile error on 64 Bit Linux is fixed, there
> will also be a new 1.99.x release.
Here is a packport of the patch. Kurt, could you test it?
Nico, note that I actually had to fix your patch: it was
letting applications connect to vc MAX_NR_CONSOLES (the check
was request->vc>MAX_NR_CONSOLES), while the array is only
0..MAX_NR_CONSOLES-1. Since VT number MAX_NR_CONSOLES indeed does
exist, I've extended the array to 0..MAX_NR_CONSOLES and fixed the for
loops accordingly.
Samuel
-------------- next part --------------
diff -ur gpm-1.20.4-orig/src/daemon/gpm.c gpm-1.20.4/src/daemon/gpm.c
--- gpm-1.20.4-orig/src/daemon/gpm.c 2008-05-29 01:26:08.000000000 +0200
+++ gpm-1.20.4/src/daemon/gpm.c 2008-10-07 23:13:45.000000000 +0200
@@ -98,7 +98,7 @@
int fifofd=-1;
int eventFlag=0;
-Gpm_Cinfo *cinfo[MAX_VC+1];
+Gpm_Cinfo *cinfo[MAX_NR_CONSOLES+1];
time_t last_selection_time;
time_t opt_age_limit = 0;
diff -ur gpm-1.20.4-orig/src/daemon/old_main.c gpm-1.20.4/src/daemon/old_main.c
--- gpm-1.20.4-orig/src/daemon/old_main.c 2008-10-07 22:36:19.000000000 +0200
+++ gpm-1.20.4/src/daemon/old_main.c 2008-10-07 23:14:01.000000000 +0200
@@ -141,7 +141,7 @@
signal(SIGWINCH,gpm_killed); /* reinstall handler */
/* and notify clients */
- for(i=0; i<MAX_VC+1; i++) {
+ for(i=0; i<=MAX_NR_CONSOLES; i++) {
Gpm_Cinfo *ci;
for (ci = cinfo[i]; ci; ci = ci->next) kill(ci->data.pid,SIGWINCH);
}
@@ -214,7 +214,7 @@
/*........................ got request */
/* itz 10-22-96 check _all_ clients, not just those on top! */
- for (i=0; pending && (i<=MAX_VC); i++) {
+ for (i=0; pending && (i<=MAX_NR_CONSOLES); i++) {
Gpm_Cinfo* ci;
for (ci = cinfo[i]; pending && ci; ci = ci->next) {
if (FD_ISSET(ci->fd,&selSet)) {
diff -ur gpm-1.20.4-orig/src/daemon/processconn.c gpm-1.20.4/src/daemon/processconn.c
--- gpm-1.20.4-orig/src/daemon/processconn.c 2008-05-29 01:26:09.000000000 +0200
+++ gpm-1.20.4/src/daemon/processconn.c 2008-10-07 23:07:53.000000000 +0200
@@ -70,8 +70,8 @@
return -1;
}
- if ((vc=request->vc)>MAX_VC) {
- gpm_report(GPM_PR_DEBUG, GPM_MESS_REQUEST_ON, vc, MAX_VC);
+ if ((vc=request->vc)>MAX_NR_CONSOLES) {
+ gpm_report(GPM_PR_DEBUG, GPM_MESS_REQUEST_ON, vc, MAX_NR_CONSOLES);
free(info);
close(newfd);
return -1;
diff -ur gpm-1.20.4-orig/src/daemon/processrequest.c gpm-1.20.4/src/daemon/processrequest.c
--- gpm-1.20.4-orig/src/daemon/processrequest.c 2008-05-29 01:26:09.000000000 +0200
+++ gpm-1.20.4/src/daemon/processrequest.c 2008-10-07 23:08:49.000000000 +0200
@@ -41,7 +41,7 @@
gpm_report(GPM_PR_INFO, GPM_MESS_CON_REQUEST, ci->fd, vc);
- if (vc>MAX_VC) return -1;
+ if (vc>MAX_NR_CONSOLES) return -1;
/* itz 10-22-96 this shouldn't happen now */
if (vc==-1) gpm_report(GPM_PR_OOPS, GPM_MESS_UNKNOWN_FD);
Seulement dans gpm-1.20.4/src/headers: config.h
diff -ur gpm-1.20.4-orig/src/headers/daemon.h gpm-1.20.4/src/headers/daemon.h
--- gpm-1.20.4-orig/src/headers/daemon.h 2008-10-07 22:36:19.000000000 +0200
+++ gpm-1.20.4/src/headers/daemon.h 2008-10-07 23:14:01.000000000 +0200
@@ -26,6 +26,7 @@
*/
#include "gpm.h" /* Gpm_Event */
#include <sys/select.h> /* fd_set */
+#include <linux/vt.h> /* for cinfo -- to be moved to os/linux in 2.x! */
/*************************************************************************
* Types / structures
@@ -102,13 +103,6 @@
* Macros
*/
-/* How many virtual consoles are managed? */
-#ifndef MAX_NR_CONSOLES
-# define MAX_NR_CONSOLES 64 /* this is always sure */
-#endif
-
-#define MAX_VC MAX_NR_CONSOLES /* doesn't work before 1.3.77 */
-
/* for adding a mouse; add_mouse */
#define GPM_ADD_DEVICE 0
#define GPM_ADD_TYPE 1
@@ -172,7 +166,7 @@
extern int eventFlag;
extern struct winsize win;
-extern Gpm_Cinfo *cinfo[MAX_VC+1];
+extern Gpm_Cinfo *cinfo[MAX_NR_CONSOLES+1];
extern struct mouse_features mouse_table[3],
*which_mouse; /*the current one*/
diff -ur gpm-1.20.4-orig/src/headers/gpmCfg.h gpm-1.20.4/src/headers/gpmCfg.h
--- gpm-1.20.4-orig/src/headers/gpmCfg.h 2008-05-29 01:26:09.000000000 +0200
+++ gpm-1.20.4/src/headers/gpmCfg.h 2008-10-07 23:03:10.000000000 +0200
@@ -32,14 +32,6 @@
#include <linux/tty.h>
#endif
-/* FIXME: still needed ?? */
-/* How many virtual consoles are managed? */
-#ifndef MAX_NR_CONSOLES
-# define MAX_NR_CONSOLES 64 /* this is always sure */
-#endif
-
-#define MAX_VC MAX_NR_CONSOLES /* doesn't work before 1.3.77 */
-
/* How many buttons may the mouse have? */
/* #define MAX_BUTTONS 3 ===> not used, it is hardwired :-( */
Seulement dans gpm-1.20.4-orig/src/headers: .gpm.h.swp
Seulement dans gpm-1.20.4/src: Makefile
More information about the pkg-gpm-devel
mailing list