• Michael Holzheu's avatar
    [S390] vmur: Invalid allocation sequence for vmur class · 3f7cb51f
    Michael Holzheu authored
    The vmur class is allocated after the CCW driver is registered
    and it is destroyed before the CCW driver is unregistered.
    This is not the correct sequence, because the vmur class can be used
    via driver core callbacks that are triggered during the CCW driver
    deregistration. For Example:
    
    1. vmur device is online
    2. vmur module is unloaded
    
    This leads to the following function call stack:
    
        <4> [<0000000000387286>] device_destroy+0x36/0x5c
        <4> [<000003e000209714>] ur_set_offline_force+0x9c/0x10c [vmur]
        <4> [<000003e00020a928>] ur_remove+0x64/0xbc [vmur]
        <4> [<00000000003e4d2e>] ccw_device_remove+0x42/0x1ac
        <4> [<000000000038a1aa>] __device_release_driver+0x9a/0xe4
        <4> [<000000000038a2da>] driver_detach+0xe6/0xec
        <4> [<0000000000388ee4>] bus_remove_driver+0xc0/0x108
        <4> [<000003e00020ad5a>] ur_exit+0x52/0x84 [vmur]
    
    In device_destroy() the vmur class is used. Since it is already freed,
    this can lead to a kernel panic.
    
    To fix the problem, the vmur class has to be allocated before the CCW
    driver is registered and destroyed after the CCW driver has ben unregistered.
    Signed-off-by: default avatarMichael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    3f7cb51f
vmur.c 24.2 KB