Message info
 
To:Matthieu Herrb From:Jeremy Huddleston Subject:Re: [PATCH libpciaccess] Fix pci_io_handle allocation routines. Date:Thu, 05 Apr 2012 14:16:53 -0700
 

Yep. Please get this committed before we tag it for the katamari.

Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

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@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel