• Tuo Li's avatar
    gfs2: Fix possible data races in gfs2_show_options() · 6fa0a72c
    Tuo Li authored
    Some fields such as gt_logd_secs of the struct gfs2_tune are accessed
    without holding the lock gt_spin in gfs2_show_options():
    
      val = sdp->sd_tune.gt_logd_secs;
      if (val != 30)
        seq_printf(s, ",commit=%d", val);
    
    And thus can cause data races when gfs2_show_options() and other functions
    such as gfs2_reconfigure() are concurrently executed:
    
      spin_lock(&gt->gt_spin);
      gt->gt_logd_secs = newargs->ar_commit;
    
    To fix these possible data races, the lock sdp->sd_tune.gt_spin is
    acquired before accessing the fields of gfs2_tune and released after these
    accesses.
    
    Further changes by Andreas:
    
    - Don't hold the spin lock over the seq_printf operations.
    Reported-by: default avatarBassCheck <bass@buaa.edu.cn>
    Signed-off-by: default avatarTuo Li <islituo@gmail.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    6fa0a72c
super.c 38.8 KB