if (IS_ERR(np)) {
                if (PTR_ERR(np) != -ENODEV)
                        pr_err("Failed to find thermal zone for %pOFn id=%d\n", sensor, id);
-               return ERR_CAST(np);
+               ret = PTR_ERR(np);
+               goto out_kfree_of_ops;
        }
 
        trips = thermal_of_trips_init(np, &ntrips);
        if (IS_ERR(trips)) {
                pr_err("Failed to find trip points for %pOFn id=%d\n", sensor, id);
-               return ERR_CAST(trips);
+               ret = PTR_ERR(trips);
+               goto out_kfree_of_ops;
        }
 
        ret = thermal_of_monitor_init(np, &delay, &pdelay);
        kfree(tzp);
 out_kfree_trips:
        kfree(trips);
+out_kfree_of_ops:
+       kfree(of_ops);
 
        return ERR_PTR(ret);
 }