int ret;
        const struct hid_sensor_custom_match *match =
                hid_sensor_custom_known_table;
-       struct hid_sensor_custom_properties prop;
+       struct hid_sensor_custom_properties *prop;
 
-       ret = hid_sensor_custom_properties_get(hsdev, &prop);
+       prop = kmalloc(sizeof(struct hid_sensor_custom_properties), GFP_KERNEL);
+       if (!prop)
+               return -ENOMEM;
+
+       ret = hid_sensor_custom_properties_get(hsdev, prop);
        if (ret < 0)
-               return ret;
+               goto out;
 
        while (match->tag) {
-               if (hid_sensor_custom_do_match(hsdev, match, &prop)) {
+               if (hid_sensor_custom_do_match(hsdev, match, prop)) {
                        *known = match;
-                       return 0;
+                       ret = 0;
+                       goto out;
                }
                match++;
        }
-
-       return -ENODATA;
+       ret = -ENODATA;
+out:
+       kfree(prop);
+       return ret;
 }
 
 static struct platform_device *