On Tue, May 03, 2011 at 05:46:05PM -0400, Robert P. J. Day wrote:
still perusing various drivers to use as examples in class, and i ran across this snippet in the load routine of drivers/char/raw.c:
===== start excerpt =====
cdev_init(&raw_cdev, &raw_fops); ret = cdev_add(&raw_cdev, dev, MAX_RAW_MINORS); if (ret) { kobject_put(&raw_cdev.kobj); goto error_region; }
===== end =====
of course it's wise to check the return code from cdev_add() to make sure it worked, but is it really necessary to call kobject_put() there?
No, that is wrong. No one should ever mess with the kobject in a cdev. I want to call it something other than a kobject, as it's not really used as you would think of a kobject (it's used in the hash lookup of the object when userspace opens a chardev, it has nothing to do with sysfs.)
i don't recall other character drivers calling that if they note that cdev_add() failed. it's probably harmless, but it can't be necessary, can it? unless that driver is doing something unusual somewhere else in its code.
Hopefully not. Nice auditing, you are going to start sending patches for this, right? :) thanks, greg k-h