Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-6]: src/sys/ufs/ufs Pull up following revision(s) (requested by m...



details:   https://anonhg.NetBSD.org/src/rev/fec841aba4a8
branches:  netbsd-6
changeset: 776803:fec841aba4a8
user:      snj <snj%NetBSD.org@localhost>
date:      Thu Dec 04 05:47:39 2014 +0000

description:
Pull up following revision(s) (requested by manu in ticket #1199):
        sys/ufs/ufs/ufs_extattr.c: revision 1.46 via patch
Fix uninitialized mutex usage
We use extended attribute mount mutex before testing if it had been
initialized, and as reported by Christos,  this caused panic with
LOCKDEBUG. Fix it by testing before using.

diffstat:

 sys/ufs/ufs/ufs_extattr.c |  36 +++++++++++++++++++-----------------
 1 files changed, 19 insertions(+), 17 deletions(-)

diffs (114 lines):

diff -r ac2599f7d8f6 -r fec841aba4a8 sys/ufs/ufs/ufs_extattr.c
--- a/sys/ufs/ufs/ufs_extattr.c Thu Dec 04 05:43:55 2014 +0000
+++ b/sys/ufs/ufs/ufs_extattr.c Thu Dec 04 05:47:39 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ufs_extattr.c,v 1.36.2.4 2014/12/04 05:43:55 snj Exp $ */
+/*     $NetBSD: ufs_extattr.c,v 1.36.2.5 2014/12/04 05:47:39 snj Exp $ */
 
 /*-
  * Copyright (c) 1999-2002 Robert N. M. Watson
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.36.2.4 2014/12/04 05:43:55 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.36.2.5 2014/12/04 05:47:39 snj Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ffs.h"
@@ -1043,6 +1043,9 @@
        struct ufsmount *ump = VFSTOUFS(mp);
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_get(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1069,9 +1072,6 @@
        size_t len, old_len;
        int error = 0;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
-
        if (strlen(name) == 0)
                return (EINVAL);
 
@@ -1160,6 +1160,9 @@
        struct ufsmount *ump = VFSTOUFS(mp);
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_list(ap->a_vp, ap->a_attrnamespace,
@@ -1186,9 +1189,6 @@
        size_t listsize = 0;
        int error = 0;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
-
        error = extattr_check_cred(vp, attrnamespace, cred, l, IREAD);
        if (error)
                return (error);
@@ -1282,6 +1282,9 @@
        struct ufsmount *ump = VFSTOUFS(mp); 
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_rm(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1311,6 +1314,9 @@
        struct ufsmount *ump = VFSTOUFS(mp); 
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        /*
@@ -1349,8 +1355,7 @@
 
        if (vp->v_mount->mnt_flag & MNT_RDONLY)
                return (EROFS);
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
+
        if (!ufs_extattr_valid_attrname(attrnamespace, name))
                return (EINVAL);
 
@@ -1468,8 +1473,7 @@
 
        if (vp->v_mount->mnt_flag & MNT_RDONLY)  
                return (EROFS);
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
+
        if (!ufs_extattr_valid_attrname(attrnamespace, name))
                return (EINVAL);
 
@@ -1541,12 +1545,10 @@
        if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_INITIALIZED))
                return;
 
-       ufs_extattr_uepm_lock(ump);
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED)) {
-               ufs_extattr_uepm_unlock(ump);
-               return;
-       }
+       ufs_extattr_uepm_lock(ump);
 
        LIST_FOREACH(uele, &ump->um_extattr.uepm_list, uele_entries)
                ufs_extattr_rm(vp, uele->uele_attrnamespace,



Home | Main Index | Thread Index | Old Index