lkml.org 
[lkml]   [2018]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 65/86] ubi: Fix race condition between ubi volume creation and udev
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Clay McClure <clay@daemons.net>

    commit a51a0c8d213594bc094cb8e54aad0cb6d7f7b9a6 upstream.

    Similar to commit 714fb87e8bc0 ("ubi: Fix race condition between ubi
    device creation and udev"), we should make the volume active before
    registering it.

    Signed-off-by: Clay McClure <clay@daemons.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/mtd/ubi/vmt.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    --- a/drivers/mtd/ubi/vmt.c
    +++ b/drivers/mtd/ubi/vmt.c
    @@ -265,6 +265,12 @@ int ubi_create_volume(struct ubi_device
    vol->last_eb_bytes = vol->usable_leb_size;
    }

    + /* Make volume "available" before it becomes accessible via sysfs */
    + spin_lock(&ubi->volumes_lock);
    + ubi->volumes[vol_id] = vol;
    + ubi->vol_count += 1;
    + spin_unlock(&ubi->volumes_lock);
    +
    /* Register character device for the volume */
    cdev_init(&vol->cdev, &ubi_vol_cdev_operations);
    vol->cdev.owner = THIS_MODULE;
    @@ -304,11 +310,6 @@ int ubi_create_volume(struct ubi_device
    if (err)
    goto out_sysfs;

    - spin_lock(&ubi->volumes_lock);
    - ubi->volumes[vol_id] = vol;
    - ubi->vol_count += 1;
    - spin_unlock(&ubi->volumes_lock);
    -
    ubi_volume_notify(ubi, vol, UBI_VOLUME_ADDED);
    self_check_volumes(ubi);
    return err;
    @@ -328,6 +329,10 @@ out_sysfs:
    out_cdev:
    cdev_del(&vol->cdev);
    out_mapping:
    + spin_lock(&ubi->volumes_lock);
    + ubi->volumes[vol_id] = NULL;
    + ubi->vol_count -= 1;
    + spin_unlock(&ubi->volumes_lock);
    if (do_free)
    ubi_eba_destroy_table(eba_tbl);
    out_acc:

    \
     
     \ /
      Last update: 2018-03-16 18:02    [W:4.069 / U:0.484 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site