OBS User unknown 2007-11-28 22:55:17 +00:00 committed by Git OBS Bridge
parent d9bd344587
commit 831e6c1707
7 changed files with 190 additions and 1 deletions

53
commit-184e571.diff Normal file
View File

@ -0,0 +1,53 @@
commit 184e571957f697f2a125dc9c9da0c7dfb92c2cd9
Author: Matthias Hopf <mhopf@suse.de>
Date: Tue Nov 20 13:05:26 2007 +0100
Adjust offsets of modes that do not fit virtual screen size.
Fixes memory corruption if a too small "Virtual" was specified in xorg.conf
for the selected multi-monitor configuration.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 653042c..760a498 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -260,6 +260,30 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
crtc->y = y;
crtc->rotation = rotation;
+ /* Shift offsets that move us out of virtual size */
+ if (x + mode->HDisplay > xf86_config->maxWidth ||
+ y + mode->VDisplay > xf86_config->maxHeight)
+ {
+ if (x + mode->HDisplay > xf86_config->maxWidth)
+ crtc->x = xf86_config->maxWidth - mode->HDisplay;
+ if (y + mode->VDisplay > xf86_config->maxHeight)
+ crtc->y = xf86_config->maxHeight - mode->VDisplay;
+ if (crtc->x < 0 || crtc->y < 0)
+ {
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
+ "Mode %dx%d does not fit virtual size %dx%d - "
+ "internal error\n", mode->HDisplay, mode->VDisplay,
+ xf86_config->maxWidth, xf86_config->maxHeight);
+ goto done;
+ }
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
+ "Mode %dx%d+%d+%d does not fit virtual size %dx%d - "
+ "offset updated to +%d+%d\n",
+ mode->HDisplay, mode->VDisplay, x, y,
+ xf86_config->maxWidth, xf86_config->maxHeight,
+ crtc->x, crtc->y);
+ }
+
/* XXX short-circuit changes to base location only */
/* Pass our mode to the outputs and the CRTC to give them a chance to
@@ -301,7 +325,7 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
/* Set up the DPLL and any output state that needs to adjust or depend
* on the DPLL.
*/
- crtc->funcs->mode_set(crtc, mode, adjusted_mode, x, y);
+ crtc->funcs->mode_set(crtc, mode, adjusted_mode, crtc->x, crtc->y);
for (i = 0; i < xf86_config->num_output; i++)
{
xf86OutputPtr output = xf86_config->output[i];

25
commit-c6c284e.diff Normal file
View File

@ -0,0 +1,25 @@
commit c6c284e64b1f537a3243856cf78cf3f2324e4c2b
Author: Matthias Hopf <mhopf@suse.de>
Date: Mon Nov 26 15:38:20 2007 +0100
Initialize Mode with 0 in xf86RandRModeConvert.
Asking for trouble if non-initialized values contain random data.
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index c1a06b2..61a7db3 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -683,11 +683,8 @@ xf86RandRModeConvert (ScrnInfoPtr scrn,
RRModePtr randr_mode,
DisplayModePtr mode)
{
- mode->prev = NULL;
- mode->next = NULL;
- mode->name = NULL;
+ memset(mode, 0, sizeof(DisplayModeRec));
mode->status = MODE_OK;
- mode->type = 0;
mode->Clock = randr_mode->mode.dotClock / 1000;

27
commit-f6401f9.diff Normal file
View File

@ -0,0 +1,27 @@
commit f6401f944d327cc5d9a7ee0bbdf4f7fc8eaa31e8
Author: Matthias Hopf <mhopf@suse.de>
Date: Fri Nov 23 16:12:49 2007 +0100
Don't segfault if referring to a relative output where no modes survived.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 5a1ed8c..8595d96 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1079,6 +1079,16 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
any_set = TRUE;
continue;
}
+ if (!modes[or])
+ {
+ xf86DrvMsg (scrn->scrnIndex, X_ERROR,
+ "Cannot position output %s relative to output %s without modes\n",
+ output->name, relative_name);
+ output->initial_x = 0;
+ output->initial_y = 0;
+ any_set = TRUE;
+ continue;
+ }
if (relative->initial_x == POSITION_UNSET)
{
keep_going = TRUE;

24
commit-f7dd0c7.diff Normal file
View File

@ -0,0 +1,24 @@
commit f7dd0c72b8f861f4d5443a43d1013e3fe3db43ca
Author: Matthias Hopf <mhopf@suse.de>
Date: Mon Nov 12 15:11:03 2007 +0100
Only clear crtc of output if it is the one we're actually working on.
Upon recreation of the RandR internal data structures in RRCrtcNotify() the
crtc of an output could be NULLed if the crtc was shared (cloned) between two
outputs and one of them got another crtc assigned.
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index db5007e..43cfb29 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -150,7 +150,8 @@ RRCrtcNotify (RRCrtcPtr crtc,
break;
if (i == numOutputs)
{
- crtc->outputs[j]->crtc = NULL;
+ if (crtc->outputs[j]->crtc == crtc)
+ crtc->outputs[j]->crtc = NULL;
RROutputChanged (crtc->outputs[j], FALSE);
RRCrtcChanged (crtc, FALSE);
}

23
commit-fa19e84.diff Normal file
View File

@ -0,0 +1,23 @@
commit fa19e84714aa84a2f2e817e363d6440349d0b619
Author: Matthias Hopf <mhopf@suse.de>
Date: Tue Nov 20 16:54:50 2007 +0100
Fix initial placement of LeftOf and Above.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 760a498..5a1ed8c 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1094,10 +1094,10 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
output->initial_x += xf86ModeWidth (modes[or], relative->initial_rotation);
break;
case OPTION_ABOVE:
- output->initial_y -= xf86ModeHeight (modes[or], relative->initial_rotation);
+ output->initial_y -= xf86ModeHeight (modes[o], relative->initial_rotation);
break;
case OPTION_LEFT_OF:
- output->initial_x -= xf86ModeWidth (modes[or], relative->initial_rotation);
+ output->initial_x -= xf86ModeWidth (modes[o], relative->initial_rotation);
break;
default:
break;

View File

@ -1,3 +1,17 @@
-------------------------------------------------------------------
Tue Nov 27 19:03:27 CET 2007 - sndirsch@suse.de
- commit-184e571.diff
* Adjust offsets of modes that do not fit virtual screen size.
- commit-c6c284e.diff
* Initialize Mode with 0 in xf86RandRModeConvert.
- commit-f6401f9.diff
* Don't segfault if referring to a relative output where no modes survived.
- commit-f7dd0c7.diff
* Only clear crtc of output if it is the one we're actually working on.
- commit-fa19e84.diff
* Fix initial placement of LeftOf and Above.
-------------------------------------------------------------------
Thu Nov 22 23:01:03 CET 2007 - sndirsch@suse.de

View File

@ -21,7 +21,7 @@ BuildRequires: libjpeg-devel
Url: http://xorg.freedesktop.org/
%define EXPERIMENTAL 0
Version: 7.3
Release: 31
Release: 34
License: X11/MIT
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Group: System/X11/Servers/XF86_4
@ -71,6 +71,8 @@ Patch32: acpi_events.diff
Patch34: p_pci-off-by-one.diff.ia64
Patch36: libdrm.diff
%if %vnc
### Dan Nicholson <dbn.lists@gmail.com>
#http://www.linuxfromscratch.org/~dnicholson/patches/xorg-server-1.4-vnc.patch
Patch39: xorg-server-1.4-vnc.patch
Patch40: xorg-server-1.4-vnc-fix.patch
Patch43: xorg-server-1.4-vnc-64bit.diff
@ -89,6 +91,11 @@ Patch83: ia64linuxPciInit.diff
Patch84: commit-feac075.diff
Patch85: commit-29e0e18.diff
Patch86: mfb_without_xorg.diff
Patch87: commit-c6c284e.diff
Patch88: commit-f6401f9.diff
Patch89: commit-184e571.diff
Patch90: commit-fa19e84.diff
Patch91: commit-f7dd0c7.diff
%description
This package contains the X.Org Server.
@ -207,6 +214,11 @@ popd
%patch84 -p1
%patch85 -p1
%patch86 -p0
%patch87 -p1
%patch88 -p1
%patch89 -p1
%patch90 -p1
%patch91 -p1
%build
pushd xorg-docs-*
@ -537,6 +549,17 @@ exit 0
%endif
%changelog
* Tue Nov 27 2007 - sndirsch@suse.de
- commit-184e571.diff
* Adjust offsets of modes that do not fit virtual screen size.
- commit-c6c284e.diff
* Initialize Mode with 0 in xf86RandRModeConvert.
- commit-f6401f9.diff
* Don't segfault if referring to a relative output where no modes survived.
- commit-f7dd0c7.diff
* Only clear crtc of output if it is the one we're actually working on.
- commit-fa19e84.diff
* Fix initial placement of LeftOf and Above.
* Thu Nov 22 2007 - sndirsch@suse.de
- pixman.diff no longer required
* Sun Nov 18 2007 - sndirsch@suse.de