Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/md/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  dm-builtin.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
#include "dm-core.h"

/*
 * The kobject release method must not be placed in the module itself,
 * otherwise we are subject to module unload races.
 *
 * The release method is called when the last reference to the kobject is
 * dropped. It may be called by any other kernel code that drops the last
 * reference.
 *
 * The release method suffers from module unload race. We may prevent the
 * module from being unloaded at the start of the release method (using
 * increased module reference count or synchronizing against the release
 * method), however there is no way to prevent the module from being
 * unloaded at the end of the release method.
 *
 * If this code were placed in the dm module, the following race may
 * happen:
 *  1. Some other process takes a reference to dm kobject
 *  2. The user issues ioctl function to unload the dm device
 *  3. dm_sysfs_exit calls kobject_put, however the object is not released
 *     because of the other reference taken at step 1
 *  4. dm_sysfs_exit waits on the completion
 *  5. The other process that took the reference in step 1 drops it,
 *     dm_kobject_release is called from this process
 *  6. dm_kobject_release calls complete()
 *  7. a reschedule happens before dm_kobject_release returns
 *  8. dm_sysfs_exit continues, the dm device is unloaded, module reference
 *     count is decremented
 *  9. The user unloads the dm module
 * 10. The other process that was rescheduled in step 7 continues to run,
 *     it is now executing code in unloaded module, so it crashes
 *
 * Note that if the process that takes the foreign reference to dm kobject
 * has a low priority and the system is sufficiently loaded with
 * higher-priority processes that prevent the low-priority process from
 * being scheduled long enough, this bug may really happen.
 *
 * In order to fix this module unload race, we place the release method
 * into a helper code that is compiled directly into the kernel.
 */


void dm_kobject_release(struct kobject *kobj)
{
 complete(dm_get_completion_from_kobject(kobj));
}
EXPORT_SYMBOL(dm_kobject_release);

Messung V0.5
C=95 H=96 G=95

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.