tech-kern archive

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

Re: rwlock issue in secmodel



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, 30 Oct 2014 18:20:01 +0100
Maxime Villard <max%M00nBSD.net@localhost> wrote:

> Le 27/10/2014 21:21, Lars Heidieker a écrit :
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > On Mon, 27 Oct 2014 16:42:15 +0100
> > Maxime Villard <max%M00nBSD.net@localhost> wrote:
> > 
> >> Hi,
> >> I think there's a rwlock issue in secmodel/secmodel.c:
> >>
> >> 174	if (sm == NULL) {
> >> 175		error = EFAULT;
> >> 176		goto out;
> >> 177	}
> >> 178
> >> 179	/* Check if the secmodel is already present. */
> >> 180	rw_enter(&secmodels_lock, RW_WRITER);
> >> ...
> >>   out:
> >> 194	/* Unlock the secmodels list. */
> >> 195	rw_exit(&secmodels_lock);
> >> 196
> >> 197	return error;
> >>
> >> This goto out will release secmodels_lock while it is not yet held,
> >> right?
> >>
> >> The same in secmodel_unplug().
> >>
> > 
> > Yes, seems that way to me.
> > secmodel_plug is only called from secmodel_register, where it would
> > crash anyway if sm is NULL so it should be an assert, right?
> 
> yes, but in case it gets used in the future...
> 
> > (and for unplug the check should be in secmodel_deregister)
> > 
> > Lars
> > 
> 
> Index: secmodel.c
> ===================================================================
> RCS file: /cvsroot/src/sys/secmodel/secmodel.c,v
> retrieving revision 1.1
> diff -u -r1.1 secmodel.c
> --- secmodel.c	4 Dec 2011 19:24:59 -0000	1.1
> +++ secmodel.c	30 Oct 2014 17:17:36 -0000
> @@ -171,10 +171,8 @@
>  	secmodel_t tsm;
>  	int error = 0;
>  
> -	if (sm == NULL) {
> -		error = EFAULT;
> -		goto out;
> -	}
> +	if (sm == NULL)
> +		return EFAULT;
>  
>  	/* Check if the secmodel is already present. */
>  	rw_enter(&secmodels_lock, RW_WRITER);
> @@ -203,10 +201,8 @@
>  	secmodel_t tsm;
>  	int error = 0;
>  
> -	if (sm == NULL) {
> -		error = EFAULT;
> -		goto out;
> -	}
> +	if (sm == NULL)
> +		return EFAULT;
>  
>  	/* Make sure the secmodel is present. */
>  	rw_enter(&secmodels_lock, RW_WRITER);
> 
> 
> Ok?
> 

looks good to me.

lars
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlRYtzsACgkQcxuYqjT7GRZRogCfbFcVHO9Fcxb1uM7UY8MX0RuW
O5AAoNFDw5kQdfTHgatRWQksRO32wvxQ
=MX72
-----END PGP SIGNATURE-----


Home | Main Index | Thread Index | Old Index