From: Emil Velikov Date: Mon, 23 Nov 2015 20:26:55 +0000 (+0000) Subject: pipe-loader: check if winsys.name is non-null prior to strcmp X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f92906b876d5463efba3ffb19c1de0dcb3c755f;p=mesa.git pipe-loader: check if winsys.name is non-null prior to strcmp In theory this wouldn't be an issue, as we'll find the correct name and break out of the loop before we hit the sentinel. Let's fix this and avoid issues in the future. Spotted by Coverity (CID 1339869, 1339870, 1339871) Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Emil Velikov --- diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c index 02ceb44c4d3..c8e1f134c99 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c @@ -137,7 +137,7 @@ pipe_loader_sw_probe_dri(struct pipe_loader_device **devs, struct drisw_loader_f if (!pipe_loader_sw_probe_init_common(sdev)) goto fail; - for (i = 0; sdev->dd->winsys; i++) { + for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "dri") == 0) { sdev->ws = sdev->dd->winsys[i].create_winsys(drisw_lf); break; @@ -169,7 +169,7 @@ pipe_loader_sw_probe_kms(struct pipe_loader_device **devs, int fd) if (!pipe_loader_sw_probe_init_common(sdev)) goto fail; - for (i = 0; sdev->dd->winsys; i++) { + for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "kms_dri") == 0) { sdev->ws = sdev->dd->winsys[i].create_winsys(fd); break; @@ -200,7 +200,7 @@ pipe_loader_sw_probe_null(struct pipe_loader_device **devs) if (!pipe_loader_sw_probe_init_common(sdev)) goto fail; - for (i = 0; sdev->dd->winsys; i++) { + for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "null") == 0) { sdev->ws = sdev->dd->winsys[i].create_winsys(); break; @@ -245,7 +245,7 @@ pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev, if (!pipe_loader_sw_probe_init_common(sdev)) goto fail; - for (i = 0; sdev->dd->winsys; i++) { + for (i = 0; sdev->dd->winsys[i].name; i++) { if (strcmp(sdev->dd->winsys[i].name, "wrapped") == 0) { sdev->ws = sdev->dd->winsys[i].create_winsys(screen); break;