struct acpi_buffer *params)
 {
        acpi_status status;
+       union acpi_object *obj;
        union acpi_object atif_arg_elements[2];
        struct acpi_object_list atif_arg;
        struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
 
        status = acpi_evaluate_object(atif->handle, NULL, &atif_arg,
                                      &buffer);
+       obj = (union acpi_object *)buffer.pointer;
 
-       /* Fail only if calling the method fails and ATIF is supported */
+       /* Fail if calling the method fails and ATIF is supported */
        if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
                DRM_DEBUG_DRIVER("failed to evaluate ATIF got %s\n",
                                 acpi_format_exception(status));
-               kfree(buffer.pointer);
+               kfree(obj);
                return NULL;
        }
 
-       return buffer.pointer;
+       if (obj->type != ACPI_TYPE_BUFFER) {
+               DRM_DEBUG_DRIVER("bad object returned from ATIF: %d\n",
+                                obj->type);
+               kfree(obj);
+               return NULL;
+       }
+
+       return obj;
 }
 
 /**