diff mbox

[i-g-t,1/1] tests/gem_gtt_hog: Clear the parameters for GEM_CREATE ioctl

Message ID 1489989735-15462-1-git-send-email-sagar.a.kamble@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

sagar.a.kamble@intel.com March 20, 2017, 6:02 a.m. UTC
Due to garbage data seen by i915, gem_create_ioctl failed for gem obj
created with drmIoctl(GEM_CREATE) without properly initialized
parameters. Can be fixed by calling gem_create helper too.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Lukasz Kalamarz <lukasz.kalamarz@intel.com>
Cc: Radoslaw Szwichtenberg <radoslaw.szwichtenberg@intel.com>
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
---
 tests/gem_gtt_hog.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Chris Wilson March 20, 2017, 7:41 a.m. UTC | #1
On Mon, Mar 20, 2017 at 11:32:15AM +0530, Sagar Arun Kamble wrote:
> Due to garbage data seen by i915, gem_create_ioctl failed for gem obj
> created with drmIoctl(GEM_CREATE) without properly initialized
> parameters. Can be fixed by calling gem_create helper too.

Whose bug are you working around?
-Chris
sagar.a.kamble@intel.com March 20, 2017, 8:46 a.m. UTC | #2
On 3/20/2017 1:11 PM, Chris Wilson wrote:
> On Mon, Mar 20, 2017 at 11:32:15AM +0530, Sagar Arun Kamble wrote:
>> Due to garbage data seen by i915, gem_create_ioctl failed for gem obj
>> created with drmIoctl(GEM_CREATE) without properly initialized
>> parameters. Can be fixed by calling gem_create helper too.
> Whose bug are you working around?
> -Chris

Found out now that this is happening due to mismatch in the libdrm headers 32bit/64bit flags for GEM_CREATE.
Able to resolve by properly using the proper definitions.
Will this fix be still applicable as flags would stay uninitialized with current call to drmIoctl?

>
Chris Wilson March 20, 2017, 8:55 a.m. UTC | #3
On Mon, Mar 20, 2017 at 02:16:54PM +0530, Kamble, Sagar A wrote:
> 
> 
> On 3/20/2017 1:11 PM, Chris Wilson wrote:
> >On Mon, Mar 20, 2017 at 11:32:15AM +0530, Sagar Arun Kamble wrote:
> >>Due to garbage data seen by i915, gem_create_ioctl failed for gem obj
> >>created with drmIoctl(GEM_CREATE) without properly initialized
> >>parameters. Can be fixed by calling gem_create helper too.
> >Whose bug are you working around?
> >-Chris
> 
> Found out now that this is happening due to mismatch in the libdrm headers 32bit/64bit flags for GEM_CREATE.
> Able to resolve by properly using the proper definitions.
> Will this fix be still applicable as flags would stay uninitialized with current call to drmIoctl?

At the moment, create.pad is never tested ergo it is valid to contain
garbage and as demonstrated that behaviour is already relied upon by
userspace.

How did the headers vary? The defintion is
struct drm_i915_gem_create {
        /**
         * Requested size for the object.
         *
         * The (page-aligned) allocated size for the object will be returned.
         */
        __u64 size;
        /**
         * Returned handle for the object.
         *
         * Object handles are nonzero.
         */
        __u32 handle;
        __u32 pad;
};
which should be 32/64bit safe. Otherwise we need a compat ioctl for the
same reason as not breaking 32bit userspace on 64bit kernel.
-Chris
sagar.a.kamble@intel.com March 20, 2017, 9:25 a.m. UTC | #4
On 3/20/2017 2:25 PM, Chris Wilson wrote:
> On Mon, Mar 20, 2017 at 02:16:54PM +0530, Kamble, Sagar A wrote:
>>
>> On 3/20/2017 1:11 PM, Chris Wilson wrote:
>>> On Mon, Mar 20, 2017 at 11:32:15AM +0530, Sagar Arun Kamble wrote:
>>>> Due to garbage data seen by i915, gem_create_ioctl failed for gem obj
>>>> created with drmIoctl(GEM_CREATE) without properly initialized
>>>> parameters. Can be fixed by calling gem_create helper too.
>>> Whose bug are you working around?
>>> -Chris
>> Found out now that this is happening due to mismatch in the libdrm headers 32bit/64bit flags for GEM_CREATE.
>> Able to resolve by properly using the proper definitions.
>> Will this fix be still applicable as flags would stay uninitialized with current call to drmIoctl?
> At the moment, create.pad is never tested ergo it is valid to contain
> garbage and as demonstrated that behaviour is already relied upon by
> userspace.
>
> How did the headers vary? The defintion is
> struct drm_i915_gem_create {
>          /**
>           * Requested size for the object.
>           *
>           * The (page-aligned) allocated size for the object will be returned.
>           */
>          __u64 size;
>          /**
>           * Returned handle for the object.
>           *
>           * Object handles are nonzero.
>           */
>          __u32 handle;
>          __u32 pad;
> };
> which should be 32/64bit safe. Otherwise we need a compat ioctl for the
> same reason as not breaking 32bit userspace on 64bit kernel.
> -Chris

This behavior is with internal Android kernel where gem_create has extra member as "__u64 flags"
added for stolen objects.
With pad value exception and size, handle set properly this patch does not apply then.

>
diff mbox

Patch

diff --git a/tests/gem_gtt_hog.c b/tests/gem_gtt_hog.c
index a3dbfad..0696bdc 100644
--- a/tests/gem_gtt_hog.c
+++ b/tests/gem_gtt_hog.c
@@ -93,6 +93,7 @@  static void busy(data_t *data, uint32_t handle, int size, int loops)
 	gem_exec[0].handle = handle;
 	gem_exec[0].flags = EXEC_OBJECT_NEEDS_FENCE;
 
+	memset(&create, 0, sizeof(create));
 	create.handle = 0;
 	create.size = 4096;
 	drmIoctl(data->fd, DRM_IOCTL_I915_GEM_CREATE, &create);