lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sat, 8 Dec 2012 12:44:53 +0100
From:	Borislav Petkov <bp@...en8.de>
To:	Aaron Williams <Aaron.Williams@...ium.com>
Cc:	linux-kernel@...r.kernel.org,
	"Williams, Aaron" <Aaron.Williams@...iumnetworks.com>
Subject: Re: Incrementing module reference count

On Fri, Dec 07, 2012 at 05:14:39PM -0800, Aaron Williams wrote:
> Hi,
> 
> I have a kernel module which other modules register with in order to
> export access functions. So far I have everything working but I want
> to prevent a module that is registered with my module from unloading
> since now my module is dependent on the other module.
> 
> Is there a way I can cause the reference count of the module
> registering with my module to increase? I tried calling get_device
> with the device structure of the module that is registering but that
> does not seem to work.
> 
> For example, I have the following function:
> 
> /**
>  * Adds a mapping of a device node to a memory accessor
>  *
>  * @param[in] dev - device
>  * @param[in] macc - memory accessor
>  *
>  * @returns 0 for success or -ENOMEM
>  */
> int of_memory_accessor_register(struct device *dev,
>                 struct memory_accessor *macc)
> {
>     struct of_macc_entry *mentry;
> 
>     mentry = kmalloc(sizeof(*mentry), GFP_KERNEL);
>     if (mentry == NULL)
>         return -ENOMEM;
> 
>     mentry->dev = dev;
>     mentry->macc = macc;
> 
>     mutex_lock(&lock);
> 
>     get_device(dev);
>     list_add(&(mentry->list), &macc_list);
> 
>     mutex_unlock(&lock);
> 
>     return 0;
> }
> EXPORT_SYMBOL(of_memory_accessor_register);
> 
> Basically my module is used for things like serial EEPROMs and
> whatnot so that external modules can find the accessor functions
> based on the device tree. In my case I am updating the Vitesse
> VSC848X driver so that it can read the SFP module when it is plugged
> in using the AT24 I2C EEPROM module. I want to prevent the at24
> module from unloading while other modules in turn are using it. The
> at24 module does not export any symbols.

>From a quick code scan, at24 has this:

	static struct i2c_driver at24_driver = {
	        .driver = {
	                .name = "at24",
	                .owner = THIS_MODULE,
	        },
	        .probe = at24_probe,
	        .remove = __devexit_p(at24_remove),
	        .id_table = at24_ids,
	};

and then you could do:

	try_module_get(at24_driver.driver->owner);

from your code. AFAICT, of course.

HTH.

-- 
Regards/Gruss,
    Boris.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ