* [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id
@ 2016-04-27 15:12 Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources Tvrtko Ursulin
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Tvrtko Ursulin @ 2016-04-27 15:12 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
lib/igt_kms.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index ef24a4965567..7557bdc20fa4 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -402,10 +402,10 @@ int kmstest_get_pipe_from_crtc_id(int fd, int crtc_id)
break;
}
- drmModeFreeResources(res);
-
igt_assert(i < res->count_crtcs);
+ drmModeFreeResources(res);
+
return i;
}
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources
2016-04-27 15:12 [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
@ 2016-04-27 15:12 ` Tvrtko Ursulin
2016-04-28 8:28 ` Daniel Vetter
2016-04-27 15:12 ` [PATCH i-g-t 3/3] kms_flip: Reduce dmesg spam by not calling drmModeGetResources too much Tvrtko Ursulin
2016-04-28 9:14 ` [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
2 siblings, 1 reply; 6+ messages in thread
From: Tvrtko Ursulin @ 2016-04-27 15:12 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
This will enable the following patch to generate less dmesg spam.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
lib/igt_kms.c | 33 +++++++++++++++++++++++----------
lib/igt_kms.h | 3 ++-
tests/kms_3d.c | 2 +-
tests/kms_flip.c | 7 ++++---
tests/kms_render.c | 5 +++--
tests/testdisplay.c | 2 +-
6 files changed, 34 insertions(+), 18 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 7557bdc20fa4..07f523e2c39b 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -749,6 +749,7 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
/**
* _kmstest_connector_config:
* @drm_fd: DRM fd
+ * @resources: pointer to drmModeRes or NULL
* @connector_id: DRM connector id
* @crtc_idx_mask: mask of allowed DRM CRTC indices
* @config: structure filled with the possible configuration
@@ -757,17 +758,24 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
* This tries to find a suitable configuration for the given connector and CRTC
* constraint and fills it into @config.
*/
-static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
+static bool _kmstest_connector_config(int drm_fd, drmModeRes *resources,
+ uint32_t connector_id,
unsigned long crtc_idx_mask,
struct kmstest_connector_config *config,
bool probe)
{
- drmModeRes *resources;
drmModeConnector *connector;
drmModeEncoder *encoder;
+ bool free_resources;
int i, j;
- resources = drmModeGetResources(drm_fd);
+ if (resources == NULL) {
+ resources = drmModeGetResources(drm_fd);
+ free_resources = true;
+ } else {
+ free_resources = false;
+ }
+
if (!resources) {
igt_warn("drmModeGetResources failed");
goto err1;
@@ -840,7 +848,8 @@ found:
config->pipe = kmstest_get_pipe_from_crtc_id(drm_fd,
config->crtc->crtc_id);
- drmModeFreeResources(resources);
+ if (free_resources)
+ drmModeFreeResources(resources);
return true;
err4:
@@ -848,7 +857,8 @@ err4:
err3:
drmModeFreeConnector(connector);
err2:
- drmModeFreeResources(resources);
+ if (free_resources)
+ drmModeFreeResources(resources);
err1:
return false;
}
@@ -856,6 +866,7 @@ err1:
/**
* kmstest_get_connector_config:
* @drm_fd: DRM fd
+ * @resources: pointer to drmModeRes or NULL
* @connector_id: DRM connector id
* @crtc_idx_mask: mask of allowed DRM CRTC indices
* @config: structure filled with the possible configuration
@@ -863,12 +874,13 @@ err1:
* This tries to find a suitable configuration for the given connector and CRTC
* constraint and fills it into @config.
*/
-bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
+bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
+ uint32_t connector_id,
unsigned long crtc_idx_mask,
struct kmstest_connector_config *config)
{
- return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
- config, 0);
+ return _kmstest_connector_config(drm_fd, resources, connector_id,
+ crtc_idx_mask, config, 0);
}
/**
@@ -886,8 +898,8 @@ bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
unsigned long crtc_idx_mask,
struct kmstest_connector_config *config)
{
- return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
- config, 1);
+ return _kmstest_connector_config(drm_fd, NULL, connector_id,
+ crtc_idx_mask, config, 1);
}
/**
@@ -1160,6 +1172,7 @@ static void igt_output_refresh(igt_output_t *output)
kmstest_free_connector_config(&output->config);
ret = kmstest_get_connector_config(display->drm_fd,
+ NULL,
output->id,
crtc_idx_mask,
&output->config);
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 5c8340171ab6..8cbba1673d28 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -158,7 +158,8 @@ void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
drmModeModeInfo *mode);
-bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
+bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
+ uint32_t connector_id,
unsigned long crtc_idx_mask,
struct kmstest_connector_config *config);
bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
diff --git a/tests/kms_3d.c b/tests/kms_3d.c
index bfc981ee279d..e8bc4a42d8aa 100644
--- a/tests/kms_3d.c
+++ b/tests/kms_3d.c
@@ -86,7 +86,7 @@ igt_simple_main
continue;
/* create a configuration */
- ret = kmstest_get_connector_config(drm_fd, connector_id,
+ ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
crtc_mask, &config);
if (ret != true) {
igt_info("Error creating configuration for:\n ");
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index eda2fcc9212d..fec69254e4da 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -1042,7 +1042,8 @@ static void connector_find_preferred_mode(uint32_t connector_id, int crtc_idx,
{
struct kmstest_connector_config config;
- if (!kmstest_get_connector_config(drm_fd, connector_id, 1 << crtc_idx,
+ if (!kmstest_get_connector_config(drm_fd, NULL,
+ connector_id, 1 << crtc_idx,
&config)) {
o->mode_valid = 0;
return;
@@ -1086,11 +1087,11 @@ static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
drmModeModeInfo *mode[2];
int n, m;
- if (!kmstest_get_connector_config(drm_fd, o->_connector[0],
+ if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[0],
1 << crtc_idx0, &config[0]))
return;
- if (!kmstest_get_connector_config(drm_fd, o->_connector[1],
+ if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[1],
1 << crtc_idx1, &config[1])) {
kmstest_free_connector_config(&config[0]);
return;
diff --git a/tests/kms_render.c b/tests/kms_render.c
index 72da87f19af3..735a1e117349 100644
--- a/tests/kms_render.c
+++ b/tests/kms_render.c
@@ -210,8 +210,9 @@ static int run_test(const char *test_name, enum test_flags flags)
for (j = 0; j < resources->count_crtcs; j++) {
struct kmstest_connector_config cconf;
- if (!kmstest_get_connector_config(drm_fd, connector_id,
- 1 << j, &cconf))
+ if (!kmstest_get_connector_config(drm_fd, NULL,
+ connector_id,
+ 1 << j, &cconf))
continue;
test_connector(test_name, &cconf, flags);
diff --git a/tests/testdisplay.c b/tests/testdisplay.c
index 00b47bd06280..9d84d8cd4000 100644
--- a/tests/testdisplay.c
+++ b/tests/testdisplay.c
@@ -201,7 +201,7 @@ static void connector_find_preferred_mode(uint32_t connector_id,
ret = kmstest_probe_connector_config(drm_fd, connector_id,
crtc_idx_mask, &config);
else
- ret = kmstest_get_connector_config(drm_fd, connector_id,
+ ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
crtc_idx_mask, &config);
if (!ret) {
c->mode_valid = 0;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH i-g-t 3/3] kms_flip: Reduce dmesg spam by not calling drmModeGetResources too much
2016-04-27 15:12 [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources Tvrtko Ursulin
@ 2016-04-27 15:12 ` Tvrtko Ursulin
2016-04-28 9:14 ` [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
2 siblings, 0 replies; 6+ messages in thread
From: Tvrtko Ursulin @ 2016-04-27 15:12 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Configuration reported in drmModeGetResources is static - pass it
into kmstest_get_connector_config so it can be reused there.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
tests/kms_flip.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index fec69254e4da..a85153fa3d52 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -1042,7 +1042,7 @@ static void connector_find_preferred_mode(uint32_t connector_id, int crtc_idx,
{
struct kmstest_connector_config config;
- if (!kmstest_get_connector_config(drm_fd, NULL,
+ if (!kmstest_get_connector_config(drm_fd, resources,
connector_id, 1 << crtc_idx,
&config)) {
o->mode_valid = 0;
@@ -1087,11 +1087,11 @@ static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
drmModeModeInfo *mode[2];
int n, m;
- if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[0],
+ if (!kmstest_get_connector_config(drm_fd, resources, o->_connector[0],
1 << crtc_idx0, &config[0]))
return;
- if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[1],
+ if (!kmstest_get_connector_config(drm_fd, resources, o->_connector[1],
1 << crtc_idx1, &config[1])) {
kmstest_free_connector_config(&config[0]);
return;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources
2016-04-27 15:12 ` [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources Tvrtko Ursulin
@ 2016-04-28 8:28 ` Daniel Vetter
2016-04-28 9:05 ` Tvrtko Ursulin
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Vetter @ 2016-04-28 8:28 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: Intel-gfx
On Wed, Apr 27, 2016 at 04:12:35PM +0100, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> This will enable the following patch to generate less dmesg spam.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
> lib/igt_kms.c | 33 +++++++++++++++++++++++----------
> lib/igt_kms.h | 3 ++-
> tests/kms_3d.c | 2 +-
> tests/kms_flip.c | 7 ++++---
> tests/kms_render.c | 5 +++--
> tests/testdisplay.c | 2 +-
> 6 files changed, 34 insertions(+), 18 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 7557bdc20fa4..07f523e2c39b 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -749,6 +749,7 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
> /**
> * _kmstest_connector_config:
> * @drm_fd: DRM fd
> + * @resources: pointer to drmModeRes or NULL
> * @connector_id: DRM connector id
> * @crtc_idx_mask: mask of allowed DRM CRTC indices
> * @config: structure filled with the possible configuration
> @@ -757,17 +758,24 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
> * This tries to find a suitable configuration for the given connector and CRTC
> * constraint and fills it into @config.
> */
> -static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
> +static bool _kmstest_connector_config(int drm_fd, drmModeRes *resources,
> + uint32_t connector_id,
> unsigned long crtc_idx_mask,
> struct kmstest_connector_config *config,
> bool probe)
> {
> - drmModeRes *resources;
> drmModeConnector *connector;
> drmModeEncoder *encoder;
> + bool free_resources;
> int i, j;
>
> - resources = drmModeGetResources(drm_fd);
> + if (resources == NULL) {
> + resources = drmModeGetResources(drm_fd);
> + free_resources = true;
> + } else {
> + free_resources = false;
> + }
Imo you should just cache this internally in the lib instead of forcing
everyone to become more clever. We can just request resources once when
initializing the kmstest library, and then maybe provide a function to
force reprobing (for something like testdisplay, but that doesn't use
kmstest yet).
-Daniel
> +
> if (!resources) {
> igt_warn("drmModeGetResources failed");
> goto err1;
> @@ -840,7 +848,8 @@ found:
> config->pipe = kmstest_get_pipe_from_crtc_id(drm_fd,
> config->crtc->crtc_id);
>
> - drmModeFreeResources(resources);
> + if (free_resources)
> + drmModeFreeResources(resources);
>
> return true;
> err4:
> @@ -848,7 +857,8 @@ err4:
> err3:
> drmModeFreeConnector(connector);
> err2:
> - drmModeFreeResources(resources);
> + if (free_resources)
> + drmModeFreeResources(resources);
> err1:
> return false;
> }
> @@ -856,6 +866,7 @@ err1:
> /**
> * kmstest_get_connector_config:
> * @drm_fd: DRM fd
> + * @resources: pointer to drmModeRes or NULL
> * @connector_id: DRM connector id
> * @crtc_idx_mask: mask of allowed DRM CRTC indices
> * @config: structure filled with the possible configuration
> @@ -863,12 +874,13 @@ err1:
> * This tries to find a suitable configuration for the given connector and CRTC
> * constraint and fills it into @config.
> */
> -bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
> +bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
> + uint32_t connector_id,
> unsigned long crtc_idx_mask,
> struct kmstest_connector_config *config)
> {
> - return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
> - config, 0);
> + return _kmstest_connector_config(drm_fd, resources, connector_id,
> + crtc_idx_mask, config, 0);
> }
>
> /**
> @@ -886,8 +898,8 @@ bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
> unsigned long crtc_idx_mask,
> struct kmstest_connector_config *config)
> {
> - return _kmstest_connector_config(drm_fd, connector_id, crtc_idx_mask,
> - config, 1);
> + return _kmstest_connector_config(drm_fd, NULL, connector_id,
> + crtc_idx_mask, config, 1);
> }
>
> /**
> @@ -1160,6 +1172,7 @@ static void igt_output_refresh(igt_output_t *output)
> kmstest_free_connector_config(&output->config);
>
> ret = kmstest_get_connector_config(display->drm_fd,
> + NULL,
> output->id,
> crtc_idx_mask,
> &output->config);
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 5c8340171ab6..8cbba1673d28 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -158,7 +158,8 @@ void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
>
> bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
> drmModeModeInfo *mode);
> -bool kmstest_get_connector_config(int drm_fd, uint32_t connector_id,
> +bool kmstest_get_connector_config(int drm_fd, drmModeRes *resources,
> + uint32_t connector_id,
> unsigned long crtc_idx_mask,
> struct kmstest_connector_config *config);
> bool kmstest_probe_connector_config(int drm_fd, uint32_t connector_id,
> diff --git a/tests/kms_3d.c b/tests/kms_3d.c
> index bfc981ee279d..e8bc4a42d8aa 100644
> --- a/tests/kms_3d.c
> +++ b/tests/kms_3d.c
> @@ -86,7 +86,7 @@ igt_simple_main
> continue;
>
> /* create a configuration */
> - ret = kmstest_get_connector_config(drm_fd, connector_id,
> + ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
> crtc_mask, &config);
> if (ret != true) {
> igt_info("Error creating configuration for:\n ");
> diff --git a/tests/kms_flip.c b/tests/kms_flip.c
> index eda2fcc9212d..fec69254e4da 100644
> --- a/tests/kms_flip.c
> +++ b/tests/kms_flip.c
> @@ -1042,7 +1042,8 @@ static void connector_find_preferred_mode(uint32_t connector_id, int crtc_idx,
> {
> struct kmstest_connector_config config;
>
> - if (!kmstest_get_connector_config(drm_fd, connector_id, 1 << crtc_idx,
> + if (!kmstest_get_connector_config(drm_fd, NULL,
> + connector_id, 1 << crtc_idx,
> &config)) {
> o->mode_valid = 0;
> return;
> @@ -1086,11 +1087,11 @@ static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
> drmModeModeInfo *mode[2];
> int n, m;
>
> - if (!kmstest_get_connector_config(drm_fd, o->_connector[0],
> + if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[0],
> 1 << crtc_idx0, &config[0]))
> return;
>
> - if (!kmstest_get_connector_config(drm_fd, o->_connector[1],
> + if (!kmstest_get_connector_config(drm_fd, NULL, o->_connector[1],
> 1 << crtc_idx1, &config[1])) {
> kmstest_free_connector_config(&config[0]);
> return;
> diff --git a/tests/kms_render.c b/tests/kms_render.c
> index 72da87f19af3..735a1e117349 100644
> --- a/tests/kms_render.c
> +++ b/tests/kms_render.c
> @@ -210,8 +210,9 @@ static int run_test(const char *test_name, enum test_flags flags)
> for (j = 0; j < resources->count_crtcs; j++) {
> struct kmstest_connector_config cconf;
>
> - if (!kmstest_get_connector_config(drm_fd, connector_id,
> - 1 << j, &cconf))
> + if (!kmstest_get_connector_config(drm_fd, NULL,
> + connector_id,
> + 1 << j, &cconf))
> continue;
>
> test_connector(test_name, &cconf, flags);
> diff --git a/tests/testdisplay.c b/tests/testdisplay.c
> index 00b47bd06280..9d84d8cd4000 100644
> --- a/tests/testdisplay.c
> +++ b/tests/testdisplay.c
> @@ -201,7 +201,7 @@ static void connector_find_preferred_mode(uint32_t connector_id,
> ret = kmstest_probe_connector_config(drm_fd, connector_id,
> crtc_idx_mask, &config);
> else
> - ret = kmstest_get_connector_config(drm_fd, connector_id,
> + ret = kmstest_get_connector_config(drm_fd, NULL, connector_id,
> crtc_idx_mask, &config);
> if (!ret) {
> c->mode_valid = 0;
> --
> 1.9.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources
2016-04-28 8:28 ` Daniel Vetter
@ 2016-04-28 9:05 ` Tvrtko Ursulin
0 siblings, 0 replies; 6+ messages in thread
From: Tvrtko Ursulin @ 2016-04-28 9:05 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Intel-gfx
On 28/04/16 09:28, Daniel Vetter wrote:
> On Wed, Apr 27, 2016 at 04:12:35PM +0100, Tvrtko Ursulin wrote:
>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>
>> This will enable the following patch to generate less dmesg spam.
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> ---
>> lib/igt_kms.c | 33 +++++++++++++++++++++++----------
>> lib/igt_kms.h | 3 ++-
>> tests/kms_3d.c | 2 +-
>> tests/kms_flip.c | 7 ++++---
>> tests/kms_render.c | 5 +++--
>> tests/testdisplay.c | 2 +-
>> 6 files changed, 34 insertions(+), 18 deletions(-)
>>
>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>> index 7557bdc20fa4..07f523e2c39b 100644
>> --- a/lib/igt_kms.c
>> +++ b/lib/igt_kms.c
>> @@ -749,6 +749,7 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
>> /**
>> * _kmstest_connector_config:
>> * @drm_fd: DRM fd
>> + * @resources: pointer to drmModeRes or NULL
>> * @connector_id: DRM connector id
>> * @crtc_idx_mask: mask of allowed DRM CRTC indices
>> * @config: structure filled with the possible configuration
>> @@ -757,17 +758,24 @@ bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
>> * This tries to find a suitable configuration for the given connector and CRTC
>> * constraint and fills it into @config.
>> */
>> -static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id,
>> +static bool _kmstest_connector_config(int drm_fd, drmModeRes *resources,
>> + uint32_t connector_id,
>> unsigned long crtc_idx_mask,
>> struct kmstest_connector_config *config,
>> bool probe)
>> {
>> - drmModeRes *resources;
>> drmModeConnector *connector;
>> drmModeEncoder *encoder;
>> + bool free_resources;
>> int i, j;
>>
>> - resources = drmModeGetResources(drm_fd);
>> + if (resources == NULL) {
>> + resources = drmModeGetResources(drm_fd);
>> + free_resources = true;
>> + } else {
>> + free_resources = false;
>> + }
>
> Imo you should just cache this internally in the lib instead of forcing
> everyone to become more clever. We can just request resources once when
> initializing the kmstest library, and then maybe provide a function to
> force reprobing (for something like testdisplay, but that doesn't use
> kmstest yet).
If you merge the two drm core patches patches 2/3 and 3/3 are best
abandoned. :)
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id
2016-04-27 15:12 [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 3/3] kms_flip: Reduce dmesg spam by not calling drmModeGetResources too much Tvrtko Ursulin
@ 2016-04-28 9:14 ` Tvrtko Ursulin
2 siblings, 0 replies; 6+ messages in thread
From: Tvrtko Ursulin @ 2016-04-28 9:14 UTC (permalink / raw)
To: Intel-gfx
On 27/04/16 16:12, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
> lib/igt_kms.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index ef24a4965567..7557bdc20fa4 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -402,10 +402,10 @@ int kmstest_get_pipe_from_crtc_id(int fd, int crtc_id)
> break;
> }
>
> - drmModeFreeResources(res);
> -
> igt_assert(i < res->count_crtcs);
>
> + drmModeFreeResources(res);
> +
> return i;
> }
>
>
I've pushed this since it is obvious.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-04-28 9:14 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-27 15:12 [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 2/3] igt_kms: Allow kmstest_get_connector_config to take provided drmModeGetResources Tvrtko Ursulin
2016-04-28 8:28 ` Daniel Vetter
2016-04-28 9:05 ` Tvrtko Ursulin
2016-04-27 15:12 ` [PATCH i-g-t 3/3] kms_flip: Reduce dmesg spam by not calling drmModeGetResources too much Tvrtko Ursulin
2016-04-28 9:14 ` [PATCH i-g-t 1/3] igt_kms: Fix use after free in kmstest_get_pipe_from_crtc_id Tvrtko Ursulin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox