[PATCH libpciaccess] Fix pci_io_handle allocation routines.
Matthieu Herrb
matthieu.herrb at laas.fr
Thu Apr 5 22:49:58 PDT 2012
On Thu, Apr 05, 2012 at 02:16:53PM -0700, Jeremy Huddleston wrote:
> Yep. Please get this committed before we tag it for the katamari.
>
> Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
Hi,
Already pushed
http://cgit.freedesktop.org/xorg/lib/libpciaccess/commit/?id=6f9d9f1e1b093939bc459be606fba72f1d6dfc76
>
> On Apr 1, 2012, at 23:26, Matthieu Herrb wrote:
>
> > The previous version of new_io_handle() would invalidate all previous
> > allocations when realloc moves the base pointer of the ios array.
> > Since I cannot figure out where this array is useful, just get rid of
> > it, providing sound stable memory allocation.
> >
> > Fixes vgaHWSaveFonts() in 1.12 xserver on OpenBSD, but other
> > sub-systems relaying on pci_io could be affected too.
> > ---
> > src/common_io.c | 39 ++++-----------------------------------
> > 1 files changed, 4 insertions(+), 35 deletions(-)
> >
> > diff --git a/src/common_io.c b/src/common_io.c
> > index 5b35e07..f5c9e45 100644
> > --- a/src/common_io.c
> > +++ b/src/common_io.c
> > @@ -28,59 +28,28 @@
> > #include "pciaccess.h"
> > #include "pciaccess_private.h"
> >
> > -static struct pci_io_handle *ios;
> > -static unsigned int num_ios;
> > -
> > static struct pci_io_handle *
> > new_io_handle(void)
> > {
> > struct pci_io_handle *new;
> >
> > - new = realloc(ios, sizeof(struct pci_io_handle) * (num_ios + 1));
> > + new = malloc(sizeof(struct pci_io_handle));
> > if (!new)
> > return NULL;
> >
> > - ios = new;
> > - num_ios++;
> > -
> > - return ios + num_ios - 1;
> > + return new;
> > }
> >
> > static void
> > delete_io_handle(struct pci_io_handle *handle)
> > {
> > - struct pci_io_handle *new;
> > - int i = 0;
> > -
> > - if (!handle || !num_ios || (void *)handle < (void *)ios ||
> > - (void *)handle > (void *)(ios + num_ios - 1))
> > - return;
> > -
> > - for (i = 0; i < num_ios; i++) {
> > - if (ios + i == handle) {
> > - memmove(&ios[i], &ios[i+1], sizeof(struct pci_io_handle) *
> > - (num_ios - i - 1));
> > - break;
> > - }
> > - }
> > -
> > - num_ios--;
> > - if (num_ios) {
> > - new = realloc(ios, sizeof(struct pci_io_handle) * num_ios);
> > - if (new)
> > - ios = new;
> > - } else {
> > - free(ios);
> > - ios = NULL;
> > - }
> > + free(handle);
> > + return;
> > }
> >
> > _pci_hidden void
> > pci_io_cleanup(void)
> > {
> > - free(ios);
> > - ios = NULL;
> > - num_ios = 0;
> > }
> >
> > /**
> > --
> > 1.7.6
> >
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> >
>
--
Matthieu Herrb
More information about the xorg-devel
mailing list