You could put that a little less strongly. After kobject_init() youSHOULD call kobject_put() to clean up properly, and after kobject_add()you MUST call kobject_del() and kobject_put().

However if kobject_add() is never called, or if it is called and it fails, then it's okay to use kfree(). It's not clear whether this distinction will matter in practice. It's probably best to document this using your stronger description.

The same sort of rule should apply to other kernel objects, like struct device. After intialization you have to do a final _put, before that you just do a kfree(). (And initialization cannot fail.)